STM32 中的CAN总线模块是具有故障监测功能的
就是CANx_SCE_IRQHandler
这个用的很少,它叫CAN总线状态改变中断
通过打开这个中断,配合代码可以精确的监测CAN总线的故障情况
就是监测对应CAN的ESR寄存器
可以使用轮询或者中断的方式
中断的方式,以CAN1为例
调用HAL_NVIC_EnableIRQ(CAN1_SCE_IRQn),调好优先级,在CAN1_SCE_IRQHandler里面编好功能就可以
只要CAN总线发送状态改变,就会触发中断
可以非常灵敏的检测CAN总线断线,短路等等故障
查询比较好些,这样不会频繁进中断
简单设计了一个故障监测计数的功能,1ms刷新一次CAN_Error_Process函数,计数超了就置位标志,可以提供到应用层作为收发函数的调用判断前提,并且把收发FIFO的故障检测一并做了进来,方便监测。
链接