STM32 CAN总线标识符过滤器难点解析

原创 2016年05月31日 15:12:24
CAN总线是目前应用非常多的一种总线,在汽车电子,航空航天中应用广泛,博主用的是战舰的STM32开发板。CAN的介绍和功能特点就不讲了,书本上网上都有,请大家在阅读本文前了解CAN总线协议的特点和功能。今天博主将和大家共同学习CAN总线标识符过滤器的使用(非常重要!)
      请认真读这段话(来自STM32中文参考手册):在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此,发送者以广播的形式把报文发送给所有的接受者。节点在接收报文时,根据标识符的值,决定软件是否需要该报文;如果需要,就拷贝到SRAM里;如果不需要,报文就丢弃,且无需软件的干预。在,STM32F103ZET6这款芯片中,bxCAN控制器为应用程序提供了14个位宽可变的,可配置的过滤器组(13~0),以便只接受那些软件需要的报文。硬件过滤的做法节省了CPU的开销,否则就必须由软件过滤从而占用一定的CPU开销。每个过滤器组x由2个32位寄存器,CAN_FxR0和
CAN_FxR1组成。

      有些读者看了之后觉得,报文,标识符,过滤器,他们是什么?他们有什么联系?有这些问题说明你就要懂了。。别急,听我慢慢道来~~~
      过滤器:过滤器在接收时使用,在发送时不需配置过滤器!过滤器会根据标识符而决定节点要不要发送者发过来的报文。通俗一点:是我想要的,我就要;不是我想要的,我就不要。

      报文:报文(MESSAGE)是网络中交换与传输的数据单元,即站点一次性要发送的数据块。报文包含了将要发送的完整的数据信息,期长短不一致,长度不限且可变。注意(这里才是重点!):报文也是网络传输的单位,传输过程中会不断的封装成分组,包,帧来传输,封装的方式就是加一些信息段,那些就是报文头以一定格式组织起来的数据。

      这里补充一点:CAN总线上的报文传输由4个不同的帧类型表示和控制。1、数据帧 2、远程帧 3、错误帧 4、过载帧。接着看下文:
  • 在报文传输时,不同帧有不同的而传输结构(例如数据帧有7个段构成,帧起始,仲裁段,控制端,数据段,CRC段,ACK段,帧结束),只有严格按照该帧的结构进行帧的传输,才能被节点正确的接收和发送。
  • 另外,在数据帧和遥控帧有标准格式扩展格式两种格式,标准格式有11位的标识符,扩展格式有29位的标识符。如下图:


      标识符:标识符主要包括如下,也可以理解为仅包含ID号,但是在这里下面这些都是要包含的:
  •       1个32位过滤器,包括:STDID[10:0]、EXTID[17:0]、IDE和RTR位
  •       2个16位过滤器,包括:STDID[10:0]、IDE、RTR和EXTID[17:15]位

      例如在数据帧和远程帧中,标识符都是包含在里面的,而数据帧和远程帧是报文的一种表示类型。故,发送端发帧数据给接收端后,接收端根据标识符来进行筛选,决定取舍。

      看完上面三个定义,再回头看上面那段话应该没有问题了吧~

      下面重点介绍过滤器:

      STM32提供两种过滤器模式供用户选择,屏蔽位模式(标识符屏蔽位模式)和标识符列表模式。上图:


屏蔽位模式

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

标识符列表模式

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

      标识符列表模式很好理解:就是指过滤器寄存器的所有位都用来过滤,也就是说,发送端发送的标识符所有的位必须和接收端的过滤器的寄存器定义的一模一样,有一个为不同,都拒收次消息!

      而屏蔽位模式稍微复杂一点,但也好理解:举个简单的例子,我们过滤器组0工作在:1个32位过滤器-标识符屏蔽模式,然后设置CAN_F0R1=0XFFFF0000,CAN_F0R2=0XFF00FF00。其中,存放到CAN_F0R1的值是期望收到的ID,即我们希望收到的映像(STID+EXTID+IDE+RTR)最好是:0XFFFF0000。而0XFF00FF00就是设置我们需要必须关心的ID,表示收到的映像,其位[31:24]和位[15:8]这16个位,必须和CAN_F0R1中对应的位一模一样,而另外的16个位则不必关心,可以一样,也可以不一样,都认为是正确的ID,即收到的映像必须是0XFFxx00xx,才算是正确的(x表示不关心)。也就是说,屏蔽位(CAN_F0R2)中的数值:

      1:必须匹配,到来的标识符位必须和过滤器对应的标识符寄存器位相一致。

      0:不关心,可以一样,也可以不一样,都认为是正确的ID

因此:

      为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式

      为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式

注意:应用程序不用的过滤器组,应该保持在禁用模式。(这个很好理解)
最后关于CAN的发送和接收流程,这个可以看看手册上的流程图,讲的很详细。

关于CAN总线网上有很多优秀的文章,读者可以去多浏览。由于博主水平有限,还请各位读者指正,共同进步!

版权声明:本文为博主原创文章,欢迎大家转载,转载请注明出处!谢谢!

STM32之CAN ---CAN ID过滤器分析

1 前言         在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此,发送者以广播的形式把报文发送给所有的接收者。节点在接收报文时,根据标识符(CAN ID)的值决定软...

再谈STM32的CAN过滤器-bxCAN的过滤器的4种工作模式以及使用方法总结

1. 前言bxCAN是STM32系列最稳定的IP核之一,无论有哪个新型号出来,这个IP核基本未变,可见这个IP核的设计是相当成熟的。本文所讲述的内容属于这个IP核的一部分,掌握了本文所讲内容,就可以很...

STM32CAN过滤器的作用

STM32普通型芯片的CAN有14组过滤器组(互联型有28组过滤器组),用以对接收到的帧进行过滤。每组过滤器包括了2个可配置的32位寄存器:CAN_FxR0和CAN_FxR1。对于过滤器组,可以将其配...
  • bmbm546
  • bmbm546
  • 2013年12月17日 14:56
  • 1743

STM32 CAN 过滤器、滤波屏蔽器配置总结

下面内容为转载: 一、在STM32互联型产品中,CAN1和CAN2分享28个过滤器组,其它STM32F103xx系列产品中有14个过滤器组,用以对接收到的帧进行过滤。 1、过滤器组     每组...

STM32 CAN总线说明

简介: CAN是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。由德国电气商博世公司在1986年率先提出。此后,CAN通过ISO11898及...

CAN控制器-配置过滤器

首先简单介绍一下CAN总线,关于CAN总线是谁发明的,CAN总线的历史,CAN总线的发展,CAN总线的应用场合,这些,通通不说。这里只是以我个人理解,简单说说CAN通信。CAN总线的端点没有地址(除非...
  • mao0514
  • mao0514
  • 2015年09月17日 10:18
  • 2666

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

STM32CubeMX生成基于HAL库的Can收发配置

HAL库 的应该用比较新潮,经常找不到资料。今天说说,在CAN开发中的应用。 一,发送。 static HAL_StatusTypeDef Can_MsgSend(uint32_t ID,uint8_...

stm32 can的屏蔽位模式

 stm32 can的屏蔽位模式: 一个是标识符寄存器,一个是屏蔽位寄存器。 凡是屏蔽位寄存器里为1的位所对应的标识符寄存器的位,这些位是必须匹配的,也就是说,你接受到的Message里面的...

CAN报文格式

CAN协议的报文传输过程中有:数据帧、远程帧、错误帧、过载帧和帧间隔。         1.数据帧:用于发送节点向接收节点传送数据的帧。         2.远程帧:用于接收节点向具有相同ID的发送节...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STM32 CAN总线标识符过滤器难点解析
举报原因:
原因补充:

(最多只允许输入30个字)