新闻中心

EEPW首页>嵌入式系统>设计应用> STM32之CAN---错误管理分析

STM32之CAN---错误管理分析

作者: 时间:2016-11-24 来源:网络 收藏

3 STM32的bxCAN实现

3.1 bxCAN错误状态图

图2

3.2 出错管理

CAN协议描述的出错管理,完全由硬件通过发送错误计数器(CAN_ESR寄存器里的TEC域),和接收错误计数器(CAN_ESR寄存器里的REC域)来实现,其值根据错误的情况而增加或减少。软件可以读出它们的值来判断CAN网络的稳定性。此外,CAN_ESR寄存器提供了当前错误状态的详细信息。通过设置CAN_IER寄存器(比如ERRIE位),软件可以灵活地控制中断的产生――当检测到出错时。

3.3 离线恢复

当TEC等于255时,bxCAN就进入离线状态,同时CAN_ESR寄存器的BOFF位被置’1’。在离线状态下,bxCAN无法接收和发送报文。

根据CAN_MCR寄存器的ABOM位的设置,bxCAN可以自动或在软件的请求下,从离线状态恢复(变为错误主动状态)。在这两种情况下,bxCAN都必须等待一个CAN标准所描述的恢复过程(CAN RX引脚上检测到128次11个连续的隐性位)。

如果ABOM位为’1’,bxCAN进入离线状态后,就自动开启恢复过程。
如果ABOM位为’0’,软件必须先请求bxCAN进入然后再退出初始化模式,随后恢复过程才被开启。

注: 在初始化模式下,bxCAN不会监视CAN RX引脚的状态,这样就不能完成恢复过程。为了完成恢复过程,bxCAN必须工作在正常模式。

4 CAN错误状态寄存器 (CAN_ESR)

地址偏移量: 0x18
复位值: 0x0000 0000

图3

位31:24 REC[7:0]: 接收错误计数器
这是对CAN协议的故障界定机制接收部分的实现。按照CAN的标准,当接收出错时,根据出错的情况该计数器加1或加8;而在每次接收成功后,该计数器减1,或减少其值为120-当该计数器的值大于127时。当该计数器的值超过127时,CAN进入错误被动状态。
位23:16 TEC[7:0]: 发送错误计数器
与上面相似,这是对CAN协议的故障界定机制发送部分的实现。
位15:7 保留位,硬件强制为0。
位6:4 LEC[2:0]: 上次错误代码
在检测到CAN总线上发生错误时,硬件根据出错情况设置其为1~6的值。当报文被正确发送或接收后,硬件清除其值为’0’。
硬件没有使用错误代码7,软件可以设置该值,从而可以检测代码的更新。
000: 没有错误;
001: 位填充错;
010: 格式(Form)错;
011: 确认(ACK)错;
100: 隐性位错;
101: 显性位错;
110: CRC错;
111: 由软件设置。
位3 保留位,硬件强制为0。
位2 BOFF: 离线(Bus Off)标志
当进入离线状态时,硬件对该位置1。当发送错误计数器TEC溢出,即大于255时,CAN进入离线状态。
位1 EPVF: 错误被动(Error Passive)标志
当出错次数达到错误被动的阈值时,硬件对该位置1。
(接收错误计数器或发送错误计数器的值>127)。
位0 EWGF: 错误警告标志
当出错次数达到警告的阈值时,硬件对该位置1。
(接收错误计数器或发送错误计数器的值≥96)。


上一页 1 2 下一页

关键词:STM32CAN错误管

评论


相关推荐

技术专区

关闭