关于STM32的CAN的过滤器
关于STM32的CAN的过滤器
STM32普通型芯片的CAN有14组过滤器组,互联型有28组过滤器组.
一般我们用的都是普通型的,所以在本文中可以说STM32有14组过滤器组.
根据配置,每1组过滤器组可以有1个,2个或4个过滤器.
这些过滤器相当于关卡,每当收到一条报文时,CAN要先将收到的报文
从这些过滤器上"过"一下,能通过的报文是有效报文,收进FIFO中,
不能通过的是无效报文(不是发给"我"的报文),直接丢弃.
所有的过滤器是并联的,即,一个报文只要通过了一个过滤器,就是算是有效的.
每组过滤器组有两种工作模式: 标识符列表模式,标识符屏蔽位模式.
在标识符列表模式下,收到报文的标识符必须与过滤器的值完全相等,才能通过.
在标识符屏蔽位模式下,可以指定标识符的哪些位为何值时,就算通过.这其实就是限定了处于某一范围的标识符能够通过.
在一组过滤器中,整组的过滤器都使用同一种工作模式.
另外,每组过滤器中的过滤器宽度是可变的,可以是32位或16位.
由工作模式和宽度,一个过滤器组可以变成以下几中形式之一:
(1) 1个32位的屏蔽位模式的过滤器.
(2) 2个32位的列表模式的过滤器.
(3) 2个16位的屏蔽位模式的过滤器.
(4) 4个16位的列表模式的过滤器.
所有的过滤器是并联的,即,一个报文只要通过了一个过滤器,就是算是有效的.
每组过滤器组有两个32位的寄存器用于存储过滤用的"标准值",分别是FxR1,FxR2.
在32位的屏蔽位模式下:
有1个过滤器,
FxR2用于指定需要关心哪些位,FxR1用于指定这些位的标准值.
在32位的列表模式下:
有两个过滤器.
FxR1指定过滤器0的标准值,收到报文的标识符只有跟FxR1完全相同时,才算通过.
FxR2指定过滤器1的标准值.
在16位的屏蔽位模式下:
有2个过滤器.
FxR1配置过滤器0,其中,[31-16]位指定要关心的位,[15-0]位指定这些位的标准值.
FxR2配置过滤器1,其中,[31-16]位指定要关心的位,[15-0]位指定这些位的标准值.
在16位的列表模式下:
有4个过滤器.
FxR1的[15-0]位配置过滤器0,FxR1的[31-16]位配置过滤器1.
FxR2的[15-0]位配置过滤器2,FxR2的[31-16]位配置过滤器3.
STM32的CAN有两个FIFO,分别是FIFO0,FIFO1.为了便于区分,下面FIFO0写作FIFO_0,FIFO1写作FIFO_1.
每组过滤器组必须关联且只能关联一个FIFO.复位默认都关联到FIFO_0.
所谓"关联",是指假如收到的报文从某个过滤器通过了,那么该报文会被存到该过滤器相连的FIFO.
从另一方面来说,每个FIFO都关联了一串的过滤器组,两个FIFO刚好瓜分了所有的过滤器组.
每当收到一个报文,CAN就将这个报文先与FIFO_0关联的过滤器比较,如果被匹配,就将此报文放入FIFO_0中.
如果不匹配,再将报文与FIFO_1关联的过滤器比较,如果被匹配,些报文就放入FIFO_1中.
如果还是不匹配,此报文就被丢弃.
每个FIFO的所有过滤器都是并联的,只要通过了其中任何一个过滤器,该报文就有效.
如果一个报文既符合FIFO_0的规定,又符合FIFO_1的规定,显然,根据操作顺序,它只会放到FIFO_0中.
每个FIFO中只有激活了的过滤器才起作用,换句话说,如果一个FIFO有20个过滤器,但是只激话了5个,
那么比较报文时,只拿这5个过滤器作比较.
一般要用到某个过滤器时,在初始化阶段就直接将它激活.
需要注意的是,每个FIFO必须至少激活一个过滤器,它才有可能收到报文.如果一个过滤器都没有激活,
那么是所有报文都报废的.
一般的,如果不想用复杂的过滤功能,FIFO可以只激活一组过滤器组,且将它设置成32位的屏蔽位模式,
两个标准值寄存器(FxR1,FxR2)都设置成0.这样所有报文均能通过.
STM32 CAN中,另一个较难理解的就是过滤器编号.
过滤器编号用于加速CPU对收到报文的处理.
收到一个有效报文时, CAN会将收到的报文, 以及它所通过的过滤器编号, 一起存入接收邮箱中,
CPU在处理时,可以根据过滤器编号,快速的知道该报文的用途,从而作出处理.
不用过滤器编号其实也是可以的, 这时候CPU就要分析所收报文的标识符, 从而知道报文的用途.
由于标识符所含的信息较多,处理起来就慢一点了.
STM32使用以下规则对过滤器编号:
(1) FIFO_0和FIFO_1的过滤器分别独囗立编号,均从0开始按顺序编号.
(2) 所有关联同一个FIFO的过滤器,不管有没有被激活,均统一进行编号.
(3) 编号从0开始,按过滤器组的编号从小到大,按顺序排列.
(4) 在同一过滤器组内,按寄存器从小到大编号.FxR1配置的过滤器编号小,FxR2配置的过滤器编号大.
(5) 同一个寄存器内,按位序从小到大编号. [15-0]位配置的过滤器编号小,[31-16]位配置的过滤器编号大.
(6) 过滤器编号是囗弹性的. 当更改了设置时,每个过滤器的编号都会改变.
但是在设置不变的情况下,各个过滤器的编号是相对稳定的.
这样,每个过滤器在自己在FIFO中都有编号.
在FIFO_0中,编号从0 -- (M-1), 其中M为它的过滤器总数.
在FIFO_1中,编号从0 -- (N-1), 其中N为它的过滤器总数.
一个FIFO如果有很多的过滤器, 可能会有一条报文, 在几个过滤器上均能通过,
这时候, 这条报文算是从哪儿过来的呢?
STM32在使用过滤器时,按以下顺序进行过滤
(1) 位宽为32位的过滤器,优先级高于位宽为16位的过滤器
(2) 对于位宽相同的过滤器,标识符列表模式的优先级高于屏蔽位模式
(3) 位宽和模式都相同的过滤器,优先级由过滤器号决定,过滤器号小的优先级高
按这样的顺序,报文能通过的第一个过滤器,就是该报文的过滤器编号,被存入接收邮箱中.
关于STM32的CAN的过滤器的更多相关文章
- STM32 CAN总线标识符过滤器难点解析
STM32 CAN总线标识符过滤器难点解析 原创 2016年05月31日 15:12:24 标签: stm32 / CAN 4910 CAN总线是目前应用非常多的一种总线,在汽车电子,航空航天中应用广 ...
- stm32之can总线过滤器研究
stm32的can总线的配置如下: CAN_InitStructure.CAN_TTCM=DISABLE;//禁止时间触发通信模式 CAN_InitStructure.CAN_A ...
- STM32 CAN
STM32普通型芯片的 CAN 有14组过滤器组(互联型有28组过滤器组) ,用以对接收到的帧进行过滤.每组过滤器包括了2个可配置的32位寄存器:CAN_FxR0和 CAN_FxR1.对于过滤器组, ...
- STM32之CAN ---CAN ID过滤器分析
1 前言 在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的.因此,发送者以广播的形式把报文发送给所有的接收者.节点在接收报文时,根据标识符(CAN ID)的值决定软件是否需要该 ...
- STM32使用以下规则对过滤器编号:
STM32使用以下规则对过滤器编号:(1) FIFO_0和 FIFO_1的过滤器分别独立编号,均从0开始按顺序编号.(2) 所有关联同一个 FIFO 的过滤器,不管有没有被激活,均统一进行编号.(3) ...
- 再谈STM32的CAN过滤器-bxCAN的过滤器的4种工作模式以及使用方法总结
1. 前言 bxCAN是STM32系列最稳定的IP核之一,无论有哪个新型号出来,这个IP核基本未变,可见这个IP核的设计是相当成熟的.本文所讲述的内容属于这个IP核的一部分,掌握了本文所讲内容,就可以 ...
- STM32之CAN通讯接收过滤器过滤分析
一.前言 学习了CAN通讯,底层的东东CAN控制器已经帮你处理完成,也就是CAN通讯协议已经做好,你按协议格式往对应的位扔数据发送就好,所以使用CAN通讯,我们只需要去关心制定发送的数据间的协议,也就 ...
- stm32 CAN过滤器组
在互联型产品中, CAN1和CAN2分享28个过滤器组 其它STM32F103xx系列产品中有14个过滤器组 位宽设置 四种配置方式: 1个32位的屏蔽位模式 2个32位的标识符列表模式,可以过滤2个 ...
- STM32——CAN总线过滤器设置
STM32CAN控制器每个筛选器组由两个32位的寄存器组成. 根据所需位宽的不同,各个筛选器可配置成16位或32位模式(如下图,当FSCx=1为32位模式,FSCx=0时为16位模式).同时,筛选器的 ...
随机推荐
- 转:浅谈HTTP中Get、Post、Put与Delete的区别
1.GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改.增加数据,不会影响资源的内容,即该请求不会产生副作用.无论进行多少次操 ...
- 第15.2节 PyCharm支持Python解释器的配置调整
上节介绍了PyCharm的安装与简单使用,本节介绍PyCharm相关的配置调整,以支持在PyCharm环境下集成Python解释器进行程序的编译. 一. 工程配置调整 在执行文件前,可能需要对PyCh ...
- 【开发工具】 使用 Postman 进行接口测试 (配置全局 token,JWT可用)
在前后端分离开发的项目中,使用postman来做接口测试会方便很多,然而因为JWT的鉴权,导致每半小时token都要更新一下,使测试变的很麻烦. 如果把token设置为全局变量,方便做测试,每次自动获 ...
- 常见的HTML元素及常见检查点
1.<select>标签,可创建单选或多选菜单 检查点:下拉列表数据的正确性.数据被选中是否正确.是否变形.是否只读.多选/单选是否正确 2.<label>标签,相当于一个展示 ...
- 20192313 实验一《Linux基础与Java开发环境》实验报告
20192313 2020-10-8 <数据结构与面向对象程序设计>实验1报告 课程:<程序设计与数据结构> 班级: 1923 姓名: 陈宇帆 学号:20192313 实验教师 ...
- 【NOI2018】你的名字(SAM & 线段树合并)
Description Hint Solution 不妨先讨论一下无区间限制的做法. 首先"子串"可以理解为"前缀的后缀",因此我们定义一个 \(\lim(i) ...
- 题解-[WC2011]最大XOR和路径
[WC2011]最大XOR和路径 给一个 \(n\) 个点 \(m\) 条边(权值为 \(d_i\))的无向有权图,可能有重边和子环.可以多次经过一条边,求 \(1\to n\) 的路径的最大边权异或 ...
- git使用-merge request开发操作步骤
0. 如果当前不在develop分支,则切换到develop分支 git checkout develop 1. 获取develop分支最新代码 git pull 注意:这一步正常来说应该是一个Fas ...
- Object not found! The requested URL was not found on this server.... 报错解决方案
服务器(centos6.5) lnmp 报错如下 Object not found! The requested URL was not found on this server. The link ...
- WindowsPhone8.1 开发-- 二维码扫描
随着 WinRT 8.1 API 的发布,Windows 8.1 和 Windows Phone 8.1 (基于 WinRT) 应用程序的开发模型经历了戏剧性的收敛性.与一些特定于平台的考虑,我们现在 ...