STM32 CAN的验收筛选器
简介
-
CAN外设的验收筛选器,一共有28个筛选器组,每个筛选器组有2个寄存器, CAN1和CAN2共用的筛选器的。
-
在 CAN 协议中,消息的标识符与节点地址无关,但与消息内容有关。因此,发送节点将报文广播给所有接收器时,接收节点会根据报文标识符的值来确定软件是否需要该消息,为了简化软件的工作, STM32的CAN外设接收报文前会先使用验收筛选器检查,只接收需要的报文到FIFO中。
-
筛选器工作的时候,可以调整筛选ID的长度及过滤模式。
-
根据筛选ID长度来分类有有以下两种:
- 检查 STDID[10:0]、 EXTID[17:0]、 IDE 和 RTR 位,一共31位。
- 检查STDID[10:0]、 RTR、 IDE 和 EXTID[17:15],一共16位。
-
而根据过滤的方法分为以下两种模式:
- 标识符列表模式,它把要接收报文的ID列成一个表,要求报文ID与列表中的某一个标识符完全相同才可以接收,可以理解为白名单管理。
- 掩码模式,它把可接收报文ID的某几位作为列表,这几位被称为掩码,可以把它理解成关键字搜索,只要掩码(关键字)相同,就符合要求,报文就会被保存到接收FIFO。
模式
- 每组筛选器包含2个32位的寄存器,分别为CAN_FxR1和CAN_FxR2,它们用来存储要筛选的ID或掩码,各个寄存器位代表的意义与图中两个寄存器下面“映射”的一栏一致,各个模式的说明如下:
模式 | 说明 |
---|---|
32位掩码模式 | CAN_FxR1存储ID, CAN_FxR2存储哪个位必须要与CAN_FxR1中的ID一致 , 2个寄存器表示1组掩码。 |
32位标识符模式 | CAN_FxR1和CAN_FxR2各存储1个ID, 2个寄存器表示2个筛选的ID |
16位掩码模式 | CAN_FxR1高16位存储ID, 低16位存储哪个位必须要与高16位的ID一致; CAN_FxR2高16位存储ID, 低16位存储哪个位必须要与高16位的ID一致 2个寄存器表示2组掩码。 |
16位标识符模式 | CAN_FxR1和CAN_FxR2各存储2个ID, 2个寄存器表示4个筛选的ID |
筛选器设置实例
ID | 1 | 0 | 1 | 1 | 1 | 0 | 1 | … |
---|---|---|---|---|---|---|---|---|
掩码 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | … |
筛选的ID | 1 | 0 | 1 | x | x | 0 | x | … |
-
如在掩码模式时,第一个寄存器存储要筛选的ID,第二个寄存器存储掩码,掩码为1的部分表示该位必须与ID中的内容一致,筛选的结果为表中第三行的ID值,它是一组包含多个的ID值,其中x表示该位可以为1可以为0。
-
如工作在标识符模式时, 2个寄存器存储的都是要筛选的ID,它只包含2个要筛选的ID值(32位模式时)。
-
如果使能了筛选器,且报文的ID与所有筛选器的配置都不匹配, CAN外设会丢弃该报文,不存入接收FIFO。