STM8CAN过滤器理解

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM8CAN标识符过滤器理解

STM8的CAN有6个过滤器组:

根据配置,每1组过滤器组可以有1个,2个或4个过滤器.

这些过滤器相当于关卡,每当收到一条报文时,CAN要先将收到的报文

从这些过滤器上"过滤"一下,能通过的报文是有效报文,收进FIFO中,

不能通过的是无效报文(不是发给"我"的报文),直接丢弃.

所有的过滤器是并联的,即,一个报文只要通过了一个过滤器,就是算是

有效的.

每组过滤器组有两种工作模式:标识符列表模式,标识符屏蔽位模式.

在标识符列表模式下,收到报文的标识符必须与过滤器的值完全相等,才能通过.

在标识符屏蔽位模式下,可以指定标识符的哪些位为何值时,才能通过.

这其实就是限定了处于某一范围的标识符能够通过.

在一组过滤器中,整组的过滤器都使用同一种工作模式.

另外,每组过滤器中的过滤器宽度是可变的,可以是32、16、8位

由工作模式和宽度,一个过滤器组可以变成以下几中形式之一:

(1)1个32位的屏蔽位模式的过滤器。2个32位的列表模式的过滤器。

(2)2个16位的屏蔽位模式的过滤器。4个16位的列表模式的过滤器。

2个16位的列表模式过滤器和1个屏蔽位模式过滤器。

(3)1个16位的屏蔽位模式的过滤器和2个8位屏蔽位模式的过滤器。

2个16位的列表模式的过滤器和2个8位的屏蔽位模式的过滤器。

1个16位的屏蔽位模式的过滤器和4个8位的列表模式的过滤器。

2个16位的列表模式过滤器和4个8位的列表模式的过滤器。(4)4个8位的屏蔽位模式的过滤器。

4个8位列表模式的过滤器和2个8位的屏蔽位模式的过滤器。

8个8位的列表模式的过滤器。

所有的过滤器是并联的,即,一个报文只要通过了一个过滤器,就是算是有效的.

每组过滤器组有8个8位的寄存器用于存储过滤用的"标准值",分别是CAN_FxRi[i(1...8),x(0...8)]

在32位的屏蔽位模式下:

有1个过滤器,

FxR[5...8]用于指定需要关心哪些位,FxR[1...4]用于指定这些位的标准值

在32位的列表模式下:

有两个过滤器.

FxR[1...4]指定过滤器0的标准值,收到报文的标识符只有跟

FxR[1...4]完全相同时,才算通过.

FxR[5...8]指定过滤器1的标准值.

在16位的屏蔽位模式下:

有2个过滤器.

FxR[1...4]配置过滤器0,其中,[31-16]位指定要关心的位,[15-0]位指定这些位的标准值.

FxR[5...8]配置过滤器1,其中,[31-16]位指定要关心的位,[15-0]位指定这些位的标准值.

在16位的列表模式下:

有4个过滤器.

FxR[1...2]配置过滤器0,FxR[3...4]配置过滤器1

FxR[5...6]配置过滤器2,FxR[7...8]配置过滤器3.

其他模式类似这里我就不一一举例了。

STM8的CAN有1个FIFO,每组过滤器组必须关联这一个FIFO.且复位默认就关联到FIFO.

所谓"关联",是指假如收到的报文从某个过滤器通过了,那么该报文会被存到该过滤器相连的FIFO.

每当收到一个报文,CAN就将这个报文先与FIFO关联的过滤器比较,如

果被匹配,就将此报文放入FIFO中.如果还是不匹配,此报文就被丢弃.

FIFO的所有过滤器都是并联的,只要通过了其中任何一个过滤器,该报文就有效

每个FIFO中只有激活了的过滤器才起作用,换句话说,如果一个FIFO有8个过滤器,但是只激话了3个,

那么比较报文时,只拿这3个过滤器作比较.

一般要用到某个过滤器时,在初始化阶段就直接将它激活.

需要注意的是,FIFO必须至少激活一个过滤器,它才有可能收到报文.如果一个过滤器都没有激活,那么是所有报文都报废的.

一般的,如果不想用复杂的过滤功能,FIFO可以只激活一组过滤器组,且将它设置成32位的屏蔽位模式,

两个标准值寄存器(FxR[1..4],FxR[5..8])都设置成0.这样所有报文均能通过.

STM8CAN中,另一个较难理解的就是过滤器编号.

过滤器编号用于加速CPU对收到报文的处理.

收到一个有效报文时,CAN会将收到的报文,以及它所通过的过滤器编号,一起存入接收邮箱中,

CPU在处理时,可以根据过滤器编号,快速的知道该报文的用途,从而作出处理.

不用过滤器编号其实也是可以的,这时候CPU就要分析所收报文的标

识符,从而知道报文的用途.

由于标识符所含的信息较多,处理起来就慢一点了.

STM8使用以下规则对过滤器编号:

(1)FIFO的过滤器分别独立编号,均从0开始按顺序编号.

(2)所有关联同一个FIFO的过滤器,不管有没有被激活,均统一进行编号.

(3)编号从0开始,按过滤器组的编号从小到大,按顺序排列.

(4)在同一过滤器组内,按寄存器从小到大编号.FxR[1..4]配置的过滤器编号小,FxR[5..8]配置的过滤器编号大.

(6)过滤器编号是有弹性的.当更改了设置时,每个过滤器的编号都会改变.

但是在设置不变的情况下,各个过滤器的编号是相对稳定的.

这样,每个过滤器在自己在FIFO中都有编号.在FIFO_0中,编号从0--(N-1),其中N为它的过滤器总数.一个FIFO如果有很多的过滤器,可能会有一条报文,在几个过滤器上均能通过,这时候,这条报文算是从哪儿过来的呢?

STM8在使用过滤器时,按以下顺序进行过滤

(1)位宽为32位的过滤器,优先级高于位宽为16位的过滤器16位的高于8位

(2)对于位宽相同的过滤器,标识符列表模式的优先级高于屏蔽位模式

相关文档
最新文档