(参考博客:http://blog.youkuaiyun.com/flydream0/article/details/8148791)
1.CAN报文标识符:并不代表节点的地址 而是和报文的内容有关 发送者以广播的形式发送消息 节点在接收报文时根据标识符(CAN ID)决定是否需要该报文
如果需要则拷贝到SRAM中 不需要则丢弃实现硬件过滤 节省CPU开销
2.过滤器组 Filterx x为过滤器号
STM32总共提供14个过滤器组来处理CAN接收过滤问题,每个过滤器组包含两个32位寄存器CAN_FxR0和CAN_FxR1组成
3.过滤器的过滤模式 通过CAN_FilterMode设置
a.屏蔽位模式IdMask:为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式。 在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”或“不用关心”处理。如需要出生年月需要找出1995的则出生年月中年份的四位必须匹配 月和日则不用关心
b.标识符列表模式IdList:为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此,不是采用一个标识符加一个屏蔽位的方式,而是使用2个标识符寄存器。接收报文标识符的每一位都必须跟过滤器标识符相同。
4.过滤器的位宽 通过CAN_FilterScale设置
每个过滤器组的位宽都可以独立配置,以满足应用程序的不同需求。根据位宽的不同,每个过滤器组可提供:
●1个32位过滤器CAN_FilterScale_32bit,包括:STDID[10:0]、EXTID[17:0]、IDE和RTR位
●2个16位过滤器CAN_FilterScale_16bit,包括:STDID[10:0]、IDE、RTR和EXTID[17:15]位
5.过滤器组的过滤模式和位宽设置 通过相应的CAN_FMR寄存器(CAN过滤器主控寄存器)配置