STM32 CAN的验收筛选器

embedded/2024/10/18 18:27:35/

STM32 CAN的验收筛选器

简介

  • CAN外设的验收筛选器,一共有28个筛选器组,每个筛选器组有2个寄存器, CAN1和CAN2共用的筛选器的。

  • 在 CAN 协议中,消息的标识符与节点地址无关,但与消息内容有关。因此,发送节点将报文广播给所有接收器时,接收节点会根据报文标识符的值来确定软件是否需要该消息,为了简化软件的工作, STM32的CAN外设接收报文前会先使用验收筛选器检查,只接收需要的报文到FIFO中。

  • 筛选器工作的时候,可以调整筛选ID的长度及过滤模式。

  • 根据筛选ID长度来分类有有以下两种:

    • 检查 STDID[10:0]、 EXTID[17:0]、 IDE 和 RTR 位,一共31位。
    • 检查STDID[10:0]、 RTR、 IDE 和 EXTID[17:15],一共16位。
  • 而根据过滤的方法分为以下两种模式:

    • 标识符列表模式,它把要接收报文的ID列成一个表,要求报文ID与列表中的某一个标识符完全相同才可以接收,可以理解为白名单管理。
    • 掩码模式,它把可接收报文ID的某几位作为列表,这几位被称为掩码,可以把它理解成关键字搜索,只要掩码(关键字)相同,就符合要求,报文就会被保存到接收FIFO。

模式

  • 每组筛选器包含2个32位的寄存器,分别为CAN_FxR1和CAN_FxR2,它们用来存储要筛选的ID或掩码,各个寄存器位代表的意义与图中两个寄存器下面“映射”的一栏一致,各个模式的说明如下:
模式说明
32位掩码模式CAN_FxR1存储ID, CAN_FxR2存储哪个位必须要与CAN_FxR1中的ID一致 , 2个寄存器表示1组掩码。
32位标识符模式CAN_FxR1和CAN_FxR2各存储1个ID, 2个寄存器表示2个筛选的ID
16位掩码模式CAN_FxR1高16位存储ID, 低16位存储哪个位必须要与高16位的ID一致; CAN_FxR2高16位存储ID, 低16位存储哪个位必须要与高16位的ID一致 2个寄存器表示2组掩码。
16位标识符模式CAN_FxR1和CAN_FxR2各存储2个ID, 2个寄存器表示4个筛选的ID

筛选器设置实例

ID1011101
掩码1110010
筛选的ID101xx0x
  • 如在掩码模式时,第一个寄存器存储要筛选的ID,第二个寄存器存储掩码,掩码为1的部分表示该位必须与ID中的内容一致,筛选的结果为表中第三行的ID值,它是一组包含多个的ID值,其中x表示该位可以为1可以为0。

  • 如工作在标识符模式时, 2个寄存器存储的都是要筛选的ID,它只包含2个要筛选的ID值(32位模式时)。

  • 如果使能了筛选器,且报文的ID与所有筛选器的配置都不匹配, CAN外设会丢弃该报文,不存入接收FIFO。


http://www.ppmy.cn/embedded/8970.html

相关文章

【QT学习】8.qt事件处理机制,事件过滤器,自定义事件

1.qt事件处理机制 事件处理: 当用户移动鼠标的时候 ,创建一个 鼠标移动事件对象 然后把这个对象放到 事件队列里面去,事件管理器 从队列中 取出事件,然后 调用其对应的事件处理函数。 多态机制: &#x…

Android中的Zygote进程介绍

在Android系统中,Zygote是一个特殊的进程,主要负责孵化(fork)新的应用进程,从而加速应用的启动过程。Zygote进程是系统启动过程中创建的第一个进程,它会在系统启动时被初始化并一直运行在后台。 以下是Zyg…

信息流广告大行其是,微博回望“原生”的初心

摘要:有流量的地方,就当有原生信息流广告 信息流广告,自2006年Facebook推出后就迅速火遍全球数字营销界,被誉为实现了广告主、用户、媒体平台三赢。特别是随着OCPM/OCPX大放异彩,信息流广告几乎成为广告主的必选项&…

typora的基本使用方法

typora的基本使用方法 这是一份秘籍 markdown语法官方 快捷键和基本使用技巧 1.标题级数 快捷键:Ctrl 1~6 一级标题:Ctrl1 相同形式: #空格内容 第二种跳转 使用id名字 二级标题:Ctrl2 相同形式:##空格内容 以此…

网络协议——OSPF(开放式最短路径优先)详解

1.什么是OSPF 开放式最短路径优先OSPF 是一种动态的高度可靠和高度可扩展的路由协议,用于构建大型网络中的动态路由系统 2. OSPF的协议号为:89 3. OSPF的特点: OSPF是链路状态协议使用了区域概念:减少路由选择协议对路由器CPU,…

C++修炼之路之list模拟实现--C++中的双向循环链表

目录 引言 一:STL源代码中关于list的成员变量的介绍 二:模拟实现list 1.基本结构 2.普通迭代器 const迭代器的结合 3.构造拷贝构造析构赋值重载 清空 4.inserterase头尾插入删除 5.打印不同数据类型的数据《使用模板加容器来完成》 三&#xf…

【动态规划】dp 路径问题(不同路径、路径最小和、地下城游戏...)

文章目录 1. 前言 - 理解动态规划算法1.5 关于dp路径问题2. 例题2.1_不同路径Warning. 关于状态表示 3. 算法题3.1_不同路径II3.2_珠宝的最高价值3.3_下降路径最小和3.4_最小路径和3.5_地下城游戏关于状态表示的两种选法: 1. 前言 - 理解动态规划算法 关于 动态规划…

如何进行JVM的调优

进行Java虚拟机(JVM)的调优是一项关键的工作,旨在优化JVM的性能,提高应用程序的响应速度和吞吐量,并确保系统的稳定运行。JVM调优通常涉及到调整堆大小、选择合适的垃圾收集器、监控运行时性能以及分析内存泄漏等方面。…