凡亿教育-媛媛
凡事用心,一起进步
打开APP
公司名片
凡亿专栏 | CAN通信滤波设置
CAN通信滤波设置

在CAN通信中,有时候我们只想接收需要的ID,而滤出掉不需要的消息,这时候我们就需要添加滤波配置,本次以STM32F103RC为例来说明,首先来看什么是有效报文

01 有效报文


根据CAN协议,当报文被正确接收,这里指的是直到最后一位都没有报错,且通过了标识符过滤,那么该报文被认为是有效报文,是我们需要的报文。那么什么是标识符过滤呢?


02 标识符过滤


你可以简单的把他理解成和我们日常生活中的过滤一样,就是滤掉不需要的,剩下我们需要的,在CAN协议里,报文的标识符是跟报文的内容相关的,过滤是配置后,硬件完成,无需CPU开销,在F103中有14个位宽可变的可配置的过滤器组,每个过滤器组由两个32位寄存器组成。每个过滤器的位宽都可以独立配置,以满足应用程序的不同需求。可配置为屏蔽位模式和标识符列表模式。

屏蔽位模式:

在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照
“必须匹配”或“不用关心”处理。

标识符列表模式:

在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此,不是采用一个标识符加一
个屏蔽位的方式,而是使用2个标识符寄存器。接收报文标识符的每一位都必须跟过滤器标识符
相同。

为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式。为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。应用程序不用的过滤器组,应该保持在禁用状态。过滤器组中的每个过滤器,都被编号为(叫做过滤器号)从0开始,到某个最大数值-取决于过滤器组的模式和位宽的设置。 更多详细的描述大家可以参考官方手册,这里不在赘述,主要给大家来说明下软件上如何设置


03 软件实现


软件实现上,按照手册描述,我们以配置标识符列表模式为例来说明,假设在我的软件里,我想过滤的标识符为ea3c09ef2d68b89213249ba58f6d03.jpg

那么在CAN的初始化程序里面,我们就要加上过滤

ec440939686bcf83e7395250101143.jpg

87a805a8e9c88f3d16984a2a272125.jpg

然后在启动CAN使能中断,初始化就完成了。

1363fcb4f70521ae97692c4142a7a9.jpg

04 添加多条过滤


上一节我们添加了一个过滤,那么只会过滤出一个ID,可是如果我想要另一个ID也进来呢,那么我们可以在上图代码中第一个过滤后继续添加

e5b2bc72288014151c860d6eb4d27e.jpg

注意到两组中的不同,一个是sFilterConfig.FilterBank的不同,另一个就是要过滤的ID标识符不同。至此基于标识符列表的过滤模式就算完成,屏蔽位模式大家下去可以自己对照手册研究下。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论