STM32学习笔记:CAN总线的过滤器

发布者:清新天空最新更新时间:2017-09-27 来源: eefocus关键字:STM32  CAN总线  过滤器 手机看文章 扫描二维码
随时随地手机看文章

STM32 CAN控制器,提供了28个可配置的筛选器组(F1仅互联型才有28个,其他的只有14个), 
STM32 CAN控制器每个筛选器组由2个32位寄存器组成(CAN_FxR1和CAN_FxR2,x=0~27)。根据位宽不同,每个筛选器组可提供: 
● 1个32位筛选器,包括:STDID[10:0]、EXTID[17:0]、IDE和RTR位 
● 2个16位筛选器,包括:STDID[10:0]、IDE、RTR和EXTID[17:15]位 
对于过滤器组, 可以将其配置成屏蔽位模式, 这样 CAN_FxR0中保存的就是标识符匹配值, 
CAN_FxR1中保存的是屏蔽码,即 CAN_FxR1中如果某一位为1,则 CAN_FxR0中相应 
的位必须与收到的帧的标志符中的相应位吻合才能通过过滤器; CAN_FxR1中为0的位表 
示 CAN_FxR0中的相应位可不必与收到的帧进行匹配。 过滤器组还可以被配置成标识符列 
表模式,此时 CAN_FxR0和 CAN_FxR1中的都是要匹配的标识符,收到的帧的标识符必 
须与其中的一个吻合才能通过过滤。 
这里写图片描述 
注意:CAN_FilterIdHigh 是指高16位 CAN_FilterIdLow 是低16位应该将需要得到的帧 
的和过滤器的设置值左对齐起。 
一般我们用的都是普通型的,所以在本文中可以说 STM32有14组过滤器组。 
根据配置,每1组过滤器组可以有1个,2个或4个过滤器。 
这些过滤器相当于关卡,每当收到一条报文时,CAN 要先将收到的报文从这些过滤器上” 
过”一下,能通过的报文是有效报文,收进 FIFO,不能通过的是无效报文(不是发给”我” 
的报文),直接丢弃。 
所有的过滤器是并联的,即一个报文只要通过了一个过滤器,就是算是有效的。 
每组过滤器组有两种工作模式:标识符列表模式和标识符屏蔽位模式。 
在标识符列表模式下,收到报文的标识符必须与过滤器的值完全相等才能通过。 
在标识符屏蔽位模式下,可以指定标识符的哪些位为何值时就算通过。这其实就是限定了 
处于某一范围的标识符能够通过。 
在一组过滤器中,整组的过滤器都使用同一种工作模式。 
另外,每组过滤器中的过滤器宽度是可变的,可以是32位或16位。 
按工作模式和宽度,一个过滤器组可以变成以下几中形式之一: 
(1) 1个32位的屏蔽位模式的过滤器。 
(2) 2个32位的列表模式的过滤器。 
(3) 2个16位的屏蔽位模式的过滤器。 
(4) 4个16位的列表模式的过滤器。 
所有的过滤器是并联的,即一个报文只要通过了一个过滤器,就是算是有效的。 
每组过滤器组有两个32位的寄存器用于存储过滤用的”标准值”,分别是 FxR1,FxR2。 
在32位的屏蔽位模式下: 
有1个过滤器。 
FxR2用于指定需要关心哪些位,FxR1用于指定这些位的标准值。 
在32位的列表模式下: 
有两个过滤器。 
FxR1指定过滤器0的标准值,收到报文的标识符只有跟 FxR1完全相同时,才算通过。 
FxR2指定过滤器1的标准值。 
在16位的屏蔽位模式下: 
有2个过滤器。 
FxR1配置过滤器0,其中,[31-16]位指定要关心的位,[15-0]位指定这些位的标准值。 
FxR2配置过滤器1,其中,[31-16]位指定要关心的位,[15-0]位指定这些位的标准值。 
在16位的列表模式下: 
有4个过滤器。 
FxR1的[15-0]位配置过滤器0,FxR1的[31-16]位配置过滤器1。 
FxR2的[15-0]位配置过滤器2,FxR2的[31-16]位配置过滤器3。 
STM32的 CAN 有两个 FIFO,分别是 FIFO0和 FIFO1。为了便于区分,下面 FIFO0写作 
FIFO_0,FIFO1写作 FIFO_1。 
每组过滤器组必须关联且只能关联一个 FIFO。复位默认都关联到 FIFO_0。 
所谓“关联”是指假如收到的报文从某个过滤器通过了,那么该报文会被存到该过滤器相连 
的 FIFO。 
从另一方面来说,每个 FIFO 都关联了一串的过滤器组,两个 FIFO 刚好瓜分了所有的过 
滤器组。 
每当收到一个报文,CAN 就将这个报文先与 FIFO_0关联的过滤器比较,如果被匹配,就 
将此报文放入 FIFO_0中。 
如果不匹配, 再将报文与 FIFO_1关联的过滤器比较, 如果被匹配, 该报文就放入 FIFO_1 
中。 
如果还是不匹配,此报文就被丢弃。 
每个 FIFO 的所有过滤器都是并联的,只要通过了其中任何一个过滤器,该报文就有效。 
如果一个报文既符合 FIFO_0的规定,又符合 FIFO_1的规定,显然,根据操作顺序,它 
只会放到 FIFO_0中。 
每个 FIFO 中只有激活了的过滤器才起作用,换句话说,如果一个 FIFO 有20个过滤器, 
但是只激话了5个,那么比较报文时,只拿这5个过滤器作比较。 
一般要用到某个过滤器时,在初始化阶段就直接将它激活。 
需要注意的是,每个 FIFO 必须至少激活一个过滤器,它才有可能收到报文。如果一个过 
滤器都没有激活,那么是所有报文都报废的。 
一般的,如果不想用复杂的过滤功能, FIFO 可以只激活一组过滤器组,且将它设置成 32 
位的屏蔽位模式,两个标准值寄存器(FxR1,FxR2)都设置成0。这样所有报文均能通过。 
(STM32提供的例程里就是这么做的! ) 
STM32 CAN 中,另一个较难理解的就是过滤器编号。 
过滤器编号用于加速 CPU 对收到报文的处理。 
收到一个有效报文时, CAN 会将收到的报文 以及它所通过的过滤器编号, 一起存入接 
收邮箱中。CPU 在处理时,可以根据过滤器编号,快速的知道该报文的用途,从而作出相 
应处理。 
不用过滤器编号其实也是可以的, 这时候 CPU 就要分析所收报文的标识符, 从而知道报 
文的用途。 
由于标识符所含的信息较多,处理起来就慢一点了。 
STM32使用以下规则对过滤器编号: 
(1) FIFO_0和 FIFO_1的过滤器分别独立编号,均从0开始按顺序编号。 
(2) 所有关联同一个 FIFO 的过滤器,不管有没有被激活,均统一进行编号。 
(3) 编号从0开始,按过滤器组的编号从小到大,按顺序排列。 
(4) 在同一过滤器组内,按寄存器从小到大编号。FxR1配置的过滤器编号小,FxR2配置 
的过滤器编号大。 
(5) 同一个寄存器内,按位序从小到大编号。[15-0]位配置的过滤器编号小,[31-16]位 
配置的过滤器编号大。 
(6) 过滤器编号是弹性的。 当更改了设置时,每个过滤器的编号都会改变。 
但是在设置不变的情况下,各个过滤器的编号是相对稳定的。 
这样,每个过滤器在自己在 FIFO 中都有编号。 
在 FIFO_0中,编号从0 – (M-1), 其中 M 为它的过滤器总数。 
在 FIFO_1中,编号从0 – (N-1),,其中 N 为它的过滤器总数。 
一个 FIFO 如果有很多的过滤器,,可能会有一条报文, 在几个过滤器上均能通过,这时 
候,,这条报文算是从哪儿过来的呢? 
STM32在使用过滤器时,按以下顺序进行过滤: 
(1) 位宽为32位的过滤器,优先级高于位宽为16位的过滤器。 
(2) 对于位宽相同的过滤器,标识符列表模式的优先级高于屏蔽位模式。 
(3) 位宽和模式都相同的过滤器,优先级由过滤器号决定,过滤器号小的优先级高。 
按这样的顺序,报文能通过的第一个过滤器,就是该报文的过滤器编号,被存入接收邮箱 
中。

关键字:STM32  CAN总线  过滤器 引用地址:STM32学习笔记:CAN总线的过滤器

上一篇:读写STM32内部flash读写代码
下一篇:STM32学习笔记:gps两种解码的方式

推荐阅读最新更新时间:2024-03-16 15:38

STM32-GPRS模块连接系统主站
一、GPRS基础讲解(GSM/CDMA/GPRS介绍) 1、通信专业术语 BSS--基站子系统,通过无线接口与移动台直接联系,负责在一定区域内和移动台通信。(GSM) BTS--基站收发台,可以看作一复杂的无线调制器,BSS的主要部分,每个分配有若干信道。(GSM) RBS--Radio Base Station,无线基站:RBS是基站内所有设备的总称,在GSM规范中对应的主要部分是BTS,它由BSC来控制,用来提供移动台与系统的无线接口,它是CME20系统中的无线设备部分,主要由无线收发信机构成。 BSC--基站控制器,其功能是作为无线电设备与MSC的控制和通信的接口,直接控制BTS。(GSM) GPRS--Ge
[单片机]
STM32-GPRS模块连接系统主站
STM32 DAC详解
上一篇介绍了《 STM32ADC详解 》,既然有模拟转数字的ADC模块,那么就必然有数字转模拟的DAC模块。顾名思义,该模块仅具有ADC的补充功能。它将数字二进制值转换为模拟电压输出。DAC模块具有多种用途,包括音频生成,波形生成等。通常在大多数8位微控制器中,此模块不可用,并且通过脉宽调制(PWM)可以稍微满足其需求。部分原因是由于它们的硬件资源和运行速度相对较低。所有STM32单片机都具有PWM模块,但大容量STM32也具有DAC模块。STM32DAC模块不是很复杂,并且在工作原理方面与ADC模块相似。 01、DAC简介 从STM32F207数据手册看到,STM32F207具有两个DAC模块。 每个DAC具有独立的通道
[单片机]
<font color='red'>STM32</font> DAC详解
STM32 (零)--------STM32介绍
什么是 STM32 STM32,从字面上来理解,ST 是意法半导体,M 是Microelectronics 的缩写,32 表示32 位,合起来理解,STM32 就是指 ST 公司开发的 32 位微控制器。STM32 是以32位为一个单位,同时能处理32位。比如51单片机就是一个同时处理8位的单片机。STM32中外设以4个位确定一个引脚功能。 在如今的 32 位控制器当中,STM32 可以说是最璀璨的新星,大受工程师和市场的青睐,无芯能出其右。 CMSIS构架 时钟 51单片机所有的时间基准都是以唯一的晶振为主。STM32每个引脚使用都需要开启相应的时钟功能。 以控制外设时钟的APB2 外设时钟使能寄存器(RCC_APB
[单片机]
<font color='red'>STM32</font> (零)--------<font color='red'>STM32</font>介绍
STM32跳至硬件错误中断(HardFault_Handle)
1、遇到错误问题是数据类型不对,导致该步骤永远不能执行到,跳至硬件错误中断;所以硬件中断可尝试查找数据类型错误。 2、堆栈设置错误也会跳至hardwarefault; 3、如果上电后, 在调试时, 执行单步, 会在不确定位置的地方产生HardFault_Handle, 检查一下你的时钟配置(外部晶振频率, SysTemInit/PLLConfig相关函数以及晶振频率宏定义), 可能是超频了...导致了STM32不稳定. 4、如果在使用某些参数时,使用的类型与其定义的类型不同,也可能导致出现跳转hardfault,这种情况下, 一般是不固定的跳转hardfalt,排查问题较麻烦; 5、如果你使用片上flash做参数存储,那么你
[单片机]
STM32串口接收数据卡死问题解决办法
在使用STM32串口时,有时候串口接受一段时间数据之后便会卡死不在进入中断接收数据。原因是串口中断标志没有清除,导致终端锁死,此时需要判断对应的标志位,重新启动中断。 if((huart1.Instance- CR1 & 0x20)==0) { HAL_UART_Receive_IT(&huart1,bsp_uart1.rx_tmp,1); }
[单片机]
基于AVR单片机的船舶气象仪测试系统的设计与实现
船舶气象仪是船舶导航系统设备之一,可测量船舶所在位置海区的风速、风向、温度、湿度、气压等多项气象要素,可向船舶的导航系统传送实时的气象参数。船舶气象仪一旦出现故障,将会影响船舶操作人员对各种气象要素的估计和判断,甚至导致航行船舶失控、搁浅、触礁、倾覆等严重事故。为了保障船舶气象仪能够时刻处于良好的状态,需要先进的测试技术和便携式的测试设备对船舶气象仪的运行情况进行检测。但是,目前市面上还没有出现一套完整的测试系统来完成对现有船舶气象仪的检测任务,以满足船舶操作人员的使用和保障需求。针对目前船舶上普遍使用的气象仪器专门设计的船舶气象仪测试系统,能够很好地完成船舶气象仪的故障测试任务,缩短船舶气象仪的测试诊断时间,满足船舶气象仪的
[单片机]
基于AVR单片机的船舶气象仪测试系统的设计与实现
意法半导体推出最新升级的STM32G4系列微控制器
意法半导体今天宣布推出STM32G491和STM32G4A1微控制器。 STM32G4 Access Line的新成员提供了更大的存储容量,具有112 KB的RAM和高达512 KB的闪存,对比此前Access Line的旗舰产品STM32G431——32 KB的RAM和128 KB的闪存。此外,STM32G491和STM32G4A1之间的唯一区别是后者上存在加密核心。Cortex-M4内核运行频率为170 MHz,它们将STM32G4系列推向新的具有成本效益的应用,同时又不影响性能。以前可能需要带有外部模拟组件的STM32G0,现在可以被新的STM32G4中受益。因此,通过发布STM32G491和STM32G4A1,意法半导体为
[单片机]
意法半导体推出最新升级的STM32G4系列微控制器
STM32-Keil软件仿真和硬件仿真/在线仿真
软件仿真和硬件仿真什么区别?软件仿真就是没有硬件参与的仿真,完全是模拟实现的。硬件仿真是将程序下载到控制芯片的FLASH或RAM中,直接在硬件上实现仿真。【有什么问题欢迎联系讨论,一起解决问题】 仿真这种东西,因为涉及到信任问题,用的好觉得好用,用不好可能会徒增麻烦——“还不如直接在硬件上调试靠谱”。但是总体上,仿真还是比较有用的,比如在排查软件问题(寄存器配置等)的时候,使用软件仿真是非常靠谱的。而如果涉及到硬件的问题(比如你的板子代码需要读取外部信号,或者输出信号等),可能需要用到硬件仿真,或者说在线仿真。关于仿真,网上的资料说的还是挺全的,这里只做总结。 一、软件仿真 1.1 仿真配置 首先确定仿真的硬件环境。点击魔
[单片机]
STM32-Keil软件仿真和硬件仿真/在线仿真
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved