STM32 CAN过滤器配置详解
创作时间:
作者:
@小白创作中心
STM32 CAN过滤器配置详解
引用
CSDN
1.
https://blog.csdn.net/m0_73636161/article/details/128123949
CAN过滤器基础知识
在使用STM32微控制器进行CAN总线通信时,过滤器是一个非常重要的概念。过滤器的主要作用是帮助接收器只接收感兴趣的CAN帧,而忽略其他无关的帧,从而提高系统的效率和可靠性。
过滤器的基本配置
STM32的bxCAN接收时必须使用过滤器接收。根据CAN外设数量的不同,过滤器的数量也会有所不同:
- 只有CAN1:CAN1有14个过滤器
- 有CAN1和CAN2:CAN1和CAN2共享28个过滤器
- 有CAN1~3:CAN1和CAN2共享28个过滤器,CAN3有独立的14个过滤器
过滤器可以过滤CAN总线上帧的ID号,可以不处理不想接收的ID号,只接收想要的ID号。
过滤模式
过滤器总长度为64位,可以分为2个32位单元或4个16位单元。主要有两种过滤模式:
- 掩码模式:由两个单元组成,通过掩码匹配。
- 列表模式:由一个单元组成,ID号完全匹配即通过。
ID号对齐最高位(MSB)。仅32位单元可以过滤扩展ID。在列表模式下,scale为32时,每个过滤器的列表只能写入两个报文ID;若scale为16时,每个过滤器的列表最多可写入4个CAN ID。
掩码模式详解
掩码模式通过按位与运算来实现过滤。例如:
- 匹配ID为0x200,掩码为0x000,则所有ID号都能通过
- 匹配ID为0x200,掩码为0x700,则ID为0x200~0x2FF均可通过
- 匹配ID为0x200,掩码为0x7FF,则只有0x200能通过
过滤器的工作模式包括:
- 32位宽的掩码模式,配置过滤2个不同的ID号
- 32位宽的列表模式,配置过滤4个不同的ID号
- 16位宽的列表模式,配置过滤2个不同的ID号
- 16位宽的掩码模式,配置过滤1个不同的ID号
过滤器的位宽包括16位和32位两种。
双接收中断
每个CAN有两个接收中断,对应两组接收邮箱(FIFO)。每个过滤器可以绑定一个CAN接收中断。经过过滤器过滤的帧会进入该过滤器绑定的接收中断对应的邮箱。匹配时,列表模式的优先级高于掩码模式,其次过滤器编号更小的优先级更高。
实验示例:使用CAN2过滤ID号
以STM32为例,展示如何配置CAN2过滤器:
- 列表模式配置
sFiterconfig.FilterActivation = CAN_FILTER_ENABLE;
sFiterconfig.FilterBank=14; // 过滤器编号,CAN2是14~27
sFiterconfig.FilterFIFOAssignment=CAN_FILTER_FIFO0; // 接收到的报文放入到FIFO0中
sFiterconfig.FilterMode=CAN_FILTERMODE_IDLIST; // 列表模式
sFiterconfig.FilterScale=CAN_FILTERSCALE_32BIT; // 设置32位宽
sFiterconfig.FilterIdHigh=0x200<<5; // 基本ID放入到STID中
sFiterconfig.FilterIdLow=0x201<<5;
sFiterconfig.FilterMaskIdHigh=0x202<<5;
sFiterconfig.FilterMaskIdLow=0x203<<5;
sFiterconfig.SlaveStartFilterBank=14;
- 掩码模式配置
sFiterconfig.FilterActivation = CAN_FILTER_ENABLE;
sFiterconfig.FilterBank=15; // 过滤器编号,CAN2是14~27
sFiterconfig.FilterFIFOAssignment=CAN_FILTER_FIFO1;
sFiterconfig.FilterMode=CAN_FILTERMODE_IDMASK;
sFiterconfig.FilterScale=CAN_FILTERSCALE_16BIT;
sFiterconfig.FilterIdHigh=0x200<<5; // ID和掩码都要移5位
sFiterconfig.FilterMaskIdHigh=0x202<<5;
sFiterconfig.FilterIdLow=0x201<<5;
sFiterconfig.FilterMaskIdLow=0x203<<5;
sFiterconfig.SlaveStartFilterBank=14;
通过上述配置,可以实现对特定ID范围的过滤。
参考资料
- CH4.2 CAN 第2讲 过滤器【南工骁鹰嵌入式软件培训】
- STM32 CAN过滤器配置详解
- 对于can通信过滤器的理解
热门推荐
夫妻不和频繁争吵?化解矛盾的有效策略
净利润的含义是什么?如何计算?
离婚协议抚养费怎么约定
脚后跟裂的治疗方法
蒙娜丽莎真的在笑吗?看认知心理学如何破解
一开门就冲出去?揭秘狗狗行为大不同背后的真相!
锆铌合金在人工骨及关节领域应用潜力大 我国已有产品获批上市
西安相亲市场揭秘:为何优质男性如此稀缺?
申报个人所得税申报方式选哪个
酒桌上的“三个要、四不语、五禁忌”
独坐敬亭山写作背景是什么
孕妇可以吃藕吗?孕妇吃藕,营养又健康
个税APP中如何绑定与解绑银行卡?
宫岛大阪松和五针松有什么区别
提升智能家居体验的蓝牙功率放大电路
凤还巢剧情介绍,凤还巢讲的是什么
开封朱仙镇年画:北宋市井里的“神仙气”
压缩空气干燥与净化技术:确保设备无故障运行的关键
购买内存条时,我应该注意哪些关键参数来确保兼容性和性能?
延迟退休后第一批按法定退休年龄退休的养老金计发表
网页如何获取试题数据库
荣格的心灵秘境,探索自我之旅的瑰宝——《红书》浅读
情感懂得这3招处理矛盾的恋爱技巧,才能不容易分手
结直肠癌治疗指南
最近很火的解压游戏有哪些 休闲解压小游戏排行榜前十名
饮食调整能治眩晕症吗
全球反恐20年|美国的"全球反恐战争"走向何方?
孕妇可以吃藕吗?孕妇吃藕,营养又健康
教师职称评审如何进行?如何提高职称评审成功率?
如何问到产品真实需求