STM32F4 CAN 接收筛选器、标识符配置
STM32F4 CAN接收
发送器将消息广播给所有接收器。接收器节点根据标识符的值来确定软件是否需要该消息。如果不需要,必须在无软件干预的情况下丢弃该消息。
标准标识符:11位
扩展标识符:18位
有2个CAN:CAN1、CAN2。
CAN1和CAN2共享512字节SRAM存储器。
有2个FIFO:FIFO0、FIFO1。
每个FIFO提供3个邮箱。
有28个可配置的筛选器组,有的器件提供14个筛选器组。
CAN1和CAN2共享28个或14个筛选器组,可以配置CAN2的起始筛选器编号。
每个筛选器组包含2个32位寄存器(共64位)。
32位寄存器可配置不同的尺度:双16位、32位。
每个筛选器可配置不同的模式:标识符屏蔽模式(掩码模式)、标识符列表模式。
根据每个筛选器组的尺度和模式配置,1个筛选器组中可能包含1、2、4个筛选器,筛选器按从小到大的顺序编号。
如上图,当筛选器32位寄存器尺度配置为双16位,模式配置为标识符列表模式时,1个筛选器组的2个32位寄存器将作为4个16位筛选器使用。筛选器编号分别为n,n+1,n+2,n+3。
每个筛选器组可分配到FIFO0或FIFO1。
筛选器的配置很灵活,上图是其中一个例子。
上图中,筛选器组共有14个。
筛选器编号:FIFO0和FIFO1分开排序。
每个筛选器组可以选择不同的FIFO,可以配置不同的尺度和模式。
筛选器组0:分配到FIFO0,标识符列表模式,32位尺度。FIFO0筛选器编号0为一个32位的标识符,FIFO0筛选器编号1为另一个32位标识符。
筛选器组1:分配到FIFO0,标识符掩码模式,32位尺度。FIFO0筛选器编号2包括1个32位的标识符和1个32位的掩码。
筛选器组2:分配到FIFO1,标识符掩码模式,16位尺度。FIFO1筛选器编号0包括1个16位标识符和1个16位掩码。FIFO1筛选器编号1包括1个16位标识符和1个16位掩码。
以此类推。
CAN接收寄存器配置时需要注意1个容易出错的地方,如果配置错了,CAN将无法接收数据。
筛选器组i寄存器x:CAN_FiRx
假设是
16位筛选器
D15 |
D14 |
D13 |
D12 |
D11 |
D10 |
D9 |
D8 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
STDID[10:0] |
RTR |
IDE |
EXTID[17:15] |
标准标识符是从第5位开始,所以如果标准标识符为0x12,则需要设置的是0x12<<5。