高难度实用程序代码
分享给小伙伴
共同进步,不断学习,会继续研究103系列和传感器通信
感谢平台
/*********************************************************************************************/
【*】程序简介
-工程名称:CAN—双机通讯
-MDK版本:5.16
-ST固件库版本:1.5.1
【 !】功能简介:
使用CAN在两个开发板之间通信。
学习目的:学会使用CAN通信。
【 !!】注意事项:
接口:CAN-H CAN-L
跳线帽:使用跳线帽连接 C/4-5V<--->5V (出厂默认没有连接跳线帽,实验前请先连接!!!)。
连接 C/4-5V<--->5V后,由于CAN芯片供电,它的PB8/PB9引脚与液晶数据引脚共用,
会干扰液晶屏,液晶屏颜色会畸变。
CAN波特率1MHz, 报文使用扩展ID,报文滤波,只接收0x1314 EXID的报文。
【 !】实验操作:
若使用两个秉火开发板进行实验,使用线连接两个板子的CAN-H,CAN-L(H与H相连,L与L相连)。
然后两个开发板都下载本程序。
电脑端使用串口调试助手,选择电脑与STM32相连的COM口,设置为115200-N-8-1,
复位开发板,即可接收STM32串口发送给电脑的调试信息。
准备好后,按下其中一个开发板的KEY1键,会使用CAN向外发送0-255的数字。
若开发板的CAN接收到256个字节数据,会把数据以16进制形式打印出来。
/*********************************************************************************************/
【*】 引脚分配
CAN芯片
CAN芯片的电源引脚与排针相连,通过跳线帽STM32的串口相连。(出厂默认没有连接跳线帽)
5V <--->C/4-5V (可通过跳线帽连接到5v)
RXD <--->PB8
TXD <--->PB9
串口(TTL-USB TO USART):
CH340的收发引脚与STM32的发收引脚相连。
RX<--->PA9
TX<--->PA10
/*********************************************************************************************/
【*】 时钟
A.晶振:
-外部高速晶振:25MHz
-RTC晶振:32.768KHz
B.各总线运行时钟:
-系统时钟 = SYCCLK = AHB1 = 180MHz
-APB2 = 90MHz
-APB1 = 45MHz
C.浮点运算单元:
不使用
STM32f429单片机源程序如下:
- /**
- ******************************************************************************
- * @file main.c
- * @author fire
- * @version V1.0
- * @brief CAN通讯实验
- ******************************************************************************
- * @attention
- ******************************************************************************
- */
-
- #include "stm32f4xx.h"
- #include "./led/bsp_led.h"
- #include "./usart/bsp_debug_usart.h"
- #include "./can/bsp_can.h"
- #include "./key/bsp_key.h"
- __IO uint32_t flag = 0; //用于标志是否接收到数据,在中断函数中赋值
- CanTxMsg TxMessage; //发送缓冲区
- CanRxMsg RxMessage; //接收缓冲区
- /// 不精确的延时
- static void can_delay(__IO u32 nCount)
- {
- for(; nCount != 0; nCount--);
- }
- /**
- * @brief 主函数
- * @param 无
- * @retval 无
- */
- int main(void)
- {
-
- LED_GPIO_Config();
-
- /*初始化USART1*/
- Debug_USART_Config();
-
- /*初始化按键*/
- Key_GPIO_Config();
-
- /*初始化can,在中断接收CAN数据包*/
- CAN_Config();
-
- printf("\r\n 欢迎使用秉火 STM32 F429 开发板。\r\n");
- printf("\r\n 秉火F429 CAN通讯实验例程\r\n");
-
- printf("\r\n 实验步骤:\r\n");
- printf("\r\n 1.使用导线连接好两个CAN讯设备\r\n");
- printf("\r\n 2.使用跳线帽连接好:5v --- C/4-5V \r\n");
- printf("\r\n 3.按下开发板的KEY1键,会使用CAN向外发送0-7的数据包,包的扩展ID为0x1314 \r\n");
- printf("\r\n 4.若开发板的CAN接收到扩展ID为0x1314的数据包,会把数据以打印到串口。 \r\n");
- printf("\r\n 5.本例中的can波特率为1MBps,为stm32的can最高速率。 \r\n");
- while(1)
- {
- /*按一次按键发送一次数据*/
- if( Key_Scan(KEY1_GPIO_PORT,KEY1_PIN) == KEY_ON)
- {
- LED_BLUE;
- CAN_SetMsg(&TxMessage);
-
- CAN_Transmit(CANx, &TxMessage);
-
- can_delay(10000);//等待发送完毕,可使用CAN_TransmitStatus查看状态
-
- LED_GREEN;
-
- printf("\r\n已使用CAN发送数据包!\r\n");
- printf("\r\n发送的报文内容为:\r\n");
- printf("\r\n 扩展ID号ExtId:0x%x \r\n",TxMessage.ExtId);
- CAN_DEBUG_ARRAY(TxMessage.Data,8);
- }
- if(flag==1)
- {
- LED_GREEN;
- printf("\r\nCAN接收到数据:\r\n");
- CAN_DEBUG_ARRAY(RxMessage.Data,8);
-
- flag=0;
- }
-
-
- }
- }
- /*********************************************END OF FILE**********************/
复制代码
所有资料51hei提供下载:
CAN—双机通讯.zip
(559.47 KB, 下载次数: 88)
|