STM32F103RBT6的CAN中共有14个位宽可变(可配置)的标识符滤波器组,软件通过对它们编程,从而在CAN
收到的报文中选择它需要的报文,而把其它报文丢弃掉。
图2-27
滤波器组位宽设置-寄存器组织框图
在标识符屏蔽模式下,过滤器组x的第1个标识符寄存器(CAN_FxR1)用来保存用于与报文ID比较的完整标识符。第2个标识符寄存器(CAN_FxR2)则用来表示屏蔽位,即表明报文ID
要与第1个标识符寄存器中的哪几位比较,值为1的寄存器位就是屏蔽位(参与比较,位必须匹配才能通过滤波器),值为0的寄存器位不参与比较。
本文的基于STM32的CAN总线学习板程序中运用的是“标识符屏蔽”模式,下面针对此模式做详细解读和举例。
从滤波器的寄存器映像中可知:无论用作哪个模式,标识符寄存器的第0位保留,第1位为报文的RTR位,第2位是报文的IDE位,报文的扩展ID保存在第3
~ 20
位(共18位),报文的标准ID保存在第21 ~
32 位(共11位)。使用时,由开发者根据需要填写相应的设置。
举例1:设置滤波器,采用1个32位滤波器的“标识符屏蔽”模式,将CAN
ID设置为“0x028A”,接收标准帧、数据帧。
解答:详见表2-37所示。
标识符寄存器CAN_FxR1设置:
第0位保留,置位0;第1位为报文的RTR位置0(数据帧);第2位是报文的IDE位置0(