STM32使用cubemx搭建基于HAL库的CAN通信
CAN通信可以正常发送,接收进不了中断,环回模式也进不了中断,因此怀疑cubeMX配置出了问题。
·
遇到的问题
CAN通信可以正常发送,接收进不了中断,环回模式也进不了中断,因此怀疑cubeMX配置出了问题。
解决过程
1.MX配置

当时CUBEMX创建工程时,勾选了RX1中断,因为USB和can用的同样的引脚,当时以为上面是USB配置用的,这里埋了大雷。没意识到这里是跟FIFO的选择挂钩的。
2.错误代码

在配置完CAN中断后,进入创建的工程中,自己添加了滤波器的配置函数,这里将滤波器FIFO选择为了FIFO0。
3.官方开发板例程中CAN配置流程

按照例程流程,在CAN_Init函数中依次添加滤波器配置函数、CAN启动函数、使能CAN_FIFO0接收中断函数。这里直接用的FIFO0,跟滤波器中FIFO选择保持了一致,但是与MX配置中断RX1选择不对应。
4.MX配置中断(错误)

MX生成的使能RX1中断。
5.问题解决
一、修改滤波器配置,选择FIFO1,修改HAL_CAN_ActivateNotification(&hcan,CAN_IT_RX_FIFO1_MSG_PENDING) 函数,选择FIFO1_MSG_PENDING
选择FIFO1的中断回调函数
*void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef hcan)
二、勾选MX中RX0中断,选择**void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)**回调函数
更多推荐



所有评论(0)