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

原创 2016年05月31日 15:12:24
  • 4910
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的发送和接收流程,这个可以看看手册上的流程图,讲的很详细。

STM32 CAN总线标识符过滤器难点解析的更多相关文章

  1. 关于STM32的CAN的过滤器

    关于STM32的CAN的过滤器STM32普通型芯片的CAN有14组过滤器组,互联型有28组过滤器组.一般我们用的都是普通型的,所以在本文中可以说STM32有14组过滤器组.根据配置,每1组过滤器组可以 ...

  2. .NET_RSA加密全接触(重、难点解析)

    .NET_RSA加密全接触(重.难点解析) .NET Framework提供了两个类供我们使用RSA算法,分别是:用于加密数据的RSACryptoServiceProvider和用于数字签名的DSAC ...

  3. STM32——CAN总线过滤器设置

    STM32CAN控制器每个筛选器组由两个32位的寄存器组成. 根据所需位宽的不同,各个筛选器可配置成16位或32位模式(如下图,当FSCx=1为32位模式,FSCx=0时为16位模式).同时,筛选器的 ...

  4. 【转】STM32 FSMC总线深入研究

    原文:http://group.chinaaet.com/116/48112 由于CPU与FPGA通信的需要,以及对8080总线的熟悉,首选采用了STM32的FSMC总线,作为片间通信接口.FSMC能 ...

  5. STM32——CAN总线波特率和位时序详解

    本人用的单片机是STM32F407,其它型号的单片机类似,可做参考! 一.标准CAN协议位时序概念 由于CAN属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点间 ...

  6. 笔记:stm32 printf重定向到UART疑点解析

    在调试过程中往往需要通过打印来看系统运行状态:在STM32平台上,打印重定向有多种实现方案:其一是编译时使用keil自带的MacroLIB,据说这个库对一些C语言基础设施做了新的实现,代码结构更加紧凑 ...

  7. 中间件(WAS、WMQ)运维 9个常见难点解析

    本文由社区中间件达人wangxuefeng266.ayy216226分享整理,包括WAS.WMQ在安装.巡检.监控.优化过程中的常见难点. 安装 1.was 负载均衡的机制的粘连性,was负载均衡异常 ...

  8. Django模版中的过滤器详细解析 Django filter大全

    就象本章前面提到的一样,模板过滤器是在变量被显示前修改它的值的一个简单方法. 过滤器看起来是这样的: {{ name|lower }} 显示的内容是变量 {{ name }} 被过滤器 lower 处 ...

  9. 百度DMA+小度App的蓝牙语音解决方案技术难点解析

    前记   你平时在商场看到的语音助手,看起来非常的简单,其实,这个小小语音助手的背后,是一个非常的复杂的技术支撑.从前端到后端的技术依次是:前端语音降噪技术,高效的音频编解码技术,蓝牙双模技术,DMA ...

随机推荐

  1. 为什么main方法是public static void?

    Main方法是我们学习Java编程语言时知道的第一个方法,你是否曾经想过为什么main方法是public.static.void的.当然,很多人首先学的是C和C++,但是在Java中main方法与前者 ...

  2. 转:PHPStorm+XDebug进行调试图文教程

    原文:PHPStorm+XDebug进行调试图文教程 一.XDebug安装配置 (1)下载XDebug下载地址:http://www.xdebug.org/必须下载跟机器上安装的php匹配的版本才行. ...

  3. WOSA/XFS PTR FORM—基础知识

    目录 一.XFS PTR 二.XFS PTR FORM 三.Form.子Form.字段.框架.表单和媒介的定义 正文 一.XFS PTR Class Name PTR Class Identifier ...

  4. 1.print()与input()

    hello world必备->print函数 print(): 作用: 打印函数,打印数据到屏幕中 参数列表: print(value, ..., sep=' ', end='\n', file ...

  5. sql server 日期时间与字符串的转换

    一.sql server日期时间函数Sql Server中的日期与时间函数 1.  当前系统日期.时间     select getdate()  2. dateadd  在向指定日期加上一段时间的基 ...

  6. INNODB insert buffer 简单分析

    在mysql5.1 之前称为Insert Buffer, 优化2级非唯一索引上插入操作的读IO, 在5.5之后改名为Change Buffer, 功能也扩展为2级非唯一索引上的插入.删除.更新.pur ...

  7. sqlserver性能调优中的逻辑读,物理读,预读是什么意思

    表 'T_EPZ_INOUT_ENTRY_DETAIL'.扫描计数 1,逻辑读 4825 次,物理读 6 次,预读 19672 次.SQL SERVER 数据库引擎当遇到一个查询语句时,SQL SER ...

  8. jQuery validate插件,自动验证无效的原因及解决方法归纳

    最近在使用validate插件进行验证的时候,出现有的控件在个别事件(比如keydown.foucs.onchange等)下不能自动验证,而有的控件却又正常,当时觉得很诡异,后来仔细测试查看,归纳原因 ...

  9. ASA 用TFTP 备份配置方法

    一种方法是用ASDM,在菜单样哪项里有一个backup,保存为一个压缩文件rar,恢复也是用ASDM.另一种是用TFTP SERVER 来做,电脑用网线接上ASA,还要把cisco TFTP SERV ...

  10. chmod chown llinux文件及目录的权限介绍

    linux 文件或目录的读.写.执行权限说明: chmod :设置文件或目录权限. u:所有者 g:所在组 o:其他组 a:所有人(u.g.o的总和) chmod  -R  文件1/文件2…..    ...