STM32勘误——CAN接收中断到底使用CAN1_RX0_IRQHandler还是USB_LP_CAN1_RX0_IRQHandler

STM32勘误——CAN接收中断到底使用CAN1_RX0_IRQHandler还是USB_LP_CAN1_RX0_IRQHandler

最近测试新做的板子,使用了正点原子F407V3版本的HAL库例程代码(因为HAL库在更新,老版本的原子的例程使用的较老的HAL库)。其中CAN通信的中断接收出现了问题,原子例程中的用法为:

开启中断:HAL_NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn);
中断函数:void USB_LP_CAN1_RX0_IRQHandler(void);

但是编译错误,提示USB_LP_CAN1_RX0_IRQn未定义,查看库文件确实没有定义(所以猜测原子并没有测试这个地方)。我改成了CAN1_RX0_IRQn,编译成功,但是CAN接收就死机了。于是继续改成void CAN1_RX0_IRQHandler(void),这下数据接受正常了。

实际上我用Cubemx生成的代码里面,默认的就是使用CAN1_RX0_IRQnvoid CAN1_RX0_IRQHandler(void)。(库版本是STM32Cube FW_F4 V1.26.0)。

查看了之前自己用的STM32Cube FW_F4 V1.4.0库时,同样用的CAN1_RX0_IRQnvoid CAN1_RX0_IRQHandler(void),完全就是正常的。

网上说由于PA11和PA12同时是USB引脚,所以CAN中断使用的是USB_LP_CAN1_RX0_IRQn。但经过测试新老版本HAL库都不需要这样用,所以这个地方并不需要搞这么麻烦。评论区的高人知道真正原因的麻烦告知我哈,欢迎交流。

你可能感兴趣的:(单片机,stm32,嵌入式硬件)