历史上的今天
返回首页

历史上的今天

今天是:2024年09月06日(星期五)

正在发生

2021年09月06日 | STM8单片机CAN滤波器的设置

2021-09-06 来源:eefocus

大家好,我是小舒,今天和大家分享一下CAN滤波器相关的内容,滤波器主要用来设置CAN的接收ID,当CAN总线上所挂接的节点较多,数据量较大的话,对单节点的接收判断可能造成较大的压力、占用较多的资源。为了解决这个问题,可以通过设置滤波器实现只接收特定ID。ST系列单片机的滤波器设置非常绕,很容易把自己绕晕了,下面以STM8为例和大家分享一下。


注意,此文需要看多遍。

前言
在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此,发送者以广播的形式把报文发送给所有的接收者。节点在接收报文时,根据标识符的值决定软件是否需要该报文;如果需要,就拷贝到RAM里;如果不需要,报文就被丢弃且无需软件的干预。为满足这一需求,beCAN为应用程序提供了个可配置的、位宽可变的6个(0-5)过滤器组,用于只接收那些软件需要的报文。硬件过滤的做法节省了CPU开销,否则就必须由软件进行过滤,从而占用一定的CPU资源。

滤波器设置
滤波器设置包括下面几个寄存器:CAN滤波模式寄存器1 (CAN_FMR1)和CAN滤波模式寄存器2(CAN_FMR2)、CAN滤波配置寄存器1 (CAN_FCR1)、CAN滤波配置寄存器2 (CAN_FCR2)和CAN滤波配置寄存器3 (CAN_FCR3),CAN滤波组i寄存器x (CAN_FiRx) (i = 0 .. 5, x = 1 .. 8)。

滤波模式寄存器用于设置滤波器为标识符列表模式和掩码模式,滤波配置寄存器用于开启或关闭滤波器和滤波器的宽度设置,滤波组用于具体滤波设置。

6个可配置的位宽可变的过滤器组,通过FSCx0(x=1..6)和FSCx1(x=1..6)设置滤波宽度,
 图片
就32位滤波器设置进行解读,CAN报文分为标准帧和扩展帧,标准帧ID11位,扩展帧29位,ID与滤波配置映射关系如上表所示,如滤波模式设置可知可以分为两个ID或者一个ID+Mask。当需要过滤某一段ID时,使用ID+Mask模式,当过滤具体ID时直接使用ID模式即可。

如果我的扩展id是0x12345678 ;想只接收0x12xxxxxx的标识符号,该如何设置滤波器,
此处采用32位滤波器0进行滤波配置,因此FSC00 = 1;FSC01 = 1;FMH0 = 0;FML0 = 0;
扩展id为0x12345678 (0001,0010,0011,0100,0101,0110,0111,1000)
将扩展帧ID填入CAN帧ID格式中
 图片
RTR位我们设置为0表示数据帧,IDE位设置为1表示扩展ID,因为我们的ID是29位的,所以RTR = 0;IDE = 1;
在滤波器中填充如下:
 图片
如果要关心到具体的某一个比特位置;如果要过滤让它只接收0x12xxxxxx的表示符号;
这时候要根据它实际在identify中的位置去修改idmask ; 前八个比特,对应的就是黄色和绿色的部分,所以其他的颜色,可以都填0表示不需要关心,则这里填入:1 1 1 1 ,1 x x x,我们这里填0xF8 ;
CAN_F0R1 = 0x91; CAN_F0R2 = 0x00; CAN_F0R3 = 0x00; CAN_F0R4 = 0x00;
CAN_F0R5 = 0x91; CAN_F0R6 = 0x00; CAN_F0R7 = 0x00; CAN_F0R8 = 0x00;
同理,对于下面的配置是只接收标准id= 0x321(0011,0010,0001)的ID(也是32位过滤器),
因为也是数据帧,所以RTR = 0,标准的id,所以IDE = 0 ;所以填入到:
 图片
CAN_F0R1 = 0x64; CAN_F0R2 = 0x20; CAN_F0R3 = 0x00; CAN_F0R4 = 0x00;
CAN_F0R5 = 0xFF; CAN_F0R6 = 0xE0; CAN_F0R7 = 0x00; CAN_F0R8 = 0x00;
设置过滤器0只接收ID为0x1828A0EF和0x1828A0EE的数据帧。(工作在标识符列表模式)
首先我们把这两个ID写成二进制:
0x1828A0EF:0001 1000 0010 1000 1010 0000 1110 1111
0x1828A0EE:0001 1000 0010 1000 1010 0000 1110 1110
然后我们将0x1828A0EF二进制的格数据组成如上图mapping所示的格式
Can_fxr1:1100 0001 0xc1
Can _fxr2:0100 1001 0x49 //这里有个RTR位我们设置为0表示数据帧,IDE位设置为1表示扩展ID,
Can _fxr3:0100 0001 0x41
Can _fxr4:1101 1110 0xDE
这时我们工作在标识符列表模式,identifier/Mask的寄存器相当于identifier使用。
再将0x1828A0EE二进制的格数据组成如上图mapping所示的格式
Can _fxr5:1100 0001 0xc1
Can _fxr6:0100 1001 0x49 //这里有个RTR位我们设置为零表示数据帧,IDE设置为1表示扩展ID
Can _fxr7:0100 0001 0x41
Can _fxr8:1101 1100 0xDC
 图片
16位配置模式也经常使用,如CAN网络管理中往往涉及到网络管理ID-0x4xx,因此需要利用ID和Mask模式,其余的采用ID模式,可以建立滤波器设置寄存器数组.


0x400网段,0x330,0x3200x400: 展开 0000 0100 0000 0000,采用标准帧数据帧格式0x330: 展开 0000 0011 0011 00000x320: 展开 0000 0011 0010 0000CAN_F0R1: 100 0000 0 0x80CAN_F0R2: 000 00 000 0x00CAN_F0R3: 111 0000 0 0xE0CAN_F0R4: 00000000 0x00CAN_F0R5: 011 0011 0 0x66CAN_F0R6: 00000000 0x00CAN_F0R7: 011 0010 0 0x64CAN_F0R8: 00000000 0x00FSC00 = 0; FSC01 = 1; FMH0 = 1; FML0 = 0; FACT0 = 1;


 图片
图片
在以往的项目中用过多个品牌的单片机,包括国产的,一直感觉ST的滤波器设置比较麻烦,每次用到的时候都要花较长时间去回忆。
推荐阅读

史海拾趣

Hamlin ( Littelfuse )公司的发展小趣事

故事一:市场定位与技术创新

HAHN - Elektrobau GmbH & Co KG公司自成立以来,便在电子行业中找到了自己的独特定位,专注于生产面向特定应用的特种变压器线圈。起初,公司通过深入研究市场需求,发现传统变压器线圈在特定应用中存在效率低下、体积过大等问题。于是,HAHN投入大量资源进行技术研发,优化产品设计,成功开发出了一系列高效、紧凑的特种变压器线圈,迅速赢得了市场的认可。这一举措不仅巩固了公司在电子行业中的地位,也为后续的发展奠定了坚实的基础。

故事二:合作与共赢

在发展过程中,HAHN深知合作的重要性。公司积极与上下游企业建立紧密的合作关系,共同推动技术进步和产业升级。例如,HAHN与多家知名电子制造商建立了长期合作关系,共同开发新产品,优化生产工艺。通过这些合作,HAHN不仅获得了宝贵的市场信息和技术支持,还成功地将自身产品打入了更广阔的市场领域。同时,公司还积极与供应商和分包商合作,通过优化供应链管理,降低了生产成本,提高了生产效率,实现了共赢发展。

故事三:全球化战略

随着电子行业的全球化趋势日益明显,HAHN也开始了自己的全球化战略。公司不仅在欧洲市场取得了显著成绩,还积极向亚洲、北美等市场扩张。为了更好地服务全球客户,HAHN在多个国家和地区设立了分支机构,并建立了完善的销售和服务网络。通过这些举措,HAHN成功地将自己的产品和服务推向了全球市场,进一步提升了品牌知名度和市场份额。

故事四:品质与服务的双重保障

在电子行业中,品质和服务是企业生存和发展的关键。HAHN深知这一点,因此始终将品质和服务放在首位。公司建立了严格的质量控制体系,对每一个环节都进行严格的把关,确保产品质量达到最高标准。同时,公司还注重提升客户服务水平,建立了专业的客户服务团队,为客户提供全方位、个性化的服务。这些举措不仅赢得了客户的信赖和好评,也为公司赢得了更多的业务机会。

故事五:持续研发与创新

面对日新月异的电子行业技术,HAHN始终保持着高度的敏锐性和前瞻性。公司不断加大研发投入,引进高端人才和先进设备,致力于新技术、新产品的开发。通过持续的研发和创新,HAHN不断推出具有自主知识产权的新产品和技术方案,为电子行业的发展注入了新的活力。同时,公司还积极参与行业标准的制定和修订工作,推动行业技术进步和产业升级。这些努力不仅提升了公司的核心竞争力,也为公司的可持续发展奠定了坚实的基础。

Deltron / DEM Manufacturing公司的发展小趣事

为了进一步扩大市场份额和增强竞争力,DEM Manufacturing积极寻求与其他企业的战略合作。公司与其他电子行业的领军企业建立了长期稳定的合作关系,共同开发新产品、拓展新市场。这些合作不仅为公司带来了更多的商业机会,还促进了整个电子行业的发展和进步。

请注意,以上故事梗概是基于已知事实进行的概括和虚构,旨在展示Deltron / DEM Manufacturing公司在电子行业中的发展历程和成就。具体细节和实际情况可能有所不同。

德丰(DEFOND)公司的发展小趣事

德丰金属材料有限公司(简称“德丰金属”)是一家专业从事铝合金建筑型材加工的企业。随着市场竞争的加剧和环保要求的提高,公司意识到必须加快转型升级的步伐。为此,德丰金属加大了研发投入和技术改造力度,成功开发出了一系列符合绿色环保标准的新型铝合金型材产品。同时,公司还积极拓展国际市场,与多家国外知名企业建立了长期稳定的合作关系。通过不断的努力和创新,德丰金属成功实现了从传统制造业向绿色环保型制造业的转型升级。

西博臣(CYBERSEN)公司的发展小趣事

作为一家有社会责任感的企业,西博臣积极履行社会责任,关注环境保护和可持续发展。公司采用环保材料和生产工艺,减少生产过程中的能源消耗和废弃物排放。同时,公司还积极参与社会公益活动,为社会做出积极贡献。这些举措不仅体现了公司的社会责任感,也为其赢得了更多客户和合作伙伴的信任和支持。

福斯特(FIRST)公司的发展小趣事
使用专业的诊断仪读取ESP系统的故障码,根据故障码进行针对性的排查和维修。
EUDYNA公司的发展小趣事

在电子行业,产品质量是企业生存和发展的基石。EUDYNA深知这一点,因此对每一件产品都进行严格的测试和检验。公司建立了完善的质量管理体系,从原材料采购到生产过程中的每一个环节都进行严格把控。这种对质量的坚守不仅赢得了客户的信赖和好评,也为EUDYNA赢得了良好的口碑和声誉。

问答坊 | AI 解惑

2009年电子设计大赛赛前热门元器件pdf上传

本帖最后由 paulhyde 于 2014-9-15 09:42 编辑 https://bbs.eeworld.com.cn/viewthread.php?tid=83424&extra=&frombbs=1 [ 本帖最后由 shuining 于 2009-8-24 09:01 编辑 ]  …

查看全部问答>

TMS320F28xx的硬件设计指南

TMS320F28xx的硬件设计指南…

查看全部问答>

12864液晶模块问题

一样是12864液晶控制模块,12864M和GDM12864C控制方法就不一样了。请问一下还有哪几种液晶控制模块,比如12864J,12864D等等。 是不是12864后面紧跟的字母一样,控制方法就一样呢?…

查看全部问答>

C#短信收发中间件的开发(设计)

基于GSM的短信收发中间件,用.NET平台设计,各位老大有实践经验的说下在.NET平台下的设计步骤(就是关键点在哪个地方)…

查看全部问答>

下面程序给我看看

 在9B96控制LCD的程序中 HWREG(LCD_WR_BASE + GPIO_O_DATA + (LCD_WR_PIN << 2)) = 0;          // WR=0        HWREG(LCD_WR_BASE + GPIO_O_DATA + ...…

查看全部问答>

谁能告诉我怎样实现proteus7.7与keil u Vision2联机啊?

我刚开始学习电子,请问哪位同志能告诉我怎样实现proteus7.7与keil u Vision2联机工作(越详细越好)。谢谢了哈!…

查看全部问答>

平凡的单片机教程,很经典!

本文档是单片机教程,主要讲述89C51单片机,文档从单片机基础入手,逐步深入讲述,并结合大量的实验、实例形式,教授学习者学习单片机学习、开发、下载、设计等内容。         ----------------------------------------- ...…

查看全部问答>

TI 音频指南2012 1Q

本帖最后由 dontium 于 2015-1-23 12:59 编辑 TI的产品库包括,全数字音频组件以及数字和模拟音频解决方案,通过提供高性能及无可比拟的集成度 TI的可编程组件为客户赋予了设计灵活性,可帮助他们以具有竞争力的成本打造出宽泛的功能性和栩栩如生 ...…

查看全部问答>