文章目录
简介
STM32
的CAN
控制器可以对接收到的数据报文进行过滤。
- 只接收指定
CAN ID
的数据。 - 对于其他
CAN ID
发送过来的数据,则不再触发CAN
中断。
根据芯片的不同,可以有不同数量的CAN
控制器:
- 如果
STM32
只有一个CAN
控制器,则可以配置14
个过滤器组,对应的编号为0 ~ 13
。 - 如果
STM32
拥有两个CAN
控制器,则可以配置28
个过滤器组:
- 对于
CAN 1
,对应的过滤器组编号为0 ~ 13
。 - 对于
CAN 2
,对应的过滤器组编号为14 ~ 27
。
CAN
过滤有如下模式:
屏蔽位模式
标识符列表模式
相关寄存器
和CAN
过滤相关的寄存器为CAN_FxR1
和CAN_FxR2
:
如果只想接收CAN ID
为0x317
的标准帧,则设置方法如下:
0110 0010 111
:0x317
对应的二进制位。1111 1111 111
:收到的数据帧中相应的ID位
必须和设置的ID位
一样。00
和11
:只接收标准帧,不接收扩展帧。
如果想接收CAN ID
为0x310
至0x317
的标准帧,则设置方法如下:
代码实例
只过滤一个CAN ID
如果需要让CAN 2
只接收CAN ID
为0x713
的报文,则代码如下:
CAN_FilterInitTypeDef CAN_FilterInitStructure;
CAN_FilterInitStructure.CAN_FilterNumber = 14;
CAN_FilterInitStructu