控制器:STM32H743
功能:双路CANFD
速率:1M_5M
CANFD时钟为20M
采样点数:仲裁场85%,数据场75%。配置如下
hfdcan1.Init.NominalPrescaler = 1;
hfdcan1.Init.NominalSyncJumpWidth = 3;
hfdcan1.Init.NominalTimeSeg1 = 16;
hfdcan1.Init.NominalTimeSeg2 = 3;
hfdcan1.Init.DataPrescaler = 1;
hfdcan1.Init.DataSyncJumpWidth = 1;
hfdcan1.Init.DataTimeSeg1 = 2;
hfdcan1.Init.DataTimeSeg2 = 1;
问题:调试STM32H743过程中,参考正点原子的代码,轮询方式两路CANFD接收发送都是OK的,后来使用CUBE改为中断方式然后生成代码,发现不能发送,可以进接收中断,发送32次之后,就出现进不了接收中断,后来手动添加CANFD中断代码,CANFD中断接收/发送成功。(原因可能是CUBE的某些配置和我写的不一样,或者CUBE版本太低导致,具体原因后面排查)
自己添加的CANFD中断代码有
- HAL_FDCAN_MspInit函数里面增加配置:中断优先级、使能FDCAN1中断代码
- HAL_FDCAN_MspDeInit函数里面增加:关闭FDCAN1中断代码
- 增加CANFD中断调用函数
- 增加FIFO调用函数
void HAL_FDCAN_MspInit(FDCAN_Handle