STM32,CAN总线过滤器的设置详细讲解

来源:互联网 发布:linux系统ls命令 编辑:程序博客网 时间:2024/06/13 00:21

屏蔽位模式:

  在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”和“不用关心”处理。

标识符列表模式:

  在标识符列表模式下,屏蔽寄存器也被当做标识符寄存器用。因此,不是采用一个标识符加一个屏蔽位的方式,而是采用两个标识符寄存器。接收报文的每一位都必须跟过滤器标识符相同。

STM32普通型芯片的 CAN 有14组过滤器组(互联型有28组过滤器组) ,用以对接收到的
帧进行过滤。每组过滤器包括了2个可配置的32位寄存器:CAN_FxR0和 CAN_FxR1。
对于过滤器组, 可以将其配置成屏蔽位模式, 这样 CAN_FxR0中保存的就是标识符匹配值,
CAN_FxR1中保存的是屏蔽码,即 CAN_FxR1中如果某一位为1,则 CAN_FxR0中相应
的位必须与收到的帧的标志符中的相应位吻合才能通过过滤器; CAN_FxR1中为0的位表
示 CAN_FxR0中的相应位可不必与收到的帧进行匹配。 过滤器组还可以被配置成标识符列
表模式,此时 CAN_FxR0和 CAN_FxR1中的都是要匹配的标识符,收到的帧的标识符必
须与其中的一个吻合才能通过过滤。

一般我们用的都是普通型的,所以在本文中可以说 STM32有14组过滤器组。
根据配置,每1组过滤器组可以有1个,2个或4个过滤器。
这些过滤器相当于关卡,每当收到一条报文时,CAN 要先将收到的报文从这些过滤器上”
过”一下,能通过的报文是有效报文,收进 FIFO,不能通过的是无效报文(不是发给”我”
的报文),直接丢弃。
所有的过滤器是并联的,即一个报文只要通过了一个过滤器,就是算是有效的。
每组过滤器组有两种工作模式:标识符列表模式和标识符屏蔽位模式。
每组过滤器组必须关联且只能关联一个 FIFO。复位默认都关联到 FIFO_0。
所谓“关联”是指假如收到的报文从某个过滤器通过了,那么该报文会被存到该过滤器相连
的 FIFO。
从另一方面来说,每个 FIFO 都关联了一串的过滤器组,两个 FIFO 刚好瓜分了所有的过
滤器组。

0 0
原创粉丝点击