最近测试新做的板子,使用了正点原子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_IRQn
和void CAN1_RX0_IRQHandler(void)
。(库版本是STM32Cube FW_F4 V1.26.0)。
查看了之前自己用的STM32Cube FW_F4 V1.4.0库时,同样用的CAN1_RX0_IRQn
和void CAN1_RX0_IRQHandler(void)
,完全就是正常的。文章来源:https://www.toymoban.com/news/detail-744269.html
网上说由于PA11和PA12同时是USB引脚,所以CAN中断使用的是USB_LP_CAN1_RX0_IRQn
。但经过测试新老版本HAL库都不需要这样用,所以这个地方并不需要搞这么麻烦。评论区的高人知道真正原因的麻烦告知我哈,欢迎交流。文章来源地址https://www.toymoban.com/news/detail-744269.html
到了这里,关于STM32勘误——CAN接收中断到底使用CAN1_RX0_IRQHandler还是USB_LP_CAN1_RX0_IRQHandler的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!