本PDF文档深入剖析了STM32微控制器中的CAN(Controller Area Network)过滤器功能,包括其配置方法、使用技巧及优化策略,适用于嵌入式系统开发人员。
STM32的CAN(Controller Area Network)过滤器是其通信模块的重要组成部分,负责筛选接收到的数据帧,确保只有目标设备所需的消息被接收并存储在FIFO(First In First Out,先进先出队列)中。STM32的CAN控制器通常提供14组过滤器,在某些互联型芯片中则扩展到了28组。每组过滤器可以是1个、2个或4个,并联工作,只要报文通过任意一个过滤器,就会被视为有效并进入相应的FIFO。
过滤器的工作模式主要有两种:标识符列表模式和屏蔽位模式。在标识符列表模式下,接收到的报文标识符必须与过滤器设定的完全一致才能通过;而在屏蔽位模式下,则可以通过设置特定位来定义一个范围内的所有可能值都能被接受。
每组过滤器具有可变宽度,可以是32位或16位,并且根据工作模式和宽度,可以配置为以下四种形式:
1. 采用单一的32位屏蔽位模式。
2. 使用两个32位列表模式过滤器。
3. 利用两个16位屏蔽位模式过滤器。
4. 运行四个16位列表模式过滤器。
每个过滤器组使用相同的配置,这些设置存储在FxR1和FxR2寄存器中。具体如下:
- 在32位屏蔽位模式下,FxR2定义关心的位,而FxR1则设定标准值。
- 对于两个32位列表模式下的过滤器,则分别用FxR1和FxR2来设置它们的标准值。
- 采用两个16位屏蔽位模式时,FxR1与FxR2各自的高位和低位定义了关心的位及其对应的标准值。
- 在四个16位列表模式下,同样的寄存器配置高低两部分以分别设定每个过滤器。
STM32的CAN有两个FIFO队列:FIFO_0 和 FIFO_1。每个过滤器组必须与其中一个关联,并且只能关联一个。报文首先会在FIFO_0的相关过滤器中进行匹配;如果未能通过,则会尝试在FIFO_1中的过滤器上执行同样的过程,若仍然无法匹配则该报文将被丢弃。
当报文成功经过筛选后,其编号会被记录下来并存入接收邮箱。这使得CPU可以根据这个编号迅速找到报文的用途,提高处理效率;如果未使用过滤器编号,则需要解析每个接收到的数据包来确定它的目的,从而可能增加处理时间。
在初始化阶段时可以基于需求激活和配置相应的过滤规则,而没有被启用的过滤器不会参与筛选过程。为了保证FIFO能够正常接收数据,至少要有一个已激活的过滤器与之关联;如果不需要复杂的过滤功能,则可以选择仅使用一组32位屏蔽模式,并将标准值寄存器设为0以允许所有报文通过。