基于HAL库的CAN通信二:通信调试
注意: 部分STM32芯片有2路CAN控制器,使用CAN2时也需要打开CAN时钟。
如何使用CAN进行收发数据:
根据cubemx本地官方例程总结此版本(FW_F1 V1.8.5)CAN使用流程如下:
依次分析每段代码:
//初始化过滤器
{
CAN_FilterTypeDef sFilterConfig;
/* Configure the CAN Filter */
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(&hcan, &sFilterConfig) != HAL_OK)
{
/* Filter configuration Error */
Error_Handler();
}
/* Start the CAN peripheral */
if (HAL_CAN_Start(&hcan) != HAL_OK)
{
/* Start Error */
Error_Handler();
}
}
//启动接收中断
if (HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO0_MSG_PENDING) != HAL_OK)
{
/* Notification Error */
Error_Handler();
}
//初始化发送结构体
TxHeader.StdId = 0x321;
TxHeader.ExtId = 0x01;
TxHeader.RTR = CAN_RTR_DATA;
TxHeader.IDE = CAN_ID_STD;
TxHeader.DLC = 2;
TxHeader.TransmitGlobalTime = DISABLE;
//接收回调函数
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *CanHandle)
{
/* Get RX message */
if (HAL_CAN_GetRxMessage(CanHandle, CAN_RX_FIFO0, &RxHeader, RxData) != HAL_OK)
{
/* Reception Error */
Error_Handler();
}
if ((RxHeader.StdId == 0x321) && (RxHeader.IDE == CAN_ID_STD) && (RxHeader.DLC == 2))
{
ubKeyNumber = RxData[0];
}
}
//主函数添加代码
CAN_Config();
/* Infinite loop */
while (1)
{
if (ubKeyNumber == 0x4)
{
ubKeyNumber = 0x00;
}
else
{
++ubKeyNumber;
/* Set the data to be transmitted */
TxData[0] = ubKeyNumber;
TxData[1] = 0xAD;
/* Start the Transmission process */
if (HAL_CAN_AddTxMessage(&CanHandle, &TxHeader, TxData, &TxMailbox) != HAL_OK)
{
/* Transmission request Error */
Error_Handler();
}
HAL_Delay(1000);
}
}
实验一:与上位机通信测试
单片机CAN接口通过USB转CAN模块连接至电脑,使用上位机配置can模块,如何进行通信。
我的程序:
链接:https://pan.baidu.com/s/1wNPGgfEfQg78RA_wrdg_oQ?pwd=0j6u
提取码:0j6u
单片机循环发送01-0B,发送05后,接着05发送数据。
这里我用的上位机是模块提供的,这是优信电子提供的下载链接:
https://www.yourcee.com/filedownload/533248