CAN作为总线通信协议,在总线上可能会有大量的数据包同时传输,适当的过滤机制可以提升数据处理的效率,节省处理器的资源。通过配置CAN过滤器定义自己的数据接收规则,只接收和处理符合规程的CAN数据帧,规则之外的数据直接丢弃,此过程外设自动处理,尽量减少软件对报文筛选的干预。
本文仅适用于采用CH32F2x、CH32V2x、CH32V3x微控制器系列的CAN设备过滤器说明,其他微处理器也可参考本文学习。
以CH32V307为例,最多支持28组过滤器配置,可选16位或32位过滤模式,支持两种方式过滤(屏蔽位或标识符列表)。
16位标识符列表表 16位列表模式
RTR:1远程帧,0数据帧
IDE:1扩展帧,0标准帧
STID:标准帧ID
EXID:扩展帧ID
在16位标识符列表模式下,寄存器组被拆分成四个寄存器,四个寄存器都用作标识符寄存器。
标准ID对应表(IDE=0)
扩展ID对应表(IDE=1)
将CAN_FxR1[15:0]、CAN_FxR1[31:16]、CAN_FxR2[15:0]、CAN_FxR2[31:16]分别配置为0xFFE0、0x0FF0、0x1009、0x101F。第一个寄存器代表仅接收ID为7FF的标准数据帧;第二个寄存器代表仅接收ID为7F的标准远程帧,第三个寄存器代表仅接收扩展ID的28位、15位为高并且ID第27位到第16位为低的扩展数据帧,第四个寄存器代表仅接收ID的28位、第17位到第15位为高并且第27位到第18位为低的扩展远程帧。
按上图配置CAN硬件过滤,仅可接收下述符合规则的CAN数据帧:
① ID为7FF的标准数据帧
② ID为7F的标准远程帧
③ ID为10008000到1000FFFF的扩展数据帧
④ ID为10038000到1003FFFF的扩展远程帧
16位屏蔽位模式表 16位屏蔽位模式
在16位模式下,寄存器组被拆分成四个寄存器,包含2组16位标识符寄存器和16位屏蔽寄存器。
ID对应关系与16位列表模式一致,只是高16位做MARK(掩码),低16位做标识符,掩码位为高时,代表接收CAN的帧对应ID应与标识符寄存器对应位一致(或帧格式一致),否则数据被过滤,反之不进行该位验证。
以下图为例:
(1)将CAN_FxR1[15:0]配置位0x0020,CAN_FxR1[31:16]配置为0x0038,标识符寄存器的IDE与RTR为低,Mark的IDE与RTR为高,代表仅接收标准数据帧。再看标识符寄存器的STID的第0位为高,Mark也为高,代表接收奇数ID,综合一下CAN_FxR1寄存器限制CAN仅接收ID为奇数标准数据帧。
(2)将CAN_FxR2[15:0]配置位0xFFFF,CAN_FxR2[31:16]配置为0XFFFF,标识符寄存器的IDE与RTR为高,Mark的IDE与RTR也为高,代表仅接收扩展远程帧。CAN_FxR2[15:5]与CAN_FxR2[2:0]都为高,代表ID从15位开始到28位全部为高,同时对应的Mark也为高,代表ID在0x1FFF8000-1FFFFFFF才会被接收。
【福利】蓝牙+Wi-Fi模块王炸福利!免费送样