在CAN通信系统中,如何高效接收和处理报文,是决定节点性能与响应速度的关键因素之一。尤其当总线挂载节点数量庞大、数据传输频繁时,若所有报文都需由CPU进行判断筛选,将带来巨大的系统负担,严重时甚至可能导致系统延迟或卡死。为缓解此问题,CAN控制器通常提供硬件滤波器功能,通过预设筛选机制,在接收到报文的第一时间就完成“要不要处理”的决策。
一、CAN滤波器工作原理与作用
CAN协议中,报文标识符(ID)并不代表节点地址,而是定义报文内容。所有CAN报文均通过广播方式在总线上发送,所有节点都能“看到”报文,但每个节点通过判断报文ID是否符合设定条件,来决定是否接收。
硬件滤波器的本质在于通过配置规则,让控制器只接收符合特定ID或ID范围的报文,其余直接丢弃。这样可显著减轻CPU负担,避免不必要的数据中断和处理。
二、STM CAN滤波器架构总览
STM8的beCAN模块提供6组可配置、位宽可变的滤波器(编号0-5),主要通过以下寄存器进行配置:
滤波模式寄存器:
CAN_FMR1 和 CAN_FMR2 —— 设置各个滤波器的工作模式(掩码模式/列表模式)。
滤波配置寄存器:
CAN_FCR1 ~ CAN_FCR3 —— 控制各个滤波器启用状态、位宽设置(16位/32位)。
滤波器组寄存器:
CAN_FiRx (i = 0 ~ 5,x = 1 ~ 8) —— 用于设置每组滤波器具体的ID、掩码值或标识符列表。
每个滤波器可设置为:
标识符列表模式(List Mode): 只接收完全匹