久芯网

STM32L471 CAN通信中TEC计数器到了250逼近255,为何突然CAN_ESR寄存器全部清空了?

avatar Starryamber 提问时间: 2023-08-24 07:30:25 / 未解决
测试环境:多个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表示
BOFF EPVF EWGF
这三个bit的数值 为0
<a style=STM32L471 CAN通信中TEC计数器到了250逼近255,为何突然CAN_ESR寄存器全部清空了? [相关图片]' title='STM32L471 CAN通信中TEC计数器到了250逼近255,为何突然CAN_ESR寄存器全部清空了? [相关图片]' />

LOG图例:
STM32L471 CAN通信中TEC计数器到了250逼近255,为何突然CAN_ESR寄存器全部清空了? [相关图片]


结果现象:
从log中可以看到,TEC一直在累加,当然后面也有减小的趋势,但是突然TEC就清空了,然后EPVF EWGF也变为了0.
这是为什么呢?难道有什么自动清空机制吗?
按照ISO协议的标准,我理解他应该是慢慢递减的。是STM32内部有什么特殊处理吗?

如需获得 STM32L471 等器件的更多信息,请点击链接或 点击此处 联系在线客服!

4个回答
  • avatar xmshao
    回答时间: 2023-08-24 07:50:22

    当节点的发送错误计数器TEC大于255时节点会进入离线状态。当离线节点再次回到主动错误状态时,TEC/LEC会被清零。这些都是CAN协议约定的,你可以看看CAN协议相关内容。

  • avatar Starryamber
    回答时间: 2023-08-24 08:09:13
    xmshao 发表于 2021-9-24 11:15
    当节点的发送错误计数器TEC大于255时节点会进入离线状态。当离线节点再次回到主动错误状态时,TEC/LEC会被 ...

    但是你也看到了,我监听的寄存器BUS OFF标志位没有被set呢。而且你说的离线节点 再次回到主动错误状态,也需要一定时间吧,但是我后面发现他是很快就恢复了,你可以看LOG前面的时间戳,精确到ms的,后面B设备也是很快响应A发的数据的

  • avatar Starryamber
    回答时间: 2023-08-24 08:38:42
    xmshao 发表于 2021-9-24 11:15
    当节点的发送错误计数器TEC大于255时节点会进入离线状态。当离线节点再次回到主动错误状态时,TEC/LEC会被 ...

    我想应该是进入了BUS OFF,可能没有捕获到。

  • avatar xmshao
    回答时间: 2023-08-24 09:03:25
    Starryamber 发表于 2021-9-24 13:50
    我想应该是进入了BUS OFF,可能没有捕获到。

    认同你的看法。

会员中心 微信客服
客服
回到顶部