STM32 CAN的验收筛选器

时间:2024-04-16 09:12:42

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。