stm32F4 CAN总线学习 下载本文

STM32F4 CAN学习记录

1. CAN协议学习

CAN基础

1. CAN属于多主机局部网,采用多主竞争式总线结构,具有多主站运行和分散仲裁的串行

总线以及广播通信的特点,各节点之间可以实现自由通信。

2. CAN总线以报文为单位进行数据传送,报文的优先级由标识符决定,具有最低二进制数

的标识符有最高的优先级。

3. CAN总线采用差分电压传输;在空闲状态下CAN_H和CAN_L均为2.5V左右,此时的状

态表示为逻辑“1”,称为“隐性”电平(差值为\;当CAN_H比CAN_L高时表示逻辑“0”,称为“显性”电平(差值为\。显性时,通常电压值为:CAN_H=3.5V,CAN_L=1.5V。 4. CAN总线采用“载波监测,多主掌控/冲突避免”(CSMA/CA)的通信模式。该模式工

作流程大致如下:

? 当总线处于空闲状态时(呈隐性电平),任何节点都可以向总线发送显性电平作为

帧开始。

? 当网络中存在2个及以上节点同时要求发送时就会产生竞争。CAN总线按位对标识

符进行仲裁;各节点在发送电平的同时也在监听总线,如果总线电平与发送电平不同,则表明总线上存在更高优先级的节点在发送,则节点停止发送退出竞争。其他节点继续上述过程直到剩余1个节点,则最终优先级最高节点获得总线控制权并发送数据。

? 参与总线仲裁的只有仲裁段;基础ID相同的标准can报文比扩展can报文优先级

更高;相同ID的数据帧与远程帧,数据帧优先级更高。

CAN报文结构

CAN分为标准格式(CAN2.0A)和扩展格式(CAN2.0B);标准帧采用11位标识符ID,共可表示2047条报文;扩展帧采用29位标识符ID,共可表示5亿多条报文。

CAN总线上传输的数据帧共有4种类型:数据帧、远程帧、错误帧、过载帧。每一帧都由多个场构成,每个场也都由多个位组成。下面分别描述着几种帧结构。

1) 数据帧:用于传输数据

数据帧由7个不同的位场组成:帧起始、仲裁场、控制场、数据场、CRC场、应答场、帧结尾。数据帧组成如下图。

1

根据标识符ID长度的不同又可分为标准数据帧和扩展数据帧;标准格式具有11位标识符,扩展格式具有29位标识符。两种格式的仲裁场部分不相同,其余场都基本一致;具体组成分别如下:

? 标准数据帧格式

? 帧起始:(SOF)标志着数据帧和远程帧的起始。它以一个比特的显性位“0”出现,

只有在总线处于空闲状态时,才允许发送。 ? 仲裁场:(Arbitration Field)由标识符(Identifier)和远程发送请求位(RTR)标志

组成。数据帧RTR=0;远程帧RTR=1;标识符的长度为11位,按高位在前低位在后的顺序发送,最低位为ID.0。

? 控制场:控制场包括两个保留位(IDE/R1、R0)和4位数据长度码(DLC),这两个

保留位必须发送显性位(逻辑0)。

? 数据场:数据场由被发送的数据组成,包括0~8个字节(最长8字节)。 ? CRC场:由15位CRC序列和1位CRC界定符(必须为逻辑1)组成。 ? 应答场:(ACK)由应答间隙(逻辑1)和应答界定符(逻辑0)组成。 ? 帧结束:每个数据帧和远程帧均由7个隐性位(逻辑1)组成。

? 扩展数据帧格式

? 帧起始:同标准帧格式。

? 仲裁场:在扩展帧格式中,仲裁场由:11位基本ID、SRR、IDE、18位扩展ID、RTR

组成。SRR位为“替代远程请求位”,属于扩展格式,它位于扩展帧中标准帧RTR的位置,因而替代标准帧的RTR位。在扩展帧格式中,IDE属于仲裁场,采用隐性电平;标准格式中,IDE属于控制场,采用现行电平;通过IDE可以区分标准帧和扩展帧。

? 控制场:同标准帧格式

2

? ? ? ?

数据场:同标准帧格式。 CRC场:同标准帧格式。 应答场:同标准帧格式。 帧结束:同标准帧格式。

2) 远程帧:用于请求具有同一标识符的数据帧

远程帧也有标准格式和扩展格式,而且都由6 个不同的位场组成:帧起始、仲裁场、控制场、CRC场、应答场、帧结尾。远程帧的组成如下图。

远程帧本身没有数据场,除RTR位被设置为1,其余部分与数据帧完全相同

3) 错误帧:任何单元检测到总线错误就发出错误帧 错误帧由两个不同的场组成。第一个场是由不同站提供的错误标志(ERROR FLAG)的叠加;第二个场是错误界定符。出错帧的组成如下图。

错误标志重叠:

错误标志分为主动错误标志和被动错误标志。主动错误标志由6个显性位(逻辑0)组成,被动错误标志由6个隐性位(逻辑1)组成。当一个节点发生错误时,如果处于主动错误状态就会发送主动错误标志,处于被动错误状态时发送被点动错误标志。

错误界定符:

错误界定符由8个隐性电平(逻辑1)组成,用于结束错误帧(1位错误界定符7位EOF组成)。

4) 过载帧:用于在先行和后续数据帧(或远程帧)之间提供一附加的延时

过载帧通常由尚未处理完上一帧消息的CAN控制器发出,可以用于延迟网络中其他设备发送下一帧消息。过载帧的结构类似于错误帧,过载帧包括两个位场:过载标志和过载界定符。过载帧的组成如下图。

3

过载标志:

过载标志由6 个“显性”的位组成。过载标志的所有形式和主动错误标志的一样。过载标志的形式破坏了间歇场的固定形式。因此,所有其他的站都检测到过载条件并与此同时发出过载标志。

过载界定符:

过载界定符包括8个“隐性”的位。过载界定符的形式和错误界定符的形式一样。过载标志被传送后,站就一直监视总线直到检测到一个从“显性”位到“隐性”位的跳变。此时,总线上的每一个站完成了过载标志的发送,并开始同时发送剩余的7个“隐性”位。

帧间空间(Interframe Space)

数据帧(或远程帧)与先行帧的隔离是通过帧间空间实现的,无论此先行帧类型如何(数据帧、远程帧、错误帧、过载帧)。所不同的是,过载帧与错误帧之前没有帧间空间,多个过载帧之间也不是由帧间空间隔离的。

CAN错误处理

在CAN总线中,任何一个单元可能处于下列3种故障状态之一: 1. 错误激活状态(ErrorActive)

处于该状态(通常说的正常状态也应该包含在内)的节点可以不受任何限制地发送报文和主动错误帧(由显性位构成)。 2. 错误认可状态(Error Pasitive)

处于被动错误状态的节点可以发送报文和被动错误帧(由隐性位构成)。 3. 总线关闭状态(Bus off)

处于总线关闭状态的节点暂时不能参与总线通讯。这一状态下,既无法发送报文,也无法接收报文。只有发送器能够进入总线关闭状态。

每一个CAN控制器都能够检测到如下五种错误: 1. 位错误(Bit Check Error)

发送器在发送比特流的同时也对发出的比特流采样回收,若送出的bit与所期待的bit不合,则会检测到一个Bit Check Error 2. 位填充错误(Bit Stuff Error)

在需要执行位编码规则的位流序列中检测到第6个连续的极性相同的位序流时,则检测到一个Bit Stuff Error。 3. CRC错误(CRC Error)

发送端送出的CRC序列由发送器算出,接收器执行同样的CRC算法,若计算结果与接收到的CRC序列不符,一个CRC Error被检测到,由发送端送出。 4. 帧格式错误(Frame Check Error)

4

当一个固定形式的位场含非法位,则检测到一个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

? 为了减少功耗,bxCAN有一个叫睡眠模式的低功耗模式。这种模式可以通过软件设

置CAN_MCR寄存器的SLEEP位为1来进入。在该模式下bxCAN的时钟被停止,但软件仍可以访问bxCAN的邮箱。

? 当bxCAN处于睡眠模式,如果软件想通过对CAN_MCR寄存器的INRQ位置1,来

进入初始化式,那么软件必须同时对SLEEP位清0才行。

? 有2种方式可以唤醒(退出睡眠模式)bxCAN:通过软件对SLEEP位清0,或硬件

检测CAN总线的活动。

? 当总线上检测到活动时,如果CAN_MCR寄存器的AWUM位被置1,那么硬件会自

动通过对SLEEP位清0来执行唤醒。当唤醒中断发生时,为了退出睡眠模式,软件会清除SLEEP位。

8. bxCAN测试模式

测试模式可以通过CAN_BTR寄存器中的SILM和LBKM位来选择,这些位必须在bxCAN处于初始化模式期间配置,一旦测试模式被选择,为了进入普通模式CAN_MCR寄存器的INRQ位必须被清0。

静默模式 通过设置CAN_BTR寄存器中的SILM位,bxCAN能够进入静默模式。在静默模式下,bxCAN能够接受有效数据帧和有效远程帧,但它此时只能向CAN总线上发送隐性位并且不能启动传输。如果bxCAN不得不发送显性位(ACK位、过载标志、主动错误标志),这些位会内部改航以便CAN内核能够监视这些显性位,尽管CAN总线保持着隐性状态。静默模式可以用来在不影响显性位传输(ACK位、错误帧)的情况下分析CAN总线的流量。 静默模式示意如下:

回环模式 通过设置CAN_BTR寄存器的LBKM位,bxCAN能够进入回环模式。在回环模式下,bxCAN将自己发送的消息当做接收消息并将其存储在接收邮箱中(如果能够通过滤波器)。 该模式是用来提供自测试功能的,为了独立于外部事件,回环模式下CAN核忽略应答错误。在该模式下,bxCAN执行Tx输出脚到Rx输入脚的反馈。CANRX引脚的实际功能被bxCAN忽视,传送的消息能够在CANTX引脚上被监控到。 回环模式效果示意如下:

9

回环模式结合静默模式 通过置位CAN_BTR寄存器中的SILM和LBKM位来结合回环模式和静默模式。该模式能够用于“热自测”,这意味着bxCAN能够像回环测试一样自测,但不会影响到连接到CANTX和CANRX的CAN网络。在该模式下,CANRX与总线断开,CANTX保持隐性状态(逻辑1)。 该模式示意如下:

bxCAN功能描述

发送过程 应用程序选择1个空发送邮箱;设置标识符,数据长度和待发送数据;然后对CAN_TIxR寄存器的TXRQ位置1,以请求发送。TXRQ位置1后,邮箱就不再是空邮箱;而一旦邮箱不再为空,软件对邮箱寄存器就不再有写的权限。TXRQ位置1后,邮箱马上进入挂起状态,并等待成为最高优先级的邮箱,参见发送优先级。一旦邮箱成为最高优先级的邮箱,其状态就变为预发送状态。一旦CAN总线进入空闲状态,预定发送邮箱中的报文就马上被发送(进入发送状态)。一旦邮箱中的报文被成功发送后,它马上变为空邮箱;硬件相应地对CAN_TSR寄存器的RQCP和TXOK位置1,来表明一次成功发送。

如果发送失败,由于仲裁引起的就对CAN_TSR寄存器的ALST位置1,由于发送错误引起的就对TERR位置1。

10

发送优先级

1)

由标识符决定

当有超过1个发送邮箱在挂号时,发送顺序由邮箱中报文的标识符决定。根据CAN协议仲裁,标识符数值最低的报文具有最高的优先级。如果标识符的值相等,那么邮箱号小的报文先被发送。

2)

由发送请求次序决定

通过对CAN_MCR寄存器的TXFP位置1,发送邮箱可以被配置为发送FIFO。在该模式下,发送的优先级由发送请求次序决定。该模式对分段发送很有用。

3)

中断

用户可以通过对CAN_TSR寄存器的ABRQ位置1来中断传输请求。当邮箱处于挂起状态或预发送状态,邮箱被立即中断。当请求中断处于发送状态的邮箱时,会有两种结果:如果邮箱已经成功发送,邮箱会被清空并且CAN_TSR寄存器中的TXOK位被置1,;如果邮箱传输失败,邮箱会变为预发送状态,并且TXOK被清0。在所有的可能中,至少在当前传输结束时会被清空。

4)

非自动传输模式

该模式是为了实现标准CAN的时间触发通信选项的要求被实现的。要配置硬件进入该模式,CAN_MCR寄存器的NART位必须被置1。 在该模式下,每一个传输只会被开始一次。如果首次尝试失败,无论是由于仲裁丢失还是一个错误,硬件都不会自动重传该消息。 在尝试第一次传输结束时,硬件认为请求完成并置位CAN_TSR寄存器中的RQCP位。传输的结果通过CAN_TSR寄存器中的TXOK、ALST和TERR位指示。

时间触发通信模式 在该模式下,CAN硬件的内部定时器被激活,并且被用于产生时间戳,值被分别存储在 CAN_RDTxR/CAN_TDTxR寄存器中。内部定时器在每个CAN位时间被增加。内部定时器在接收和发送的帧起始位的采样点位置被采样,并生成时间戳(标有时间的数据)。

接收过程 为了接收CAN消息,3个邮箱被组织成一个FIFO。为了减轻CPU负担,简化软件,降低数据耦合性,这些FIFO都有硬件进行管理。应用程序访问存储在FIFO中的消息是通过FIFO输出邮箱完成的。

1)

有效报文

根据CAN协议,当报文被正确接收(直到EOF域的最后1位都没有错误),且通过了标识符过滤,那么该报文被认为是有效报文。

2)

FIFO管理

从空状态开始,第一个消息被正确接收并存储在FIFO中后FIFO变成“挂起1”状态,硬件通过设置CAN_RFR寄存器中的FMP[1:0]位为01b来指示。该消息在FIFO输出邮箱中是有效的,软件可以读走邮箱中内容并通过设置CAN_RFR寄存器中的RFOM来释放邮箱,此

11

时FIFO会再次变成空状态。如果同时一个有效地新消息被接收,FIFO进入“挂起1”状态,并且在输出邮箱中有新的消息。

如果应用程序没有释放邮箱,下一个有效消息被接收时FIFO进入“挂起2”状态(FMP[1:0]=10b)。存储过程重复直到下一个有效消息被接受,FIFO进入“挂起3”状态(FMP[1:0]=11b)。在此时,软件必须通过设置RFOM位来释放输出邮箱(FIFO只能存储三条消息),以便邮箱是空的能够存储下一个有效消息。否则,下一个有效消息接收会导致消息丢失。

FIFO溢出处理 当FIFO处于“挂起3”状态时,下一个有效消息的接收会导致FIFO溢出并丢失一条消息。硬件通过CAN_RFR寄存器中FOVR位置1来指示溢出。溢出时,那一条消息被丢弃根据FIFO的配置来决定:

? 如果FIFO锁定功能被关闭(CAN_MCR寄存器的RFLM位被清0),FIFO中的最后一位消

息会被覆盖,在这种情况下最后一条消息对应用来说总是有效的。 ? 如果FIFO锁定功能被打开(CAN_MCR寄存器的RFLM位被置1),最新的消息将会被丢

弃,则FIFO中会有三条最老的消息可用。

接收相关中断

? 一旦往FIFO存入1个报文,硬件就会更新FMP[1:0]位,并且如果CAN_IER寄存器的FMPIE

位为1,那么就会产生一个中断请求。 ? 当FIFO变满时(即第3个报文被存入),CAN_RFxR寄存器的FULL位就被置1,并且如

果CAN_IER寄存器的FFIE位为1,那么就会产生一个满中断请求。

? 在溢出的情况下,FOVR位被置1,并且如果CAN_IER寄存器的FOVIE位为1,那么就会

产生一个溢出中断请求

标识符过滤

在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此,发送者以广播的形式把报文发送给所有的接收者。(注:不是一对一通信,而是多机通信)节点在接收报文时-根据标识符的值-决定软件是否需要该报文;如果需要,就拷贝到SRAM里;如果不需要,报文就被丢弃且无需软件的干预。

为满足这一需求,bxCAN为应用程序提供了28个位宽可变的、可配置的过滤器组(27~0),其他bxCAN设备提供14个位宽可变的、可配置的过滤器组(13~0)(例如stm32f103),以便只接收那些软件需要的报文。硬件过滤节省了由软件过滤而占用的CPU开销。每个过滤器组x由2个32位寄存器,CAN_FxR0和CAN_FxR1组成。

可伸缩位宽 为了优化使得滤波器适应应用的需要,每个滤波器能够被独立的伸缩配置。根据不同的

12

滤波比例滤波器可以提供:

? 1个32位的滤波器,包含基本ID[10:0],扩展ID[17:0],IDE位和RTR位。 ? 2个16位的滤波器,包含基本ID[10:0],RTR,IDE和扩展ID[17:15]。

此外,滤波器可以设置成位屏蔽模式或标识符列表模式。

位屏蔽模式 在位屏蔽模式下,标识符寄存器与掩码寄存器中指定位存在关联,那就是接收消息的标识符在掩码寄存器中指定的位与标识符寄存器的相应位“相同”或者“不关心”。

标识符列表模式 在标识符模式下,掩码寄存器被作为标识符寄存器,因此,不是一个标识符寄存器和一个掩码寄存器,而是两个标识符寄存器。传入的标识符的所有位都必须与滤波寄存器匹配。

滤波器位宽和模式设置 通过相应的CAN_FMR寄存器配置滤波器,为了配置滤波器,必须先通过清除CAN_FAR寄存器中的FACT位来关闭滤波器。通过相应的CAN_FS1R寄存器中的FSCx来配置滤波器位宽。通过设置相应CAN_FM0R寄存器的FBMx位,可以配置过滤器组为标识符列表模式或屏蔽位模式。

为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式。 为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。 应用程序不用的过滤器组,应该保持在禁用状态。

13