|
【STM32F746 Nucleo】二、CubeMX开发CAN通讯
[复制链接]
- CubeMx
1.1 CubeMx加载开发板HAL库,也可以加载芯片HAL库
2 CubeMX 已经配置过SYS 需要查看一下
3 时钟配置 在这也选择默认
- CAN通讯配置
在此需要配置时钟分频系数,从而得到想要的通讯波特率
在新版的CubeMX 有显示分频后的CAN波特率,Baud Rate 750000bit/s 也就是750Kbit/s
5.RCC时钟源查看设置
6.程序生成为.c和.h文件
7.设置工程文件名设置生成MDK开发环境,设置代码工程的保存路径
- 引脚功能引脚
查看硬件电路引脚位置,并找到供电位置。
- CAN通讯设置
3.1 设计了一个CAN通讯模块,然后使用杜邦线进行链接,如图所示:
3.2 CAN通讯设置
通讯频率设置为250K
3.3 程序代码开发完后,进行通讯测试
- 软件代码
4.1 CAN发送和接收函数代码
- CAN_TxHeaderTypeDef TXHeader;
- CAN_RxHeaderTypeDef RXHeader;
- uint8_t TXmessage[8] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
- uint8_t RXmessage[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};uint32_t pTxMailbox = 0;
- uint32_t CAN_ID = 0x01;
- int counT_A = 0;
- int counT_B = 0;
- void CAN_Config(void)
- {
- CAN_FilterTypeDef sFilterConfig;
- sFilterConfig.FilterBank = 0;
- sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
- sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
- sFilterConfig.FilterIdHigh = 0x0000;
- sFilterConfig.FilterIdLow = 0x0000;
- sFilterConfig.FilterMaskIdHigh = 0x0000;
- sFilterConfig.FilterMaskIdLow = 0x0000;
- sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;
- sFilterConfig.FilterActivation = ENABLE;
- sFilterConfig.SlaveStartFilterBank = 14;
- if(HAL_CAN_ConfigFilter(&hcan1,&sFilterConfig) != HAL_OK)
- {
- Error_Handler();
- }
- if(HAL_CAN_Start(&hcan1) != HAL_OK)
- {
- Error_Handler();
- }
- if(HAL_CAN_ActivateNotification(&hcan1,CAN_IT_RX_FIFO0_MSG_PENDING) != HAL_OK)
- {
- Error_Handler();
- }
-
-
-
-
-
-
-
- }
- void CAN_senddata(CAN_HandleTypeDef *hcan,uint32_t can_id)
- {
- TXHeader.StdId=can_id ;
- TXHeader.ExtId=0x12345000;
- TXHeader.DLC=8;
- TXHeader.IDE=CAN_ID_EXT;
- TXHeader.RTR=CAN_RTR_DATA;
- TXHeader.TransmitGlobalTime = DISABLE;
- HAL_CAN_AddTxMessage(hcan,&TXHeader,TXmessage,&pTxMailbox);
- }
-
- uint8_t RxData[8];
- uint8_t ubKeyNumber=0;
-
- void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
- {
-
- if (HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RXHeader, RxData) != HAL_OK)
- {
-
- Error_Handler();
- }
-
-
- if ((RXHeader.StdId == 0x321) && (RXHeader.IDE == CAN_ID_STD) && (RXHeader.DLC == 2))
- {
-
- ubKeyNumber = RxData[0];
- }
- }
4.2 声明和调用函数代码
- void CAN_Config(void);
-
- extern uint8_t TXmessage[8];
-
- extern uint8_t RXmessage[8];
-
- extern uint32_t CAN_ID;
-
- extern int counT_A;
-
- extern int counT_B;
-
- void CAN_senddata(CAN_HandleTypeDef *hcan,uint32_t can_id);
-
- uint32_t CAN1_Receive_Msg(uint8_t *buf);
-
- while (1)
- {
-
- HAL_GPIO_WritePin(GPIOB, LD1_Pin|LD3_Pin|LD2_Pin, GPIO_PIN_RESET);
- HAL_Delay(500);
- HAL_GPIO_WritePin(GPIOB, LD1_Pin|LD3_Pin|LD2_Pin, GPIO_PIN_SET);
- HAL_Delay(500);
- CAN_senddata(&hcan1,0x08A);
-
-
-
- }
4.3 工程包文件
-
can.rar
(26.21 MB, 下载次数: 18)
|
|