stm32F4 CAN总线学习 下载本文

当一个固定形式的位场含非法位,则检测到一个Frame Check Error(接收端检测到帧结束最后一位为显性时帧错误忽略)。

5. 应答错误(Acknowledgment Error)

ACK SLOT采样为隐性,则检测到一个Acknowledgement Error。

错误状态转换 当一个节点检测到错误时就会发送错误标志来指示错误。处于“错误激活状态”的节点发送主动错误标志,处于“错误认可状态”的节点发送被动错误标志。

由于处于故障状态的网络设备主动发送错误标志(违反位填充规则的6个显性位)可能导致整个总线通信的瘫痪(显性位占主导)。因此,所有CAN控制器中均内置一种基于错误计数器的故障识别功能。该故障识别功能能够是出于故障状态的CAN控制器禁用主动错误标志,并转换到被动错误标志(隐性位),从而不影响网络中其他设备的通信。 CAN控制器内置两个错误计数器:Receive Error Counter及Tranmit Error Counter。当某个计数器的当前值达到128时,CAN控制器将进入“被动错误模式”,此时该节点仍然参与CAN通讯,检测到错误时只能发送“被动错误帧”,且错误帧发送完毕重启下一个发送之前有8bits位时的挂起状态;当Tranmit Error Counter当前值为255接着又一个错误被检测到时,CAN控制器将进入“总线关闭模式”,此时该节点与总线完全脱离,整个瘫痪;计数器当前值均小于128时,CAN控制器被标识为“主动错误模式”,CAN节点可正常通讯并检测到错误时发送“主动错误帧”。

节点错误状态的切换与发送错误计数器(TEC)和接收错误计数器(REC)有关,三种错误状态的转换关系如下所示:

当发送错误计数器值等于或超过128时,或当接收错误计数器值等于或超过128时,节点进入“错误认可状态”。

当发送错误计数器值大于或等于256时,节点进入“总线关闭状态”。 当发送错误计数器值和接收错误计数器值都小于或等于127时,“错误认可状态”节点重新进入“错误激活状态”。

在总线监视到128次出现11个连续“隐性”位之后,“总线关闭”的节点可以变成“错误激活”节点,它的两个错误计数值也被置为0。

5

错误计数规则

错误计数器当检测到下述事件时将修改错误计数值:

? 当接收节点检测到一个错误时,接收错误计数器将加1。在发送“认可错误”标志

或过载标志期间,所检测到的错误为位错误时,接收错误计数器值不加1。 ? 当接收节点发送错误标志后,检测到第一位为显性位时,接收错误计数器加8。 ? 当发送节点发送一错误标志时,发送错误计数器加8。这时有两种情况除外:

1:发送节点为“错误认可状态”测到应答错误(在应答错误中检测不到显性位),而且在发送“被动错误”标志时也检测不到“显性”位。

2:发送节点由于在仲裁期间发生填充错误,此填充位应该为隐性位,但却检测出显性位,发送器送出错误标志。

? 发送节点发送主动错误标志或过载标志时,检测到位错误时,发送错误计数器加8。 ? 接收节点发送主动错误标志或过载标志时,检测到位错误时,接受错误计数器加8。 ? 任何节点在发送主动错误标志,被动错误标志,或过载标志时最多允许7个连续的

显性位。在以下3种情况,每一发送器将它们的发送错误计数值加8,同时每一接收器的接收错误计数值加8:

1) 当检测到第14个连续的“显性”位后;

2) 当检测到第8个连续的“显性”位跟随在“被动错误”标志后; 3) 在一个附加的8个连续“显性”位序列后。

? 成功发送一帧报文后,发送错误计数器应减1,除非当前已经为0。

? 成功接收一帧报文后,如果当前接收错误计数器的值大于1且小于127,则接收错

误计数器减1;如果接收计数器的值为0,则保持为0;如果大于127,则它会设置一个介于119到127之间的值。

6

2. Stm32 bxCAN学习

bxCAN基础

1. Stm32 bxCAN的主要特性

? 支持can协议2.0A和2.0B ? 位速率高达1Mbps ? 支持时间触发通信选项 发送

? 3个发送邮箱

? 可配置的发送优先级 ? SOF传输时间戳 接收

? 两个接收FIFO,每个可存储三条消息。 ? 28个CAN1\\CAN2共享可伸缩滤波器 ? 标识符列表功能 ? 可配置FIFO溢出 ? SOF接收时间戳 时间触发通信选项 ? 禁用自动重传模式 ? 16位独立运行定时器

? 时间戳在最后两个数据字节发送 管理

? 可屏蔽中断

? 可通过软件在特定地址空间内进行邮箱映射 双CAN

? CNA1:主bxCAN,能够管理从bxCAN和512byte的SRAM空间 ? CAN2:从bxCAN,无权限直接访问SRAM

2. bxCAN整体概述

当今CAN应用中,节点的数量在不断增加并且经常多个网络通过网关的连接在一起;因此网络上的消息数量显著增加。除了应用消息外,网络管理和诊断报文也被引入到网络中。

? 一种增强的过滤机制来处理每种类型的消息。此外,应用程序需要更多的CPU时间,

因此消息接收必须减少的需求导致了实时约束的产生。

? 采用接收FIFO机制,可以使CPU长时间处理应用程序而不丢失信息。

3. 控制、状态和配置寄存器

应用程序使用这些寄存器来:

? 配置CAN的参数;例如:波特率 ? 请求发送 ? 处理接收 ? 管理中断

7

? 获取诊断信息

4. 发送邮箱

三个发送邮箱用于软件发送消息。发送状态机决定哪个邮箱最先发送

5. 接收滤波器

bxCAN提供28个可配置伸缩滤波器,用于选择应用需要的消息并且丢弃其余消息。stm32其他设备只拥有14个这种寄存器。

6. 接收FIFO

硬件自动使用两个接收FIFO来存储收到的消息。每个FIFO中可存储三个完整的消息,这些FIFO完全由硬件管理。

7. bxCAN操作模式

bxCAN有三个主要的操作模式:初始化、正常和睡眠。硬件复位后bxCAN进入睡眠模式以降低功耗同时上拉CANTX脚。软件可以通过设置CAN_MCR寄存器中的INRQ或者SLEEP位来请求bxCAN进入初始模式或者睡眠模式。一旦进入该模式,bxCAN通过设置CAN_MSR寄存器中的INAK或SLAK位并禁用内部上拉来确认。当INAK和SLAK都没被设置,则bxCAN处于正常模式。在进入正常模式前bxCAN必须与CAN总线同步。为了同步,bxCAN会一直等待直到CAN总线进入空闲,即在CANRX引脚上收到连续11个隐性电平。

初始化模式

? 软件通过对CAN_MCR寄存器的INRQ位置1,来请求bxCAN进入初始化模式,然

后等待硬件对CAN_MSR寄存器的INAK位置1来进行确认。

? 软件通过对CAN_MCR寄存器的INRQ位清0,来请求bxCAN退出初始化模式,当

硬件对CAN_MSR寄存器的INAK位清0就确认了初始化模式的退出。

? 当bxCAN处于初始化模式时,报文的接收和发送都被禁止,并且CANTX引脚输出

隐性位(高电平)。

? 进入初始化模式不会改变任何配置寄存器。

? 为了初始化CAN控制器,软件必须设置位定时寄存器(CAN_BTR)和CAN选项寄

存器(CAN_MCR)。

正常模式

? 在初始化完成后,软件必须让硬件进入正常模式,以便正常接收和发送报文。 ? 软件可以通过对CAN_MCR寄存器的INRQ位清0,来请求从初始化模式进入正常模

式,然后要等待硬件对CAN_MSR寄存器的INAK位置1的确认。在跟CAN总线取得同步,即在CANRX引脚上监测到11个连续的隐性位(等效于总线空闲)后,bxCAN才能正常接收和发送报文。

? 过滤器初值的设置是独立于初始化模式的,但必须在滤波器激活前完成(相应FACTx

位为0)。而滤波器的位宽和模式必须在进入正常模式前完成。

睡眠模式

8