您的位置 首页 传感器

关于STM32的CAN的过滤器

STM32普通型芯片的CAN有14组过滤器组,互联型有28组过滤器组一般我们用的都是普通型的,所以在本文中可以说STM32有14组过滤器组根据配置,每

STM32普通型芯片的CAN有14组过滤器组,互联型有28组过滤器组.
一般咱们用的都是普通型的,所以在本文中能够说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 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) 位宽和方式都相同的过滤器,优先级由过滤器号决议,过滤器号小的优先级高

按这样的次序,报文能经过的第一个过滤器,便是该报文的过滤器编号,被存入接纳邮箱中.

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/258409.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部