CAN作为一款强大的工业总线,其高性能和高可靠性让其应用特别广泛。一个小知识:汽车里面各个模块之间的通讯就是使用CAN来实现的哦。
既然是总线,那当然会有多个设备挂载在CAN上,当一个设备在发送数据的时候,其他设备也没有在闲着,它们会对接收到的数据格式进行解析,一旦发现有错误就会发送错误信号到总线上。
那么,如果一个设备确实出现了问题,老是发出错误格式的帧(比如波特率有偏差等等)怎么办呢?嘿嘿,不等大家把它踢出局,它自己就会老老实实的退出总线,不再往总线上发数据了,这个就叫做BUS-OFF,也就是设备离线。
那么MCU如何触发这个BUS-OFF呢?我们以GD32F303为例来说明。GD32F303的CAN在发送一次错误的帧后,会将发送错误计数器的值+1,当这个计数值达到255时,就会触发BUS-OFF机制,退出总线。
这个时候有的小伙伴就会问了,一个设备运行很长时间,总会有发送错误的时候吧,如果就这么退出总线了,岂不是太冤了?其实不是的,当设备在发送错误计数器的值不等于0的情况下,发送一次正确的帧,这个计数值会-1的。
当一个设备BUS-OFF了,但它自恢复了错误状态,想继续回到总线上怎么操作呢?有两种方式:
1、打开GD32F303的离线自动恢复功能,当出现BUS-OFF,MCU在检测到离线恢复序列(在CAN_RX检测到128次连续11个位的隐性位 )后就会自动恢复。
2、如果没打开自动恢复功能,则需要让CAN进入到初始化模式,再进入正常工作模式即可。
以上即为本期讲解,如有问题或建议,欢迎评论区讨论。
更多GD32 MCU相关咨询:https://www.gd32bbs.com/