STM32 CAN 过滤器总结 在STM32 互联型产品中,CAN1 和CAN2 分享28 个过滤器组,其它STM32F103xx 系列产品中有14 个过滤器组,用以对接收到的帧进行过滤。 每组过滤器包括了 2 个可配置的32 位寄存器:CAN_FxR0 和CAN_FxR1。这些过滤器相当于关卡,每当收到一条报文时,CAN 要先将收到的报文从这些过滤器上"过"一下,能通过的报文是有效报文,收进相关联FIFO(FIFO1 或 FIFO2),不能通过的是无效报文(不是发给"我"的报文),直接丢弃。 (标准 CAN 的标志长度是 11 位。扩展格式 CAN 的标志长度是 29。CAN2.0A协议规定 CAN 控制器必须有一个11 位的标识符。CAN2.0B 协议中规定 CAN 控制器的标示符长度可以是 11 位或 29 位。STM32 同时支持 CAN2.0A/CAN2.0B 协议。) 每组过滤器组有两种工作模式:标识符列表模式和标识符屏蔽位模式。 标识符屏蔽位模式:可过滤出一组标识符。此时,这样 CAN_FxR0 中保存的就是标识符匹配值,CAN_FxR1 中保存的是屏蔽码,即 CAN_FxR1 中如果某一位为 1,则CAN_FxR0 中相应的位必须与收到的帧的标志符中的相应位吻合才能通过过滤器;CAN_FxR1 中为0 的位表示CAN_FxR0 中的相应位可不必与收到的帧进行匹配。 标识符列表模式:可过滤出一个标识。此时CAN_FxR0 和CAN_FxR1 中的都是要匹配的标识符,收到的帧的标识符必须与其中的一个吻合才能通过过滤。 注意:CAN_FilterIdHigh 是指高16 位CAN_FilterIdLow 是低16 位应该将需要得到的帧的和过滤器的设置值左对齐起。 所有的过滤器是并联的,即一个报文只要通过了一个过滤器,就是算是有效的。 按工作模式和宽度,一个过滤器组可以变成以下几中形式之一: (1) 1 个32 位的屏蔽位模式的过滤器。 (2) 2 个32 位的列表模式的过滤器。 (3) 2 个16 位的屏蔽位模式的过滤器。 (4) 4 个16 位的列表模式的过滤器。 每组过滤器组有两个32 位的寄存器用于存储过滤用的"标准值",分别是FxR1,FxR2。 在32 位的屏蔽位模式下: 有1 个过滤器。 FxR2 用于指定需要关心哪些位,FxR1用于指定这些位的标准值。 在32 位的列表模式下: 有两个过滤器。 FxR1 指定过滤器0 的标准值FxR2 指定过滤器1 的标准值。 收到报文的标识符只有跟FxR1 与FxR1 其中的一个完全相同时,才算通过。 在16 位的屏蔽位模式下: 有2 个过滤器。 FxR1 配置过滤器0,其中,[31-16]位指定要关心的位,[15-0]位...