| 测试环境:多个CAN节点连接在CAN总线上,A设备向B设备发起数据传输,B会根据A的数据进行响应。期间没有其他节点发送数据帧。 LOG说明: [CAN-1-rx-tx-lx-fx]表示A设备发送的数据(其中的x表示任意数值) [CRNR]表示A设备接收到的CAN总线上的数据 eg: [CANR-1-r0-t27-l0-f0] 表示: r0 表示REC错误计数器为0, t27表示TEC错误计数器为27, l0表示LEC为0,f0表示
STM32L471 CAN通信中TEC计数器到了250逼近255,为何突然CAN_ESR寄存器全部清空了? [相关图片]' title='STM32L471 CAN通信中TEC计数器到了250逼近255,为何突然CAN_ESR寄存器全部清空了? [相关图片]' />
LOG图例:
结果现象: 从log中可以看到,TEC一直在累加,当然后面也有减小的趋势,但是突然TEC就清空了,然后EPVF EWGF也变为了0. 这是为什么呢?难道有什么自动清空机制吗? 按照ISO协议的标准,我理解他应该是慢慢递减的。是STM32内部有什么特殊处理吗? |
当节点的发送错误计数器TEC大于255时节点会进入离线状态。当离线节点再次回到主动错误状态时,TEC/LEC会被清零。这些都是CAN协议约定的,你可以看看CAN协议相关内容。
当节点的发送错误计数器TEC大于255时节点会进入离线状态。当离线节点再次回到主动错误状态时,TEC/LEC会被 ...
但是你也看到了,我监听的寄存器BUS OFF标志位没有被set呢。而且你说的离线节点 再次回到主动错误状态,也需要一定时间吧,但是我后面发现他是很快就恢复了,你可以看LOG前面的时间戳,精确到ms的,后面B设备也是很快响应A发的数据的
当节点的发送错误计数器TEC大于255时节点会进入离线状态。当离线节点再次回到主动错误状态时,TEC/LEC会被 ...
我想应该是进入了BUS OFF,可能没有捕获到。
我想应该是进入了BUS OFF,可能没有捕获到。
认同你的看法。