我正在尝试设置总线关闭条件来观察 CAN 外设的行为。我正在使用 STM32F103 微控制器,并且正在尝试以下场景:
在上述所有场景中,始终出现一个场景:TEC(传输错误计数器)计数到 128 (0x80),然后切换到错误被动状态(EPVF 设置为 1)。然而,尽管我不断收到错误条件(通过中断),但 TEC 保持不变,其类型包括 ACK 错误(LEC 寄存器 ID 0x03)、格式错误(LEC 寄存器 ID 0x02),甚至填充错误(LEC 寄存器ID 0x10)。这些错误不会影响 TEC 值,并且它不会按我的预期计数。
所以我的问题是:
这是我的调试会话:
注意:我已尝试禁用自动总线关闭管理,但结果仍然相同。
有关 CAN 错误管理的更多信息:https://www.css electronics.com/pages/can-bus-errors-intro-tutorial
几小时后,终于我找到了一篇文章,其中有一句有趣的台词:
当发送器发送错误标志时,TEC 增加 8。 例外 1:如果发送器处于错误被动状态并检测到 ACK 由于未检测到显性 ACK 且未检测到而发生错误 发送其被动错误标志时的显性位。 例外 2:如果 发送器发送错误标志,因为发生了填充错误 在仲裁期间,并且应该是隐性的,并且已被发送 为隐性,但监测为显性。
但是正如我所说,我已经设法得到不同类型的错误,例如Stuff和Bit错误,但仍然看不到总线关闭发生,那是因为我没有调整CAN_IER的BOFIE(总线关闭中断启用) (CAN 中断允许寄存器)打开。 因此,由于自动总线关闭恢复也已启用,因此发生了总线关闭,但在很短的时间内,人们无法看到寄存器更改(在调试会话中),它会自行恢复。
所以我已经配置了:
然后,在打开 CANoe 然后关闭 20 秒后发生总线关闭,这有助于在类型 0x2 和 0x1 上产生更多错误。