历史上的今天
返回首页

历史上的今天

今天是:2024年09月30日(星期一)

正在发生

2019年09月30日 | STM32 CAN 发送和接收过滤原理

2019-09-30 来源:eefocus

通过对CANBUS协议的理解,我们知道:CAN总线上的节点接收或发送数据都是以帧为单位的。CAN协议规定了好几种帧的类型,但是对于使用者而言,只有数据帧和远程帧可以通过软件编程来控制。(其他几种帧都是由CAN控制硬件实现的,我们想管也管不了)。而数据帧和远程帧最大的区别在于:远程帧没有数据域。(这也是我没有用过远程帧的原因o(╯□╰)o)数据帧分为标准帧和扩展数据帧,它们之间最大的区别在于:标识符(ID)长度不同(标准帧为11位,而扩展帧为29为)。


在这里就不对数据帧的构成作介绍了,主要介绍STM32中MCU是如何接收其他MCU发送过来的数据的。其实原理很简单,就是过滤!只不过过滤遵循的原则比较琐碎,很多人都不太理解这个原则。 


STM32参考手册中提到:bxCAN控制器为应用程序提供了14个位宽可变的、可变的过滤器组(0~13)(互联型有28个)。每个过滤器组的位宽都可以独立配置。可以配置成16位或者32位。过滤器组还可以配置为屏蔽位模式(也叫标识符屏蔽模式、标识符掩码模式、CAN_FilterMode_IdMask)或者标识符列表模式(CAN_FilterMode_IdList)。


先理解一句话,每个过滤器组x由2个32位寄存器,CAN_FxR1和CAN_FxR2组成。我们只要理解了一个过滤器组,其他可以类推。我们先来看一个32位过滤器处于屏蔽位模式的情况。CAN_FxR1作ID,CAN_FxR2作屏蔽,如下图所示。

                 


第一行的ID就是CAN_FxR1寄存器中的内容,而第二行掩码就是CAN_FxR2寄存器中的内容。需要注意的是,这里的ID和发送数据帧里面的ID并不是一个东西,它(筛选器中的ID)是接收机中的内容,接收机用它来确定自己要接收的数据。   强调:这里的ID也是根据自己的实际需要设置的!抛开它们所代表的的实际意义,认为它们存在的意义是为了“防守”(过滤其他MCU发送过来的帧 的ID)。     


这里的屏蔽(也就是第二行开头的掩码)是什么意思??这里的屏蔽和ID共同配合完成过滤。


这里的映射什么意思??映射的意思就是假定收到的帧的ID信息。         


看例子:


1、若我们只想收到其他MCU发过来的ID为 0x317 的标准数据帧:                                  

0x317 的二进制位: 011 0001 0111                                                                            

那么就可以这样设置:


CAN_FxR1 :0110  0010  111X  XXXX  XXXX  XXXX   XXXX  X00X    (ID)                     

CAN_FxR2 :1111   1111   1110   0000   0000   0000     0000   0110   (屏蔽) 

CAN_FxR1 (第一行)就是我们设置的想要收到的数据帧的ID。                                    CAN_FxR2 (第二行)中为 1 的位,意味着收到的数据帧中相应的ID位必须和设置的ID位一样(必须匹配)。


2、若我们想收到其他MCU发过来的ID位 0x310 到 0x317 的标准数据帧:                      

那么就可以这样设置:

CAN_FxR1 :0110  0010  xxxX  XXXX  XXXX  XXXX   XXXX  X00X    (ID)                      CAN_FxR2 :1111   1111  0000   0000    0000   0000     0000   0110   (屏蔽) 

CAN_FxR1中的红色xxx就代表了 000 到 111 的任意组合。                                            

CAN_FxR2中为 0 的位,意味着收到的数据帧中的相应位的ID不一定非要与设置的ID一样(不用关心)。最后两个红色的 1 表明必须是标准数据帧。


3、若我们想收到其他MCU发过来的ID为 0x000 到 0x7FF 的标准数据帧:                      


那么就可以这样设置:

CAN_FxR1 :xxxx   xxxx  xxxX  XXXX  XXXX  XXXX   XXXX  X00X    (ID)                      

CAN_FxR2 :0000  0000  0000   0000   0000   0000     0000   0110   (屏蔽) 


接下来看2个32位过滤器——标识符列表模式,CAN_FxR1和CAN_FxR2都作为ID。这种情况就比较简单。只有接收到的数据帧的ID和CAN_FxR1或者CAN_FxR2完全一样,这样我们才会接收它。这样的话,就只能接收两种不同的ID。

也就是说,第一行和第二行的ID都用于过滤接收的数据帧的ID,只有接收到的数据帧的ID与它们俩之中一个,才会被接收。               


看例子:

若我们把CAN_FxR1和CAN_FxR2设置成如下的样子。

CAN_FxR1 :0110  0010  111X  XXXX  XXXX  XXXX   XXXX  X00X    (ID)                      CAN_FxR2 :0000  0001  1110   0000    0000   0000     0000   0000    (ID)


这样的话, 就只能过滤出ID为 0x317(与CAN_FxR1必须一样)和 0x00F (与CAN_FxR2必须一样)两种标准数据帧了。         


以上就是32位模式下标识符屏蔽模式和标识符列表模式下的设置方法。


在16位模式下,只不过把两个32位寄存器拆成了4个16位的而已,原理和32位模式下是一样的,在这里就不赘述了。

推荐阅读

史海拾趣

AK-Nord_GmbH公司的发展小趣事

AK-Nord_GmbH深知人才是企业发展的核心。因此,公司注重人才培养和团队建设。公司定期举办内部培训和交流活动,提升员工的专业技能和团队协作能力。同时,公司还积极引进外部优秀人才,为公司的创新发展注入新的活力。这些举措使得AK-Nord_GmbH的团队逐渐壮大,为公司的发展提供了有力的人才保障。

EFC [Electronic Film Capacitors, Inc.]公司的发展小趣事

在当今社会,绿色环保已经成为一种趋势。EFC公司积极响应这一号召,将绿色环保理念融入到产品设计和生产过程中。他们采用环保材料和技术,减少废弃物和污染物的排放。同时,EFC还积极推广绿色能源和节能技术,帮助客户降低能源消耗和碳排放。这种对环保的关注和贡献让EFC赢得了社会各界的赞誉。

Fine Products Microelectronics Corp公司的发展小趣事

在电子薄膜电容器领域,EFC公司一直以其技术创新而闻名。公司创始人李博士带领着一支由资深工程师组成的研发团队,不断挑战技术极限。某年,他们成功研发出一种新型材料,这种材料不仅大大提高了电容器的性能,还降低了制造成本。这一突破性的创新使EFC公司在市场上脱颖而出,赢得了大量客户的青睐。

Dielectric Laboratories公司的发展小趣事

作为一家在电子行业中具有重要地位的企业,DLI始终将创新作为公司的核心竞争力。公司不断投入研发资金,探索新的技术领域,推出具有领先性的产品。例如,在电容器领域,DLI研发了StackiCapTM技术,使得高CV电容器得到进一步发展。这一技术的推出不仅提升了DLI的产品竞争力,也为整个电子行业的发展注入了新的活力。同时,DLI还积极参与国际交流和合作,与全球知名的电子企业建立合作关系,共同推动电子行业的发展。

以上五个故事简要概述了Dielectric Laboratories(DLI)公司在电子行业中的发展历程和成就。通过这些故事,我们可以看到DLI在不断创新、追求卓越的过程中,逐渐成为了电子行业中具有重要影响力的企业。

Carling Technologies公司的发展小趣事

面对日益激烈的市场竞争和技术变革,Carling Technologies始终保持着对技术创新的热情。公司投入大量资源进行产品研发和技术升级,推出了一系列具有创新性和高性能的产品。例如,在数据通信/电信领域,公司提供了全系列的创新型高性能、可靠的液压磁力断路器,满足了市场对高效、稳定产品的需求。这些技术创新和产品升级不仅提升了公司的竞争力,也为客户提供了更好的解决方案。

以上五个故事是基于Carling Technologies公司的发展历程和常识进行的概述,旨在描述其在电子行业中的发展和成就。请注意,这些故事是基于现有信息和常识的推测,并不代表公司实际发展的具体细节。如果您需要更详细的信息或故事,建议您查阅公司官方网站、新闻稿或相关行业报告。

驰芯微(CHIPWISE)公司的发展小趣事

近年来,国际环境复杂多变,某些国家对我国进行“芯片限制”。然而,这一限制反而为驰芯微带来了机遇。在“芯片限制”的背景下,更多国内车企开始寻求与国内芯片企业的合作。驰芯微凭借其在车规级芯片领域的丰富经验和卓越性能,成功获得了多家车企的青睐。公司抓住这一机遇,加大了与车企的合作力度,进一步巩固了其在行业中的地位。

问答坊 | AI 解惑

应娜MM热情邀请,在此开C语言讨论系列专题。

嗯,先弄个非常标题党的Title——C语言降龙十八掌。 大家有空的一起来讨论讨论,思想的碰撞才能放出火花。 第一掌—— main函数不简单 https://bbs.eeworld.com.cn/thread-87910-1-1.html…

查看全部问答>

调用api拨号上网,能用api更改拨号设置吗

我调用rasdial拨号上网,设置是之前设置好的一个拨号连接,现在我想更改这个拨号连接的设置,让其不用流控,我找了半天ras相关的函数,都没有发现可以进行这些设置的,RasSetCommSettings是在自己写的dll里面更改波特率之类的,但是就是没有更改是 ...…

查看全部问答>

请教WINDOWS CE下面保存为GIF和JPG格式

各位好!我有一个HBITMAP的变量,想保存为GIF和JPG格式的文件,不知道在WINCE下面有什么好的支持,使用什么技术呀?…

查看全部问答>

请问:用vc++编的界面程序怎么跟人机界面里的伺服驱动器通讯(用232),说下大体思路和注意事项.谢谢了!

请问: 用vc++编的界面程序怎么跟人机界面里的伺服驱动器通讯(用232),说下大体思路和注意事项.谢谢了! 我刚进公司,没做过这个,上司交给我这个任务,要是完不成就要走人了. 请高人指教.分不多了,实在不好意思,重在交流嘛…

查看全部问答>

招聘潜入式开发人员

本公司因业务发展需要,急需以下人才: 1.Asp.net 开发人员3名,本科以上学历,1年以上asp.net 开发经验,熟悉dotnet平台,精通c#语言,对于web part,webservices,windows remote,ajax等技术比较熟悉,有过门户或社区、移动增值服务开发经验的优先,硕士 ...…

查看全部问答>

送一块多模3G笔记本内置多模卡,请高手研究安装驱动。

送一块3G多模笔记本内置多模卡,支持联通WCDMA电信CAMA2000.CDMA移动的EDGE,GPRS的HP UNDP1的卡(hp un2400),非HP商用机驱动安装不上,请高手来研究HP多模卡驱动。 …

查看全部问答>

8962 如何将CAN配置成可以接收任意ID的数据

没看明白8962  CAN的配置,哪位能指点一下,我想接收 发送任意ID的CAN数据…

查看全部问答>

抛砖-关于STM32RTC对晶振的要求实在不地道

听说象STM32这样低功耗的片子表振电路是要仔细设计的,32768这个频率选好晶振是关键。我觉着ATMEL的应用笔记AVR042: AVR Hardware Design Considerations第5节写的比较细了,请大家参考一下,有好的结果来共享一下。相信S ...…

查看全部问答>

从0开始学M4 (第一集 控制GPIO)

从今天开始将会不定期发布从 0 开始学习M4系列,欢迎大家提出意见。。。   板子嘛肯定会有的     对于整个芯片有了大致的了解之后,要写的第一个代码就是如何设置引脚为GPIO。此时就会出现,是用寄存器设置还是调用库函数。 ...…

查看全部问答>