历史上的今天
返回首页

历史上的今天

今天是:2025年01月07日(星期二)

正在发生

2020年01月07日 | STM32过滤器的作用

2020-01-07 来源:elecfans

STM32普通型芯片的CAN有14组过滤器组(互联型有28组过滤器组),用以对接收到的帧进行过滤。每组过滤器包括了2个可配置的32位寄存器:CAN_FxR0和CAN_FxR1。对于过滤器组,可以将其配置成屏蔽位模式,这样CAN_FxR0中保存的就是标识符匹配值,CAN_FxR1中保存的是屏蔽码,即CAN_FxR1中如果某一位为1,则CAN_FxR0中相应的位必须与收到的帧的标志符中的相应位吻合才能通过过滤器;CAN_FxR1中为0的位表示CAN_FxR0中的相应位可不必与收到的帧进行匹配。过滤器组还可以被配置成标识符列表模式,此时CAN_FxR0和CAN_FxR1中的都是要匹配的标识符,收到的帧的标识符必须与其中的一个吻合才能通过过滤。


注意:CAN_FilterIdHigh是指高16位CAN_FilterIdLow是低16位应该将需要得到的帧的和过滤器的设置值左对齐起。


一般我们用的都是普通型的,所以在本文中可以说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提供的例程里就是这么做的!)


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) 位宽和模式都相同的过滤器,优先级由过滤器号决定,过滤器号小的优先级高。


按这样的顺序,报文能通过的第一个过滤器,就是该报文的过滤器编号,被存入接收邮箱中。


推荐阅读

史海拾趣

HP(Keysight)公司的发展小趣事

HP(Keysight)公司发展故事

故事一:初创时期的艰辛与突破

HP(惠普)的起源可以追溯到1939年,由威廉·惠普(William Hewlett)和戴维·欧文(David Packard)在美国加州的一个小车库内创立。最初,他们专注于生产音频振荡器,这是一种用于测试音频设备的设备。尽管条件简陋,但凭借过人的技术和敏锐的市场洞察力,他们的产品很快获得了市场的认可。这一成功为公司奠定了坚实的基础,也为后续进入电子仪器和计算机领域铺平了道路。

故事二:半导体技术的先驱

1940年,HP公司开发出了第一台采用半导体技术的电子计算机,这在当时是一项革命性的成就。这台计算机不仅能够执行复杂的计算任务,还标志着HP在半导体技术领域的领先地位。这一突破不仅为公司赢得了业界的尊重,也为后续的微型计算机和个人计算机的发展奠定了基础。

故事三:微型计算机市场的开拓者

1960年,HP公司再次引领行业潮流,开发出了世界上第一台商用微型计算机。这台计算机采用了更小的集成电路,比之前的计算机更加小巧、便宜且易于使用。这一创新不仅降低了计算机的门槛,使得更多人能够接触到计算机,也推动了计算机技术的普及和应用。HP在微型计算机市场的成功,进一步巩固了其在电子行业的领导地位。

故事四:个人电脑市场的崛起

进入70年代,HP公司开始涉足个人电脑市场。1970年,HP发布了第一台商业个人计算机(PC),这一举措标志着公司正式进入了一个全新的业务领域。随着个人电脑市场的迅速发展,HP不断推出新产品,满足消费者的多样化需求。从早期的台式机到后来的笔记本电脑,HP始终保持着技术领先优势,为用户带来更加便捷、高效的计算体验。

故事五:并购与多元化发展的战略

在发展过程中,HP公司也通过并购等方式不断拓展业务领域。2002年,HP以250亿美元收购了康柏(Compaq),这是当时科技行业最大的一笔收购。这次并购不仅增强了HP在个人电脑市场的竞争力,也推动了公司在服务器、存储设备等多个领域的发展。此外,HP还涉足软件及服务等多个领域,成为一个多元化的科技巨头。通过不断并购和业务拓展,HP在全球科技行业的地位日益稳固。

请注意,虽然问题中提到了Keysight,但Keysight实际上是惠普在2014年从惠普科技公司(HP Inc.)分拆出来的一家独立公司,专注于电子测量和测试解决方案。因此,上述故事主要围绕HP(惠普)公司的发展历史进行描述,并未直接涉及Keysight公司。

Arctic Silicon Devices公司的发展小趣事

随着企业规模的不断扩大,Arctic Silicon Devices逐渐意识到承担社会责任的重要性。公司积极参与公益事业,通过捐款、捐物等方式支持教育、环保等领域的发展。同时,公司还加强了对员工福利的关注和投入,为员工提供了良好的工作环境和发展空间。这些举措不仅提升了公司的社会形象,也增强了员工的归属感和忠诚度。

以上五个故事虽然基于虚构的Arctic Silicon Devices公司,但它们反映了电子行业中企业发展的常见路径和关键要素。通过技术突破、国际化战略、品质管理、创新合作和社会责任等方面的努力,一个电子企业可以在竞争激烈的市场中脱颖而出,实现可持续发展。

DMC Tools公司的发展小趣事

随着全球对环保问题的日益关注,DMC Tools公司也积极响应号召,致力于绿色生产。公司引进了先进的环保设备和技术,对生产过程中的废弃物进行无害化处理。同时,公司还积极推广绿色产品,帮助客户实现绿色生产。这种对环保的关注和投入不仅彰显了公司的社会责任感,也为公司赢得了良好的社会声誉。

Gowanda Electronics公司的发展小趣事

DMC Tools公司深知质量是企业的生命线。因此,公司建立了严格的质量管控体系,从原材料采购到生产加工、再到产品检验,每一个环节都严格把关。这种对质量的执着追求使得DMC Tools公司的产品赢得了客户的广泛信任。许多知名电子企业都选择DMC Tools公司作为他们的长期合作伙伴,这也为公司的发展奠定了坚实的基础。

浙江凡华(FANHAR)公司的发展小趣事

DMC Tools公司深知质量是企业的生命线。因此,公司建立了严格的质量管控体系,从原材料采购到生产加工、再到产品检验,每一个环节都严格把关。这种对质量的执着追求使得DMC Tools公司的产品赢得了客户的广泛信任。许多知名电子企业都选择DMC Tools公司作为他们的长期合作伙伴,这也为公司的发展奠定了坚实的基础。

Display Engineering Services公司的发展小趣事

在发展过程中,DMC Tools公司积极寻求国际合作,与多家国际知名电子企业建立了长期稳定的合作关系。通过与这些企业的合作,DMC Tools公司不仅学习到了先进的生产技术和管理经验,还拓宽了自己的市场视野。这些国际合作项目为公司带来了大量的订单和利润,同时也提升了公司的国际竞争力。

问答坊 | AI 解惑

请问LABTOOL-48怎样烧写义隆的EM78P156

请问LABTOOL-48怎样烧写义隆的EM78P156,有谁用过可以说说吗?…

查看全部问答>

ARM微控制器快速入门知识

ARM微控制器快速入门知识…

查看全部问答>

请PROTEL高手帮忙

用PROTEL画PCB,原理图转PCB时发现PCB的元件全部堆到了一起,请教高手这是怎么回事?有什么解决的好方法可以快速打散这些元件?   小弟好久没画PCB了,请高手指点一下,谢谢!…

查看全部问答>

推荐一个学习嵌入式的培训和书籍

中心简介:   广东省嵌入式软件公共技术中心(简称GEC)是广东美的集团嵌入式产品研发中心,原是广东省政府公开向社会竞标的项目,由广东美的集团中标承建。中心建设资金总投入3000万元,其中省政府资助资金900万元、地方政府配套450万元、美的 ...…

查看全部问答>

请问 引脚寄存器 是什么? ?

volatile S3C2440A_IOPORT_REG *p2440a_ioport_reg = NULL;  /*IO寄存器对应的虚拟地址指针*/ volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数 ...…

查看全部问答>

IC版面

这个论坛资源很多,面很广,帮助很大。 但是IC涉及相关的版面太少了。 后来去了eetop,感觉不错,推荐一下。 以下是链接: 国内资料最份丰富的电子论坛—— http://www.eetop.cn/bbs/index.php?fromuid=504319 …

查看全部问答>

高分求创意

ht46f49e 盛群半导体继HT46F47E之后,再增添A/D型Flash MCU - HT46F46E、HT46F48E、HT46F49E,全系列符合工业上-40℃ ~ 85℃工作温度与高抗噪声之性能要求,快闪程序内存(Flash Program ROM)可重复10万次之读/写,数据存储器EEPROM可重复100万次 ...…

查看全部问答>

关于PCI过滤驱动程序

希望读写PCI桥芯片上某个GPIO管脚,请问: 1)需要通过0x0cf8,0x0cfc访问寄存器,从而达到控制GPIO管脚吗? 2)中断服务例程ISR怎么写? 能给些建议或意见么?…

查看全部问答>

请问输入输出阻抗如何计算?

看了很多关于输入输出阻抗匹配的资料,还是不清楚输入输出阻抗怎么计算?以上两个图如果是在输入/输出情况下,输入输出阻抗究竟如何计算?…

查看全部问答>