CAN扩展帧过滤器设置

2023-05-16

纪要

CAN(Controller Area Network)总线是一种广泛应用于工业控制和汽车电子领域的串行通信协议。在CAN总线中,节点间通过CAN总线发送和接收消息。每个CAN帧包含一个标准或扩展标识符(ID)和数据负载。

CAN总线帧过滤器是一个硬件组件,可用于过滤传输到节点的CAN帧。帧过滤器允许节点只处理其所需的CAN帧,从而降低总线负载和系统处理开销。帧过滤器可以配置为基于标准或扩展ID进行过滤,也可以使用ID掩码匹配特定的CAN帧。

实际应用中基本都用扩展帧,因为标准帧的11bit id实在是太捉急了,放不了什么内容
在配置了CAN过滤器后,发现指定的一些帧收不到但是总线上收到了这些帧

问题描述

目前所采用的为CAN的扩展帧模式,需要过滤出类似0x04FB2028这种xxFBxxxx的报文,但是发现一个问题FB16的报文被接收到了,但是FB20这种报文被滤除了,这时候我就怀疑了是Filter配置错误

    CAN_FilterInitStructure.Filter_Num            = CAN_FILTERNUM5;
    CAN_FilterInitStructure.Filter_Mode           = CAN_Filter_IdMaskMode;
    CAN_FilterInitStructure.Filter_Scale          = CAN_Filter_32bitScale;
    CAN_FilterInitStructure.Filter_HighId         = CAN_FILTER_EXTID_H(0x04FB2028);
    CAN_FilterInitStructure.Filter_LowId          = CAN_FILTER_EXTID_L(0x04FB2028);
    CAN_FilterInitStructure.FilterMask_HighId     = 0x00FF;
    CAN_FilterInitStructure.FilterMask_LowId      = 0x0000;
    CAN_FilterInitStructure.Filter_FIFOAssignment = CAN_FIFO0;
    CAN_FilterInitStructure.Filter_Act            = ENABLE;
    CAN1_InitFilter(&CAN_FilterInitStructure);

#define CAN_FILTER_EXTID_H(EXTID)   ((uint16_t)(((EXTID) >> 13) & 0xFFFF))
#define CAN_FILTER_EXTID_L(EXTID)   ((uint16_t)(((uint32_t)(EXTID) << 3U) | ((uint8_t)CAN_ID_EXT)))

问题解决

首先我们来看下扩展帧的报文格式
在这里插入图片描述
CAN扩展帧ID范围为0x000000000x1FFFFFFF是因为最后3位是 IDE RTR 0其实可用部分只有29bit
配置过滤器也是如此,下面是过滤器的寄存器内容在这里插入图片描述
配置过滤器有两种模式精准过滤(filter list mode)规则过滤(Mask mode),根据上面所述我们需要的是 Mask mode。
看上表中filter idfilter mask每一位都是对齐的,并且开始的 3bits 对我们而言是无意义的,所以我们上面对filter id配置了偏移,下面对应的对于filter mask 也需要做相同的操作。

    CAN_FilterInitStructure.Filter_Num            = CAN_FILTERNUM3;
    CAN_FilterInitStructure.Filter_Mode           = CAN_Filter_IdMaskMode;
    CAN_FilterInitStructure.Filter_Scale          = CAN_Filter_32bitScale;
    CAN_FilterInitStructure.Filter_HighId         = CAN_FILTER_EXTID_H(0x04EB2028);
    CAN_FilterInitStructure.Filter_LowId          = CAN_FILTER_EXTID_L(0x04EB2028);
    CAN_FilterInitStructure.FilterMask_HighId     = CAN_FILTER_EXTID_H(0x00FF0000);
    CAN_FilterInitStructure.FilterMask_LowId      = CAN_FILTER_EXTID_L(0x00FF0000);
    CAN_FilterInitStructure.Filter_FIFOAssignment = CAN_FIFO0;
    CAN_FilterInitStructure.Filter_Act            = ENABLE;
    CAN1_InitFilter(&CAN_FilterInitStructure);

如此配置后CAN可以正确过滤出 xxFBxxxx的报文了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CAN扩展帧过滤器设置 的相关文章

  • 学习CANopen --- [9] CAN总线的状态检查

    本文讲述如何判断CAN总线是否存在以及是否bus off xff0c 以vcan0进行讲解 xff0c vcan0是虚拟的CAN接口 xff0c 可以把它看做一个软件CAN适配器 xff08 区别于硬件CAN适配器 xff0c 如PeakC
  • STM32 CAN总线说明

    简介 xff1a CAN是Controller Area Network 的缩写 xff08 以下称为CAN xff09 xff0c 是ISO国际标准化的串行通信协议 由德国电气商博世公司在1986年率先提出 此后 xff0c CAN通过I
  • 关于STM32 CAN 滤波器设置的记录

    滤波模式有以下两种 xff1a 屏蔽位模式 标识符列表模式 过滤器的位宽 xff1a 16位过滤器 32位过滤器 下面记录一下我做过测试的代码 代码说明 xff1a 这是CAN2的滤波器 xff0c stm32f107的两组CAN滤波器是共
  • CAN扩展帧详解

    寻址方式
  • 自动驾驶之——CAN总线简介

    自动驾驶技术之 无人驾驶中的CAN总线 CAN 是Controller AreaNetwork 的缩写 xff0c 中文名为控制器局域网络 xff0c 是ISO国际标准化的串行通信协议 xff0c 是一种用于实时应用的串行通讯协议总线 xf
  • CAN通信矩阵的理解(CAN报文信号的属性)

    CAN通信矩阵 1 CAN通信矩阵是什么 CAN通信矩阵 xff08 CAN Communication Matrix xff09 通常由整车厂完成定义 xff0c 车辆网络中的各个节点需要遵循该通讯矩阵才能完成信息的交互和共享 我们知道C
  • CAN通信讲解(2)——数据帧和遥控帧

    本文注意参考了 CAN入门书 xff0c 源于此书图片不再特殊标注 目录 2 1 帧的种类2 2 数据帧和遥控帧2 3 仲裁过程2 4 各段详解2 5 小结 数据帧和遥控帧格式类似 xff0c 放在一起串讲 2 1 帧的种类 CAN协议帧分
  • CAN通信讲解(3)——错误据帧

    本文注意参考了 CAN入门书 xff0c 源于此书图片不再特殊标注 目录 3 1 总线错误的种类3 1 1 位错误3 1 2 ACK错误3 1 3 填充错误3 1 4 CRC错误3 1 5 格式错误 3 2 错误帧结构3 3 错误状态3 3
  • 图解CAN总线数据的组成和帧格式

    CAN 是Controller Area Network 的缩写 xff08 以下称为CAN xff09 xff0c 是ISO国际标准化的串行通信协议 在汽车产业中 xff0c 出于对安全性 舒适性 方便性 低公害 低成本的要求 xff0c
  • CAN总线电平(隐性与显性)

    nbsp nbsp nbsp nbsp CAN2 0B规范定义了两种互补的逻辑数值 显性和隐性 同时传送显性和隐性位时 总线呈现显性状态 同时传送显性状态位时 总线呈现显性状态 同时传送隐性状态位时 总线呈现隐性状态 显性数值表示逻辑0 隐
  • c#通过串口及CAN模块实现上位及下位机通讯

    目录 前言 一 串口 CAN总线 二 使用步骤 1 RS232串口通讯 xff08 指令下发与接收 xff09 2 CAN总线通讯 总结 前言 学习及工作中我们经常会遇到上位机与下位机通讯等工作 xff0c 结合场景使用不同的通讯方式实时通
  • CAN总线通信协议详讲

    CAN简介 CAN是Controller Area Network 的缩写 xff08 以下称为CAN xff09 xff0c 是ISO国际标准化的串行通信协议 由德国电气商博世公司在1986 年率先提出 此后 xff0c CAN 通过IS
  • CAN扩展帧过滤器设置

    纪要 CAN xff08 Controller Area Network xff09 总线是一种广泛应用于工业控制和汽车电子领域的串行通信协议 在CAN总线中 xff0c 节点间通过CAN总线发送和接收消息 每个CAN帧包含一个标准或扩展标
  • CAN为什么会发送失败

    CAN总线调试过程中出现报文发送失败 xff0c 很多工程师都对此只知其一不知其二 xff0c 这里就CAN报文发送失败的问题我们来做一次探讨 在了解CAN报文为什么会发送失败之前我们先看看一条正确的CAN报文到底应该是怎么样的 xff0c
  • CAN接口芯片MCP2515的波特率和滤波器设置问题

    配置波特率代码 MCP2515ByteWrite CNF1 3 MCP2515ByteWrite CNF2 0x80 PHSEG1 3TQ PRSEG 1TQ MCP2515ByteWrite CNF3 PHSEG2 3TQ 功能 波特率的
  • 从零读懂CAN总线(上)

    概要 上世纪八十年代以来 汽车ECU越来越多 如ABS 电控门窗 电子燃油喷射装置 如果仍然采用常规的点对点布线方式 即电线一段与开关相接 另一端与用电设备相通 将会导致车上电线数目的急剧增加 从而带来线束的冗余及维修成本的提高 这就对汽车
  • 各种通信接口的简单对比

    对比表 同步方式与异步方式的主要区别在于 是否传输时钟信号 只要是通訊前雙方需要設定相同波特率的 都是異步傳輸方式 异步传输 Asynchronous Transmission 每次异步传输的信息都以一个起始位开头 它通知接收方数据已经到达
  • CAN 为什么需要收发器

    在RTL代码中集成了两个CAN node 打算直接连接将两个node的Rx和Tx对接 发现两个CAN Node无法通信 询问技术支持后才知道必须要收发器 那为什么一定需要收发器呢 除了转换单端的CAN信号用于不同的传输 收发器也会将CANT
  • Ubuntu 周立功CAN分析仪 USBCAN-II 驱动

    首先从官网https www zlg cn Index Search search key linux的下载资料界面下载 Linux驱动 USBCAN I I II II 2A I MINI安装驱动 USBCAN II新版驱动基于libus
  • STM32F407 CAN1 CAN2

    注意CAN1可以单独使用 CAN2要开启CAN1时钟才能使用 u8 CAN1 Mode Init u8 mode GPIO InitTypeDef GPIO InitStructure CAN InitTypeDef CAN InitStr

随机推荐

  • jetson nano 基础设置

    关闭图像界面 span class token function sudo span systemctl set default multi user target 开启图像界面 span class token function sudo
  • Android JNI Java/C++互相调用

    一 xff0c Java 调用 C 1 xff0c 首先我们创建一个文件名字叫做 xff0c JNI 其实你不创建也行 看自己 public class JNI 加载本地C语言文件库 库名字为你写的C语言文件名 static System
  • STM32串口空闲中断,中断标志位无法清除

    本节目录 今天想使用STM32的串口空闲中断作接收 xff0c 调了1个小时 xff0c 发现串口空闲中断无法被清除 xff0c 网上搜索半天发现 xff0c 能用清除的库函数清除该中断 我又回头看了一下手册 果真如此 xff0c 问题已解
  • CMake系列(八) CMake 多级目录

    CMake系列 xff08 八 xff09 CMake 多级目录 文章目录 CMake系列 xff08 八 xff09 CMake 多级目录目录结构结构说明调用关系 源文件CMakeLists txt最外层CMakeListsmain的CM
  • 【全国一等奖】F题:智能送药小车,2021年全国大学生电子设竞赛

    01 前 言 大家好 xff0c 我是张巧龙 xff0c 今天给大家带来关于21年F题的分享 xff1a 智能送药小车 xff0c 出了这个题目之后 xff0c 咋一看 xff0c 好像比较简单 不过大家慢慢做 xff0c 越往后做越发现
  • ZYNQ系列(十二)linux的DMA使用

    ZYNQ系列 xff08 十二 xff09 linux的DMA使用 文章目录 ZYNQ系列 xff08 十二 xff09 linux的DMA使用前言开发环境准备工作petalinux工程建立建立工程配置内核1 配置DMA2 配置CMA 修改
  • gtest学习笔记(四)gtest自带的sample3---Test Fixture减少测试冗余

    文章目录 前言源码学习utest语法运行 前言 第一章中已经编译出自带的sample例子 xff0c 在build googletest目录下可以看到sample的各种例子的可执行程序 Google Test 附带了10个单元测试用例 xf
  • VSCODE 系列(六)使用Plantuml插件制作UML类图

    文章目录 前言下载和安装支持文件格式支持绘制类型导出 语法申报要素UML类图关系参考例子参考 前言 软件设计中 xff0c 有好几种图需要画 xff0c 比如流程图 类图 组件图等 xff0c 我知道大部分人画流程图一般都会用微软的visi
  • MDK配色方案更改

    文章目录 WIN10更改护眼背景MDK软件配色方案更改 设置常用关键字参考 WIN10更改护眼背景 按windows 43 R快捷键 xff0c xff0c 打开运行 xff0c 在弹出来的输入框中写上regedit xff0c 点确定或回
  • VSCODE 系列(七)格式化工具clang-format

    文章目录 一 VS Code中使用生成 clang format文件VS Code设置 参考 一 VS Code中使用 VS Code 中自带clang format exe 生成 clang format文件 使用命令 span clas
  • MDK的格式化代码工具及添加快捷方式

    文章目录 Astyle介绍插件安装参数设置格式化整个工程参数说明快捷键设置参考 Astyle介绍 Astyle 即Artistic Style xff0c 是一个可用于C C 43 43 C 43 43 CLI Objective C C
  • cURL命令详解

    cURL是什么 cURL是用于数据传输的命令行工具 xff0c 支持多种传输协议 xff0c 包括HTTP HTTPS SCP FTP SFTP TELNET FILE SMTP POP3等等 可以使用cURL进行HTTP HTTPS请求
  • 关于单片机栈空间的总结

    1 如果定义成全局数组 xff0c 则此数组就会自动初始化为0 但如果定义成局部数组 xff0c 则必须要先初始化 2 局部变量一定要初始化 局部变量初始化 是指在使用这个局部变量前 xff0c 要对其进行初始化 这是因为局部变量是从内存堆
  • rplidar使用

    rplidar的使用 新上手的激光雷达 xff0c 第一次使用 根据网上的教程 xff0c 先搭建环境跑起来 安装rviz sudo apt get install ros kinetic rviz 通过apt get安装rviz xff0
  • 全国一等奖,H题:用电器分析识别装置

    大家好 xff0c 我是张巧龙 xff0c 今天继续给大家带来电赛题目 xff1a 用电器分析识别装置 01 视频展示 全国一等奖 21年电赛H题 xff1a 用电器分析识别装置 02 方案设计 2 1 系统总体方案 通过对赛题的仔细分析研
  • jetson-tx2-nx用户空间无法导出gpio

    1 想要导出gpio xff0c 结果如下 xff0c 导出失败 xff0c 显示gpio忙 2 查看占用状态 xff0c 发现这个脚被用成了其他功能 3 如果没有第二步的那个目录 xff0c 则执行以下语句 xff0c mount t d
  • cmake添加已编译的.a静态库

    在main下新建一个lib文件夹 将编译好的xxx a放入lib文件夹 打开main下的CMakeLists txt 添加下面两条代码 add prebuilt library prebuilt 34 lib xxx a 34 libm t
  • Android设备上直接运行C/C++程序,无需ROOT!!!

    在Android开发过程中难免和JNI NDK打交道做混合开发 xff0c 按一般方式当交叉编译完成得到so库后 xff0c 我们将so库集成到Android项目里 xff0c 打包成apk安装到手机上验证运行效果 但当我们想快速在手机上验
  • ecplice在导入现有工程时提示:某些项目因位于工作空间目录中而被隐藏

    无论是写java还是Android xff0c ecplice都是很不错的选择 xff0c 但是有时在导入工程时提示 xff1a 某些项目因位于工作空间目录中而被隐藏 xff0c 项目 和 下一步 为不可选 此类原因无非有二 xff08 1
  • CAN扩展帧过滤器设置

    纪要 CAN xff08 Controller Area Network xff09 总线是一种广泛应用于工业控制和汽车电子领域的串行通信协议 在CAN总线中 xff0c 节点间通过CAN总线发送和接收消息 每个CAN帧包含一个标准或扩展标