前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CAN通信滤波设置

CAN通信滤波设置

作者头像
用户1605515
发布2020-06-16 16:13:58
7380
发布2020-06-16 16:13:58
举报
文章被收录于专栏:嵌入式程序猿嵌入式程序猿

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

01 有效报文

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

02 标识符过滤

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

屏蔽位模式:

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

标识符列表模式:

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

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

03 软件实现

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

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

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

04 添加多条过滤

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式程序猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档