遇到的问题

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)**回调函数

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐