出错管理CAN协议描述的出错管理,完全由硬件通过发送错误计数器(CAN_ESR寄存器里的TEC域),和接收错误计数器(CAN_ESR寄存器里的REC域)来实现,其值根据错误的情况而增加或减少。关于TEC和REC管理的详细信息,请参考CAN标准。软件可以读出它们的值来判断CAN网络的稳定性。此外,CAN_ESR寄存器提供了当前错误状态的详细信息。通过设置CAN_IER寄存器(比如ERRIE位),软件可以灵活地控制中断的产生――当检测到出错时。离线恢复当TEC对于255时,bxCAN就进入离线状态,同时CAN_ESR寄存器的BOFF位被置’1’。在离线状态下,bxCAN无法接收和发送报文。根据CAN_MCR寄存器的ABOM位的设置,bxCAN可以自动或在软件的请求下,从离线状态恢复(变为错误主动状态)。在这两种情况下,bxCAN都必须等待一个CAN标准所描述的恢复过程(CANRX引脚上检测到128次11个连续的隐性位)。如果ABOM位为’1’,bxCAN进入离线状态后,就自动开启恢复过程。如果ABOM位为’0’,软件必须先请求bxCAN进入然后再退出初始化模式,随后恢复过程才被开启。注:在初始化模式下,bxCAN不会监视CANRX引脚的状态,这样就不能完成恢复过程。为了完成恢复过程,bxCAN必须工作在正常模式STM32之CAN---错误管理分析分类:ARMSTM322012-11-0816:362444人阅读评论(0)收藏举报目录(?)[+]1几个重要概念根据ISO11898有如下几个重要的与CAN相关的定义:Faultconfinement(错误界定)CANnodesshallbeabletodistinguishshortdisturbancesfrompermanentfailures.Defectivetransmittingnodesshallbeswitchedoff.Switchedoffmeansanodeislogicallydisconnectedfromthebus,sothatitcanneithersendnorreceiveanyframes.CAN节点可以区分常规错误和永久故障。有故障的发送节点将切换到离线状态。离线意味着在逻辑上与总线断开,既不能发送也不能接收。Error-active(主动错误)Anerror-activenodeshallnormallytakepartinbuscommunicationandsendanactiveerrorflagwhenanerrorhasbeendetected.Theactiveerrorflagshallconsistofsix(6)consecutivedominantbitsandshallviolatetheruleofbitstuffingandallfixedformatsappearinginaregularframe.处于主动错误状态的节点能正常参与总线通信的收发和当检测到错误时将发送错误标志,错误标志由6个连续的显示位组成(这种连续的6个显示位与常规的填充位和其它帧固定格式不相同,正因为如此,硬件才容易区别)。Error-passive(被动错误)Anerror-passivenodeshallnotsendanactiveerrorflag.Ittakespartinbuscommunication,butwhenanerrorhasbeendetectedapassiveerrorflagshallbesent.Thepassiveerrorflagshallconsistofsix(6)consecutiverecessivebits.Aftertransmission,anerror-passivenodeshallwaitsomeadditionaltimebeforeinitiatingafurthertransmission.处于被动错误状态的节点不能发送主动错误标志。它能参与正常通信,但当检测到错误时发送的是被动错误标志。被动错误标志由6个连续的隐性位组成。当发送结束后,处于被动错误状态的节点在下一次再次发送时之前需要等待一些额外时间。Bus-off(离线)Anodeshallbeinthebus-offstatewhenitisswitchedofffromthebusduetoarequestofFCE.Inthebus-offstate,anodeshallneithersendnorreceiveanyframes.Anodeshallstarttherecoveryfrombus-offstateonlyuponauserrequest.由于错误界定规则,一个节点可能处于离线状态,当处于此状态时,这个节点既不发送也不接收。至于何时离线恢复取决于何时用户请求。2ISO11898中错误界定的规则2.1描述当涉及到错误界定,一个节点必须处于下述三个错误状态中的其中一个,至于具体是哪种错误状态取决于节点的错误计数值:主动错误状态(Error-active)被动错误状态(Error-passive)离线状态(Bus-off)2.2错误计数错误计数器当检测下下述事件时将修改错误计数值:当一接收节点检测到一个错误时,错误计数器将加1.有一种情况可以排外,即当检测到发送一主动错误标志或者重载标志时出现一位错误时除外。当一接收节点发送一错误标志时,检测到首位为显性位时,错误计数器加8.当一发送节后发送错误标志时,...