在互联型产品中, CAN1和CAN2分享28个过滤器组位宽设置
其它STM32F103xx系列产品中有14个过滤器组
文章图片
四种配置方式:扩展标识符必须选择32位宽
1个32位的屏蔽位模式
2个32位的标识符列表模式,可以过滤2个标识符id
2个16位的屏蔽位模式
4个16位的标识符列表模式,可以过滤4个标准标识符id
标识符列表模式
在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此,不是采用一个标识符加一
个屏蔽位的方式,而是使用2个标识符寄存器。接收报文标识符的每一位都必须跟过滤器标识符
相同
CAN_FilterInitStructure.CAN_FilterNumber = 0;
//过滤器组0(FM1R)
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
//第一个标识符id(FR1)- 标准标识符举例
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x123 << 5;
//根据位宽设置图
CAN_FilterInitStructure.CAN_FilterIdLow = CAN_ID_STD;
//选择标准标识符
//第二个标识符id(FR2)- 扩展标识符举例
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x321 << 3 | CAN_ID_EXT;
//根据位宽设置图 | 选择扩展标识符
发送方标识符id必须是0x123或0x321
屏蔽位模式
屏蔽位模式可以过滤出一组标识符
//标准标识符举例
CAN_FilterInitStructure.CAN_FilterNumber = 0;
//过滤器组0(FM1R)
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x123 << 5;
CAN_FilterInitStructure.CAN_FilterIdLow = CAN_ID_STD;
//选择标准标识符
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x23 << 5;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0;
CAN_FilterIdx:期望的标识符id
CAN_FilterMaskIdx:屏蔽位。关心的位
期望的标识符id:
文章图片
关心的位:
只关心为1的位,必须和期望的标识符id位一致。其他位是多少不关心
文章图片
优先级规则
【stm32 CAN过滤器组】位宽为32位的过滤器,优先级高于位宽为16位的过滤器
对于位宽相同的过滤器,标识符列表模式的优先级高于屏蔽位模式
位宽和模式都相同的过滤器,优先级由过滤器号决定,过滤器号小的优先级高
推荐阅读
- stm32|基于STM32和freeRTOS智能门锁设计方案
- 日常分享|共享充电宝方案原理,具体部件组成以及主控MUC参数
- #|ARM裸机开发(汇编LED灯实验(I.MX6UL芯片))
- STM32|STM32的四种IO输出模式
- STM32 远程升级(ISP / IAP)
- stm32|stm32f103can总线过滤器配置
- STM32CubeMX配置SDIO模式(非DMA方式)
- STM32|如何建一个STM32F030标准库工程模板
- STM32 时钟RCC相关配置参考stm32f10x_rcc.h
- STM32 NVIC