STM32 HAL库 CAN过滤器配置
之前在STM32 f407 CAN收发 基于HAL库和Cubemx配置_stm32f407can收发程序-CSDN博客这篇博文里写了一下配置CAN收发的方法,当时由于并没有使用过滤器的现实需求,所以就也没仔细研究。现在工作中确实需要用到过滤器了,有些项目中控制器和发动机ECU是连接在一路总线的,而发动机ECU会产生大量的报文,这就不得不配置过滤器了。
先放上配置过滤器的代码,然后再分析原理:
CAN_FilterTypeDef CAN2_filter1; // Define the filter structure
// parameter of the filter
CAN2_filter1.FilterBank = 14; /* The filter number can be set from 0 to 27depending on the setting of SlaveStartFilterBank */
CAN2_filter1.FilterMode = CAN_FILTERMODE_IDMASK; //
CAN2_filter1.FilterScale = CAN_FILTERSCALE_32BIT; //
CAN2_filter1.FilterIdHigh = (0x18F60000 >> 13) & 0xFFFF;
CAN2_filter1.FilterIdLow = (0x18F60000 << 3) & 0xFFF8;
CAN2_filter1.FilterMaskIdHigh = (0xFFFF0000 >> 13) & 0xFFFF;
CAN2_filter1.FilterMaskIdLow = (0xFFFF0000 << 3) & 0xFFF8;
CAN2_filter1.FilterFIFOAssignment = CAN_RX_FIFO1; // FIFO1 for CAN2
CAN2_filter1.FilterActivation = ENABLE; //
CAN2_filter1.SlaveStartFilterBank = 13;
// Configure CAN2 filter
while(HAL_CAN_ConfigFilter(&hcan2, &CAN2_filter1) != HAL_OK);
首先,CAN1_filter1.SlaveStartFilterBank这个参数怎么设置?

比如上面的CAN2_filter1.SlaveStartFilterBank = 13,就是把0~12 号过滤器给 CAN1,13~27 号过滤器给 CAN2,然后CAN2_filter1.FilterBank就是在13~27中选出来的数字
小声BB:我觉得把SlaveStartFilterBank放在FilterBank之前配置其实更合理也更易于理解,因为只有SlaveStartFilterBank配置好之后才能确定FilterBank的可选范围。但目前好像所有的手册和教程都是先配置FilterBank
然后就是最重要的四个参数:

这张表很好的概括了设置方法:

要看懂这张表,首先要明白掩码的意义。放张图,不细说:

然后必须要明白,标准ID是11位,扩展ID是29位!

所以上面那张大图中上面那两块的STID实际上代表的是扩展ID的高11位!这是这张广泛流传的图很caodan的一点,非常容易让人产生困惑!
至于IDE,RTR,不用管,设置为0就行了。其他的地方都比较好理解了,下面直接举例:
例1:32位掩码模式,接收0x18F6开头的扩展ID
CAN2_filter1.FilterMode = CAN_FILTERMODE_IDMASK; // CAN2_filter1.FilterScale = CAN_FILTERSCALE_32BIT; // CAN2_filter1.FilterIdHigh = (0x18F60000 >> 13) & 0xFFFF;CAN2_filter1.FilterIdLow = (0x18F60000 << 3) & 0xFFF8;CAN2_filter1.FilterMaskIdHigh = (0xFFFF0000 >> 13) & 0xFFFF; CAN2_filter1.FilterMaskIdLow = (0xFFFF0000 << 3) & 0xFFF8;
FilterIdHigh储存ID的高16位,往右移13位就是去掉了13位的低位!FilterIdLow储存低13位,往左移3位是给“IDE,RTR,0”让位置,以及&0xFFF8,也是为了空出“IDE,RTR,0”的位置!
例2:16位列表模式,接受0x0F0,0x0F1,0x0F2这三个ID
CAN1_filter1.FilterMode = CAN_FILTERMODE_IDLIST; // CAN1_filter1.FilterScale = CAN_FILTERSCALE_16BIT; // CAN1_filter1.FilterIdHigh = 0x0F0 << 5; // CAN1_filter1.FilterIdLow = 0x0F1 << 5; // CAN1_filter1.FilterMaskIdHigh = 0x0F2 << 5; // CAN1_filter1.FilterMaskIdLow = 0x0000;
多组过滤器如何配置?
多写几组多调用几次HAL_CAN_ConfigFilter,记得SlaveStartFilterBank要一致,FilterBank要不同!
相关文章:
STM32 HAL库 CAN过滤器配置
之前在STM32 f407 CAN收发 基于HAL库和Cubemx配置_stm32f407can收发程序-CSDN博客这篇博文里写了一下配置CAN收发的方法,当时由于并没有使用过滤器的现实需求,所以就也没仔细研究。现在工作中确实需要用到过滤器了,有些项目中控制器和发动机E…...
【前端面试题】Vu3常见的面试题
1.Vue3与 Vue2的核心区别有哪些? 响应式系统 : Vue2:通过Object.defineProperty 实现响应式。这种方式在处理对象属性的添加和删除时存在局限性,且无法直接监控数组的变化 ;Vue3:采用Proxy 实现响应式&…...
【数据分享】2001-2024年我国逐年植被净初级生产力(NPP)数据
植被净初级生产力(Net Primary Productivity,NPP)是生态学中的一个重要概念,表示单位面积植被在特定时间内吸收的净光合有机物,是衡量生态系统中植物通过光合作用所产生的有机物质减去植物呼吸作用消耗的有机物质的量&…...
java-正则表达式
一、正则表达式能干什么? ✅ 验证格式:手机号、邮箱、日期✅ 提取数据:从日志/文本中抓取关键信息✅ 替换文本:批量修改字符串内容 二、Java正则核心API Java中用 java.util.regex 包的两个类: Pattern:…...
正则表达式(复习)
文章目录 一、[]: 一个字符集合二、{}: 重复次数三、特殊符号四、(): 分组五、python代码示例六、注意 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个…...
sonarqube+SonarScanner+postpresql+jenkins
本地执行参考这篇 sonarqubeSonarScannerPostgreSQL实现代码质量扫描(windows)_sonarqube 10.7部署-CSDN博客 集成到Jenkins中操作如下 在 Jenkins 中安装 SonarQube Scanner 和配置 Job 1、安装 SonarQube Scanner 插件: 在 Jenkins 的管理…...
牛客周赛Round 84
本场比赛难度不大,也是本人第一次AK,最后一题用组合数学推公式,本篇博客主要讲解最后一题的思路 G-小红的陡峭值(五)(hard)_牛客周赛 Round 84 思路:本题要我们求p/q mod M ,即p*&am…...
TDengine 配置 ODBC 数据源
简介 TDengine ODBC 是为 TDengine 实现的 ODBC 驱动程序,支持 Windows 系统的应用(如 PowerBI 等)以及用户自定义开发的应用程序,通过 ODBC 标准接口访问本地、远程和云服务的 TDengine 数据库。 TDengine ODBC 提供基于 WebSo…...
numpy常用函数详解
在深度神经网络代码中经常用到numpy库的一些函数,很多看过之后很容易忘记,本文对经常使用的函数进行归纳总结。 np.arange arange是numpy一个常用的函数,该函数主要用于创建等差数列。它的使用方法如下所示: numpy.arange([star…...
deepseek 3FS编译
3FS在ubuntu22.04下的编译(记录下编译过程,方便后续使用) 环境信息 OS ubuntu 22.04内核版本 6.8.0-52-genericlibfuse 3.16.1rust 1.75.0FoundationDB 7.1.66meson 1.0.0ninja 1.10.1 libfuse编译 以下建议均在root下执行 pip3 install…...
【CXX】6.2 str — rust::Str
Rust::Str 公共 API // rust/cxx.hclass Str final { public:Str() noexcept;Str(const Str &) noexcept;Str(const String &) noexcept;// 如果输入不是 UTF-8,抛出 std::invalid_argument 异常。Str(const std::string &);Str(const char *);Str(con…...
制作三维软件学习路线
制作三维软件是一项复杂而富有挑战性的任务,涉及多个领域的知识。下面是一个建议的学习路线,涵盖从基础到高级的知识和技能。你可以根据自己的背景和兴趣进行调整。 ### 1. 编程基础 - **学习编程语言**:C或Python是常用的语言,了…...
【RabbitMQ】事务
事务的简单配置及使用 配置事务管理器声明队列生产者代码测试 RabbitMQ是基于AMQP协议实现的,该协议实现了事务机制,因此RabbitMQ也支持事务机制. SpringAMQP也提供了对事务相关的操作.RabbitMQ事务允许开发者确保消息的发送和接收是原子性的,…...
常见的交换机端口类型
在计算机网络中,Access端口 和 Trunk端口 是两种常见的交换机端口类型,主要用于VLAN(虚拟局域网)的配置。它们的主要区别在于如何处理VLAN标签和数据帧。 1. Access端口 Access端口通常用于连接终端设备(如PC、打印机…...
Linux Shell 脚本编程极简入门指南
一、学习前提准备 ✅ 环境要求: Linux系统(Ubuntu/CentOS等)或 WSL (Windows用户) 任意文本编辑器(推荐VSCode/Vim) 基础命令行操作能力 🔍 验证环境: # 查看系统默认Shell echo $SHELL #…...
【医院管理会计专题】7.解锁本量利分析:医院医疗服务决策的智慧密码
医院成本核算、绩效管理、运营统计、内部控制、管理会计专题索引 一、引言 在当今医疗行业竞争日益激烈的背景下,医院管理面临着诸多挑战,如何实现高效运营、提升服务质量并控制成本成为关键问题。管理会计作为一种重要的管理工具,在医院管理中发挥着越来越重要的作用。本…...
Kotlin和Java区别
哈哈哈,前段时间,面试的时候,突然问到我Kotlin和Java的区别,一下子把我问懵逼了,确实没遇到问这个的,想了下,说了下Kotlin的编译时空检查机制,代码更简洁,很多封装好的AP…...
Taro 面试题
基础概念 1. Taro 是什么?它的核心特点有哪些? Taro 是京东开源的 多端统一开发框架,基于 React 语法,可编译到 微信小程序、H5、React Native 等多个端。 核心特点: 多端适配:一套代码运行多个端支持 …...
Java部署在window启动报unable tocreate tempdir
在Windows系统中,Java应用在运行时会试图在默认的临时目录中创建文件。该临时目录通常由系统环境变量TEMP或TMP指定。如果这些变量设置不正确、指向一个无效的路径,或者操作系统的权限不足,就会导致“Unable to create tempdir”错误。 解决…...
基于deepseek和开放题库,构建专业大模型微调在线答题系统
为什么要进行大模型微调 大模型微调是将预训练模型适配到特定任务或领域的关键技术,正常情况下大模型通过海量通用数据训练获得广泛知识,但其参数和表征空间面向通用场景,难以直接适配垂直领域或复杂任务。例如在通用医疗问答模型在具体病症诊…...
【PAT甲级真题】- PAT Judge (25)
题目来源 PAT Judge (25) 题目描述点击链接自行查看 注意点: 排序:先按总分再按解决题目数再按id 思路简介 思路很简单,直接模拟即可 但是坑倒是很多 主要是要区分编译没过和过了但是得 0 分 方案: 初始化时分数为 -2 编译没…...
luci-app-unblockneteasemusic技术指南:解决网易云音乐播放限制问题
luci-app-unblockneteasemusic技术指南:解决网易云音乐播放限制问题 【免费下载链接】luci-app-unblockneteasemusic [OpenWrt] 解除网易云音乐播放限制 项目地址: https://gitcode.com/gh_mirrors/lu/luci-app-unblockneteasemusic 一、问题导向:…...
java rabbitmq实现消息协作
场景:数据下载采用rpa实现,数据服务采用java springboot实现,需要进行一键数据补录操作1、设置消息承载的通信队列,java 发送任务到rabbitmq和rpa端收到消息(neimeng_data_download)后,将下载结…...
从4G到RedCap:手把手教你升级老旧工业设备的无线通信模块(附功耗测试数据)
从4G到RedCap:工业设备无线通信模块升级实战指南 在工业物联网快速发展的今天,老旧设备的通信模块升级成为许多工厂面临的现实挑战。传统4G模块虽然稳定可靠,但面对5G时代RedCap技术带来的低功耗、低成本优势,升级改造已成为提升设…...
LyricsX:突破平台限制,重构macOS歌词体验的开源解决方案
LyricsX:突破平台限制,重构macOS歌词体验的开源解决方案 【免费下载链接】LyricsX 🎶 Ultimate lyrics app for macOS. 项目地址: https://gitcode.com/gh_mirrors/ly/LyricsX 在流媒体音乐蓬勃发展的今天,音乐爱好者们却常…...
通义千问3-Reranker-0.6B效果对比:不同参数规模的性能差异
通义千问3-Reranker-0.6B效果对比:不同参数规模的性能差异 1. 引言 在AI快速发展的今天,文本检索和排序技术已经成为智能搜索、推荐系统和RAG应用的核心。通义千问团队最新推出的Qwen3-Reranker系列模型,提供了从0.6B到8B多种参数规模的选择…...
A860-2155-T611发那科分离式增量型主轴编码器
型号:A860-2155-T611全称:αiBZ SENSOR ASSY 512 (THIN TYPE) 薄型传感器总成品牌:FANUC(发那科)类型:分离式增量型主轴编码器(薄型)一、产品特性薄型分离式设计:传感器头…...
MGeo门址地址解析效果展示:高德×达摩院多模态模型真实解析案例集
MGeo门址地址解析效果展示:高德达摩院多模态模型真实解析案例集 1. 引言:当AI开始“读懂”地址 想象一下,你收到一条外卖订单,地址写着“朝阳区望京SOHO T3 B座15楼1501室,到了打电话”。对于骑手来说,这…...
3大核心能力重新定义macOS炉石传说对战体验:HSTracker全方位辅助系统解析
3大核心能力重新定义macOS炉石传说对战体验:HSTracker全方位辅助系统解析 【免费下载链接】HSTracker A deck tracker and deck manager for Hearthstone on macOS 项目地址: https://gitcode.com/gh_mirrors/hs/HSTracker HSTracker是一款专为macOS平台设计…...
从巨鲸到万物生长:Claude Code如何颠覆AI开发,带你从对话走向Agent平台搭建!
Claude Code凭借其六大核心能力,将AI开发带入全新阶段。通过CLAUDE.md实现项目记忆增强,Skills固化可复用工作流,Sub-Agent处理专业化任务,MCP连接外部服务,Plug-In打包完整解决方案。本文深入解析这些功能,…...
