[APM32F407] 应用笔记 | CAN过滤器组的使用

[复制链接]
64|2
手机看帖
扫描二维码
随时随地手机跟帖
Tong459|  楼主 | 2022-5-9 11:22 | 显示全部楼层 |阅读模式
本帖最后由 Tong459 于 2022-5-9 11:22 编辑

#申请原创#

引入

F407拥有两个CAN,对于CAN的过滤器每隔时间久了我就淡忘了,于是就想写一篇关于CAN过滤器的内容,就算没人看也能自己看

过滤器原理

首先介绍一下过滤器的原理。过滤器分为掩码(Mask)和ID两个部分。掩码可以理解为筛子,ID是基于“筛子”的第二层过滤

拿身份号打个比方,我们的身份号的前6位是所属地区,那如果想对它做筛选,你会怎么做?那第一步肯定是提取出前6位,那我们可以制作个“掩码”,1就是想提取的,0就是不提取的,那就有类似于:111111xxxxxxxxxxxx这样的掩码结构,这样我们就能提取前6位了。第二步就是提取特定地区的ID,比如浙江温州江南皮革厂前6位ID为886886(瞎写的别较真),那ID就设为886886,这样就是:提取前6位的值,它们必须满足886886,其他位不管。

再打个比方,某商场进场需查码,掩码设为健康码,其余的收款码、微信码、特码我都不看,我就看健康码,那单看码还不行,还得是绿码,其他颜色一概不通过,这就是ID。

在F407上的CAN过滤器组和上述原理差不多,分别讲解下:

①掩码(Mask)

假设掩码为16位,值为0x0001,那它表示的是筛出bit0,意味着过滤器只关注bit0;若值为0x0000,则意味着所有ID都可通过,即全通。

②ID

ID所占位数同掩码。前面假设了掩码为0x0001,那当ID为0x1230时,表示能通过的ID需要满足bit0为0,其他不管;当ID为0x1231,表示能通过的ID需要满足bit0为1,其他不管。当有掩码的时候,ID需要结合掩码使用,当无掩码时,可当做掩码值为全F,即关注ID的所有位。

APM32F407上的CAN

一组过滤器为两个32bit寄存器。掩码可以设置有或没有、过滤位宽可设置16bit或32bit,那就有4种结合方式。在极海F407的SDK中调用的函数是CAN_ConfigFilter,我们对其参数配置就可以调整掩码和ID了。

需要注意的是,掩码和ID组个过滤的功能正常用就行,但是函数传参进去的整个掩码或ID包含的信息还有:拓展标识符、远程帧等信息。因此需要移位运算。下图是16bit位宽下的结构(APM32F4用户手册截):

16bit.png

下图是32bit位宽下的结构(APM32F4用户手册截):

32bit.png

最后提醒一下,F407拥有两个CAN,但是CAN2与CAN1共用一套过滤器组,CAN1的0~13过滤器组属于CAN1,CAN1的14~27过滤器组属于CAN2。

如果有地方讲错了或者需要补充的,请留言。


使用特权

评论回复
WuKaiLi| | 2022-5-9 16:01 | 显示全部楼层
学到了,感谢分享

使用特权

评论回复
fuqinyyy| | 2022-5-9 19:21 | 显示全部楼层
实际使用过程中很少用到

使用特权

评论回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则