STM32F103 CAN 过滤器配置实战:从标准库到精准数据接收

Stm32f103的can硬件滤波配置与调试 需要实现一条can总线上连接许多can设备,如果can设备都接收can中断数据的话,cpu会消耗较多资源,于是想到了使用can模块的硬件滤波功能,can设备自身需要的几个stdid信号可以接收到,其他的都做硬件滤波过滤掉。 can的硬件滤波分精准识别(标识符识别列表)和mask(部分过滤)两种方式;有两个32bit寄存器,分别设置为16bit过滤或者32bit过滤,入下图所示(全0为不使用过滤器): sFilterConfig.FilterIdHigh = 0x0000;//32 位 ID 不使用 阅读详情

1. CAN过滤器配置的重要性与基本概念

CAN总线在工业控制、汽车电子等领域应用广泛,但实际环境中总线上往往有多个设备同时通信,每个设备都会发送大量报文。如果所有报文都被MCU接收处理,会造成巨大的CPU负载,甚至导致系统崩溃。这时候CAN过滤器就显得尤为重要了,它就像是给你的STM32安装了一个"智能门卫",只放行那些真正需要处理的报文。

我在实际项目中就遇到过这样的问题:一个CAN总线上有十几个节点,每个节点每秒发送几百帧数据,刚开始没有配置过滤器,STM32F103的CPU使用率直接飙升到90%以上,系统响应变得极其缓慢。后来合理配置了过滤器,CPU使用率降到了20%左右,系统运行非常稳定。

STM32F103提供了14个可配置的过滤器组(0-13),每个过滤器组可以独立配置为32位或16位模式,支持列表模式和掩码模式两种工作方式。这种灵活性让我们可以根据实际需求精确控制接收哪些报文,大大提高了系统效率。

2. 32位列表模式的实战配置

2.1 列表模式的工作原理

32位列表模式就像是在门口放了一个白名单,只有ID完全匹配的报文才能被接收。这种模式适合需要接收特定几个ID报文的场景,精度最高,但每个过滤器只能设置有限的ID。

在实际配置中,我们需要理解STM32的过滤器寄存器结构。32位模式下,每个过滤器组实际上由两个32位寄存器组成:FilterIdHigh和FilterIdLow。但这里有个容易踩坑的地方:这两个寄存器并不是简单的高低32位,而是需要根据标准帧和扩展帧进行不同的处理。

我刚开始接触CAN过滤器时,就在这里栽过跟头。当时配置了一个扩展帧ID,但怎么也收不到数据,后来才发现是IDE位没有正确设置。这个细节很多教程都没强调,但确实很关键。

2.2 标准帧ID的配置示例

对于标准帧ID(11位),配置相对简单。假设我们要过滤ID为0x123的标准帧:

#define CAN_STD_ID 0x123

void CAN_Filter_Init_StdId(void)
{
    CAN_FilterInitTypeDef CAN_FilterInitStructure;
    
    CAN_FilterInitStructure.CAN_FilterNumber = 0;
    CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
    CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0;
    
    // 标准帧需要左移21位,因为STDID在寄存器的高11位
    CAN_FilterInitStructure.CAN_FilterIdHigh = (CAN_STD_ID << 21);
    // IDE位必须设为0,表示标准帧
    CAN_FilterInitStructure.CAN_FilterIdLow = 0;
    
    CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);
}

这里的关键点在于:标准帧ID需要左移21位,因为STM32的过滤器寄存器中,标准ID位于31-21位。同时必须设置IDE位为0,否则过滤器无法正确匹配。

2.3 扩展帧ID的配置技巧

扩展帧ID(29位)的配置就复杂一些了,这也是很多开发者容易困惑的地方。我们以扩展帧ID 0x1800F001为例:

#define CAN_EXT_ID 0x1800F001

void CAN_Filter_Init_ExtId(void)
{
    CAN_FilterInitTypeDef CAN_FilterInitStructure;
    
    CAN_FilterInitStructure.CAN_FilterNumber = 0;
    CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
    CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0;
    
    // 扩展帧需要左移3位,然后分别处理高16位和低16位
    uint32_t temp = (CAN_EXT_ID << 3) | 0x04; // 左移3位并设置IDE位
    
    CAN_FilterInitStructure.CAN_FilterIdHigh = temp >> 16;
    CAN_FilterInitStructure.CAN_FilterIdLow = temp & 0xFFFF;
    
    CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);
}

为什么需要左移3位呢?这是因为在扩展帧格式中,29位的扩展ID在寄存器中的位置是从3到31位,最低的3位用于RTR、IDE等控制位。所以我们需要左移3位来对齐,同时还要记得设置IDE位为1。

3. 32位掩码模式的灵活应用

3.1 掩码模式的工作原理

如果说列表模式是"白名单",那么掩码模式就是"模糊匹配"。它允许我们指定哪些位需要精确匹配,哪些位可以忽略。这种模式特别适合需要接收某一类报文的情况,比如某个范围内的多个ID。

掩码模式的工作原理很简单:每个过滤器组有一个ID寄存器和一个掩码寄存器。掩码寄存器中为1的位表示需要精确匹配,为0的位表示不关心。这样我们就可以用较少的过滤器接收多个相关的ID。

我在一个工业控制项目中就大量使用了掩码模式。那个系统需要接收ID从0x100到0x1FF的所有报文,如果使用列表模式需要256个过滤器,显然不现实。使用掩码模式后,只需要一个过滤器就搞定了:

void CAN_Filter_Init_MaskMode(void)
{
    CAN_FilterInitTypeDef CAN_FilterInitStructure;
    
    CAN_FilterInitStructure.CAN_FilterNumber = 0;
    CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
    CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0;
    
    // 设置基础ID:0x100,标准帧
    CAN_FilterInitStructure.CAN_FilterIdHigh = (0x100 << 21);
    CAN_FilterInitStructure.CAN_FilterIdLow = 0;
    
    // 设置掩码:高8位必须匹配,低3位不关心
    CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFF80; // 1111111110000000
    CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;  // 全部不关心
    
    CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);
}

这样配置后,所有ID在0x100到0x1FF之间的标准帧都会被接收,大大节省了过滤器资源。

3.2 掩码模式的高级应用技巧

掩码模式还可以实现更复杂的过滤策略。比如我们需要接收所有优先级为高的报文(假设ID的高3位表示优先级),同时只接收来自某个特定设备的报文(ID的中间8位表示设备地址):

void CAN_Filter_Init_AdvancedMask(void)
{
    CAN_FilterInitTypeDef CAN_FilterInitStructure;
    
    CAN_FilterInitStructure.CAN_FilterNumber = 0;
    CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
    CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0;
    
    // 设置基础ID:优先级高(0x7),设备地址0x55
    uint32_t base_id = (0x7 << 8) | 0x55;
    CAN_FilterInitStructure.CAN_FilterIdHigh = (base_id << 21);
    CAN_FilterInitStructure.CAN_FilterIdLow = 0;
    
    // 设置掩码:只关心高3位和中间8位
    uint32_t mask = 0x1FFC0000; // 高3位和接下来8位需要匹配
    CAN_FilterInitStructure.CAN_FilterMaskIdHigh = mask >> 16;
    CAN_FilterInitStructure.CAN_FilterMaskIdLow = mask & 0xFFFF;
    
    CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);
}

这种灵活的过滤策略在复杂的工业网络中非常有用,可以显著减少CPU的处理负担。

4. 过滤器配置的实战经验与坑点排查

4.1 常见配置错误及解决方法

在实际项目中,过滤器配置经常会出现各种问题。我总结了几种最常见的情况:

第一种是IDE位设置错误。这是最容易出错的地方,标准帧必须设置IDE=0,扩展帧必须设置IDE=1。如果设置反了,过滤器就完全不起作用。

第二种是ID移位错误。标准帧需要左移21位,扩展帧需要左移3位。很多新手会忘记这个步骤,导致过滤的ID完全不对。

第三种是掩码模式理解错误。掩码为1的位需要匹配,为0的位不关心。有些人会把这个逻辑搞反,结果过滤效果完全相反。

我曾经遇到一个奇怪的bug:过滤器配置看起来完全正确,但就是收不到数据。后来发现是因为多个过滤器组之间有优先级关系,而我没有正确设置过滤器的编号。STM32的过滤器组是按编号顺序进行匹配的,一旦某个过滤器组匹配成功,后面的就不再检查了。

4.2 调试技巧与验证方法

调试CAN过滤器时,我通常采用以下步骤:

首先使用回环模式进行自测试,这样可以排除硬件问题。确保发送和接收的基本功能正常后再配置过滤器。

然后逐步添加过滤规则,每次只添加一个过滤器,发送测试报文验证过滤效果。可以使用CAN分析仪或者另一个STM32节点来发送各种ID的测试报文。

还有一个实用的技巧是暂时禁用所有过滤器,接收所有报文,然后分析实际收到的报文ID,再根据这些信息来配置过滤器。这样可以确保过滤规则符合实际网络情况。

// 临时禁用所有过滤器进行网络分析
void CAN_Disable_All_Filters(void)
{
    for(int i = 0; i < 14; i++) {
        CAN_FilterInitTypeDef filter;
        filter.CAN_FilterNumber = i;
        filter.CAN_FilterActivation = DISABLE;
        CAN_FilterInit(&filter);
    }
}

4.3 性能优化建议

在资源有限的STM32F103上,合理使用过滤器可以显著提升系统性能。我有几个实用的建议:

首先,尽量使用掩码模式而不是列表模式,因为掩码模式可以用更少的过滤器覆盖更多的ID。

其次,将最常用的ID放在编号较小的过滤器组中,因为STM32是按顺序检查过滤器组的,这样可以提高匹配速度。

另外,合理使用FIFO分配也很重要。可以将不同类型的报文分配到不同的FIFO中,这样在处理时更有针对性。

最后,记得定期检查过滤器的效果。在实际运行中,网络环境可能会变化,需要适时调整过滤策略。

我在一个汽车电子项目中就深有体会:刚开始过滤器配置得很严格,系统运行很高效。但后来车上增加了新的ECU节点,发送了一些新的ID报文,由于过滤器过于严格,这些新报文都被丢弃了。后来调整了过滤策略,既保证了性能又兼容了新设备。

过滤器配置虽然是个技术活,但只要掌握了基本原理和实战技巧,就能让STM32的CAN接口发挥出最佳性能。特别是在工业控制这种对可靠性要求高的场合,一个好的过滤策略往往是系统稳定运行的关键。

STM32F105双CAN实战:从标准库配置到典型问题排查 本文详细解析了基于STM32F105标准库的双CAN总线配置与调试全流程。从硬件引脚、时钟配置入手,重点阐述了双CAN初始化中CAN2的特殊步骤,如时钟开启顺序、引脚重映射及过滤器编号分配。文章还提供了从回环模式测试到正常模式通信的典型问题排查手册,并分享了过滤器配置、中断管理等进阶实战技巧,帮助开发者高效实现稳定的双CAN网络通信。 阅读详情

相关推荐

STM32 CAN通信实战:基于CubeMX与HAL库的配置与开发指南

CAN总线作为一种广泛应用于工业控制、汽车电子和机器人等领域的可靠通信协议,其核心在于通过差分信号实现多节点间的抗干扰数据传输。理解其通信原理,关键在于掌握位时间、波特率计算以及基于标识符的仲裁机制。对于嵌入式开发者而言,高效配置CAN外设并实现稳定通信是提升项目开发效率的关键技术价值。传统寄存器级配置方式繁琐易错,而借助STM32CubeMX图形化工具与HAL库,开发者可以快速完成从时钟树配置、波特率设定到滤波器规则定义的全流程,将精力集中于应用逻辑。本文以STM32F103系列为例,详细解析了使用Cub

www.itmmd.com 370

stm32f103can总线过滤器配置

CAN过滤器的配置(f103 hal1.8 系列) can的过滤器的配置是对can接收到的报文进行过滤的配置,在STM32芯片中,可以对can的报文进行过滤,从而省略cpu的处理过程。 can的过滤模式 f103中为应用程序提供了14个位宽可变、可配置的过滤器组,每个过滤器组由2个32位寄存器,CAN_FxR0和CAN_FxR1组成。 每个过滤器组的位宽都可以单独设置,以满足应用程序的不同需求。根...

zxfaxjy的博客 5253

GD32 CAN通信实战指南:从原理到调试,快速上手工业与汽车总线

CAN总线作为一种高可靠性的多主机串行通信协议,其核心原理在于非破坏性的仲裁机制和差分信号传输,这使其在强干扰环境下依然能保持稳定通信。这项技术的核心价值在于为分布式实时控制系统提供了高效、可靠的数据交换骨干,广泛应用于汽车电子、工业自动化、机器人等对通信鲁棒性要求极高的领域。理解CAN通信,关键在于掌握其工作模式、波特率精准配置以及灵活的报文滤波机制。以GD32系列微控制器为例,其内置的CAN控制器为开发者提供了完整的硬件支持。通过配置不同的工作模式(如用于自测的回环模式),计算精确的波特率分频参数,并合

congli3478的博客 376

STM32 CAN 过滤器总结(先收着)

在STM32互联型产品中,CAN1和CAN2分享28个过滤器组,其它STM32F103xx系列产品中有14个过滤器组,用以对接收到的帧进行过滤。 每组过滤器包括了2个可配置的32位寄存器:CAN_FxR0和CAN_FxR1。这些过滤器相当于关卡,每当收到一条报文时,CAN要先将收到的报文从这些过滤器上"过"一下,能通过的报文是有效报文,收进相关联FIFO(FIFO1或FIFO2),不能通过的

c823443337的专栏 3332

STM32学习笔记汇总:从零到一构建嵌入式开发知识体系

嵌入式系统开发是连接物理世界与数字世界的核心技术,其核心在于通过微控制器对外设进行编程控制,实现特定功能。其工作原理基于硬件抽象与寄存器配置,开发者通过操作寄存器或调用库函数来管理GPIO、定时器、ADC等外设。这项技术的价值在于能够以低成本、低功耗的方式实现智能化控制,广泛应用于物联网终端、工业自动化、消费电子等领域。学习STM32微控制器是进入嵌入式开发领域的常见路径,它涉及开发环境搭建、外设驱动编写、通信协议实现以及实时操作系统应用等实践。本文基于一线工程师的实践经验,系统梳理了STM32的学习地图与

weixin_34062469的博客 394

STM32开发(五)STM32F103 通信 —— CAN通信编程详解

USE_HAL_CAN_REGISTER_CALLBACKS宏定义为0,则调用HAL_CAN_RxFifo0MsgPendingCallback回调函数(这个函数是弱化函数,重构该函数之后就会调用重构函数)(2)在HAL_CAN_IRQHandler函数中判断中断标志位为CAN_IT_RX_FIFO0_MSG_PENDING(挂起中断,在初始化中使能挂起中断)CAN接收中断包括:挂起中断(只要有信息就触发中断)、满中断(FIFO都满了触发中断)、溢出中断(只有FIFO都满后还接收到数据就会触发中断)

weixin_43564241的博客 2万+

STM32 CAN通信 滤波器配置总结

define CAN2_INIT_COMPLETE 0x20 //CAN2初始化完成标志 //#define CAN_BUS_ERROR 0x40 //CAN总线错误标志 #define CAN2_RESET_COMPLETE 0x10 //CAN2控制器复位完成标志。此时CAN_FxR0和CAN_FxR1中的都是要匹配的标识符,收到的帧的标识符必须与其中的一个吻合才能通过过滤。

木牛的博客 4329

STM32双节点CAN通信实战:硬件连接、位定时与过滤器配置

CAN总线是一种面向工业与汽车电子的高可靠性差分串行通信协议,其核心原理基于ISO 11898标准定义的CSMA/CR仲裁机制、位定时同步及硬件过滤机制。技术价值体现在抗干扰强、多主容错、非破坏性仲裁等特性,广泛应用于ECU间通信、BMS数据交互、智能传感器组网等嵌入式实时场景。实际落地时,开发者常因物理层终端电阻缺失、STM32位定时参数计算错误、CAN过滤器ID掩码配置失配(如未左移5位)等底层细节导致通信失败。本文聚焦CAN双节点工程闭环,以STM32F103为平台,详解TJA1050收发器接入、HA

weixin_28746213的博客 51

can通信与stm32实现

can通信与stm32实现

2301_80796910的博客 2000

STM32F103 CAN通信硬件配置与位定时工程实践

CAN总线是一种基于消息广播、多主竞争和非破坏性仲裁的高可靠性现场总线,广泛应用于汽车电子与工业控制领域。其核心在于物理层差分信号传输、数据链路层的位定时精确控制,以及MCU硬件资源(如APB1时钟、复用GPIO、过滤器)的严格协同。STM32F103集成符合ISO 11898-1标准的CAN控制器,需正确配置引脚复用、上拉输入/复用推挽输出、时钟使能及位时间参数(BRP/TS1/TS2),才能保障500kbps等关键速率下的采样点精度与抗干扰能力。工程实践中,环回模式验证逻辑、过滤器实现硬件级ID筛选、中

weixin_32999557的博客 39

.NET MAUI 第13讲 深入探索 .NET MAUI Essentials:让应用感知设备与环境,打造智能体验

摘要:本文介绍了.NET MAUI Essentials库如何赋能移动应用感知设备环境的能力。文章详细讲解了设备信息获取(DeviceInfo)、网络状态监测(Connectivity)、地理位置服务(Geolocation)、地图集成(Map)以及传感器(Accelerometer等)等核心功能的使用方法,并提供了完整的代码示例。通过一个综合练习,展示了如何构建设备信息仪表板,实时显示设备参数和网络状态,并实现位置获取与地图导航功能。这些跨平台API能显著提升应用智能化和用户体验,同时保持代码简洁高效。

AlphaNil的博客 1088

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

此时,这样CAN_FxR0中保存的就是标识符匹配值,CAN_FxR1中保存的是屏蔽码,即CAN_FxR1中如果某一位为1,则CAN_FxR0中相应的位必须与收到的帧的标志符中的相应位吻合才能通过过滤器;这些过滤器相当于关卡,每当收到一条报文时,CAN要先将收到的报文从这些过滤器上"过"一下,能通过的报文是有效报文,收进相关联FIFO(FIFO1或FIFO2),不能通过的是无效报文(不是发给"我"的报文),直接丢弃。按这样的顺序,报文能通过的第一个过滤器,就是该报文的过滤器编号,被存入接收邮箱中。

木牛的博客 3565

Tomcat漏洞——弱口令爆破

靶机:CentOS7 IP:192.168.100.40。攻击机:kali IP:192.168.100.60。版 权 声 明:本博客所有文章除特别声明外,均采用。文章版权归作者所有,未经允许请勿转载!作 者:PeiyuJue。

weixin_57379923的博客 911

STM32F103_HAL库+寄存器学习笔记21 - CAN接收过滤器:CPU减负神器,提升系统效率的第一道防线

在STM32F103的CAN总线应用中,硬件过滤器(Filter)承担着关键角色。本章将从寄存器层面深入剖析CAN接收过滤器的工作机制与配置方法,帮助理解如何高效筛选关键信息,减轻CPU负担。通过合理使用过滤器,不仅能提升系统整体运行效率,还能显著降低接收溢出风险。文章将结合HAL库操作与直接寄存器配置,全面构建底层视角下的CAN接收优化思路。

wallace89的博客 1586

高德地图-获取定位-失败原因-浏览器定位异常场景

提示:也能实现,但是需要https协议,而且请求时间很长,要么你用梯子,还是不太合适.

shi15926lei的博客 4206

LabVIEW调用.so文件的方法

LabVIEW调用.so文件的方法

m0_37878912的博客 3025

STM32F103学习笔记(7)——CAN通信(下)—— 过滤器配置

1.前言 元旦嗨了几天,今天回来补一下CAN的过滤器。 就使用而言,实际上CAN的过滤器非常简单,只需要几个简单的参数配置,不需要学习什么邮箱FIFO、还回什么静默什么的。 我一直认为,所有的东西想要入门最简单的是找个例子拿来用,你把这个例子将清楚了,我会套着用了,然后再去学习基础知识就会知道自己在学什么,要不然我TMD学了两天各种乱七八糟的定义过两天又全都忘光了,实践的时候发现还入不了门,学了等于白学,又让人对这个想学的东西产生厌恶感。 可能是网上的教程可能都不太适合我,所以在使用参考资料写代码.

去流浪 5083

金属粘结剂喷射3D打印技术:工艺流程与后处理关键

金属粘结剂喷射(Binder Jetting)是一种创新的增材制造技术,通过逐层喷射粘合剂将金属粉末粘结成型,再经过脱脂和烧结等后处理工序获得最终零件。这项技术的核心优势在于无需支撑结构、可实现批量生产,并且材料利用率高。在3D打印领域,金属BJ技术特别适合中小尺寸、结构复杂且表面质量要求高的零件生产。其工艺流程包括前期数据处理、打印生胚阶段、拆包与清粉,以及关键的渗透、脱脂和烧结后处理环节。后处理工艺的控制直接决定了零件的机械性能和尺寸精度,其中烧结工艺尤为关键,需要精确控制温度曲线和气氛环境。金属BJ打

weixin_35751194的博客 86

STM32F103的CAN通讯接收过滤器过滤分析

前言 STM32 的标识符过滤是一个比较复杂的东东,它的存在减少了 CPU 处理 CAN 通信的开销。STM32 的过滤器组最多有 28 个(互联型),但是 STM32F103ZET6 只有 14 个(增强型),每个滤波器组 x 由 2 个 32 为寄存器, CAN_FxR1 和 CAN_FxR2 组成。学习了CAN通讯,底层的东东CAN控制器已经帮你处理完成,也就是CAN通讯协议已经做好,你按协议格式往对应的位扔数据发送就好,所以使用CAN通讯,我们只需要去关心制定发送的数据间的协议,也就是给每个数据加上

My_bother的博客 2004

一步一步教你写股票走势图——K线图一(概述)

股票分时图部分已经开发完毕,受到了广大开发者的好评!界面、功能都挺完美,解决了好一些MP开发者的问题,博主甚是欣悦,更有动力去开源K线图。这里说一下,如果有问题直接留言或者发邮件,github上个人信息有邮件,我看到基本都会回复,博主不加qq的,体谅O(∩_∩)O。分析好了,废话不多说,我们分析下K线图吧,首先我们看下自选股K线图的效果吧效果还是很赞的,经过分时图的研究后,博主越来越确信自选股用的应

体验Android编程之美 3万+

Python 爬虫高级实战:HTTPS 证书忽略与代理抓包配置

本文深入解析了HTTPS加密与SSL证书校验机制在爬虫开发中的核心问题及解决方案。文章首先剖析了HTTPS协议架构和证书校验流程,指出爬虫开发中常见的证书异常场景及其负面影响。随后详细介绍了Python主流请求库(requests、httpx、aiohttp)的证书忽略配置方法,包括同步/异步模式下的实现方案。针对代理环境,文章系统比较了HTTP、HTTPS、SOCKS5等代理类型的特性差异,并提供了完整的代理配置示例。特别对中间人抓包场景,阐述了Mitmproxy的工作原理和配置要点。最后提出了工程级爬虫

2503_91057718的博客 87

Stm32f103的CAN硬件滤波实战:精准过滤与性能优化

本文深入解析了STM32F103的CAN硬件滤波机制,通过实战配置与性能优化,解决多节点通信中CPU负载过高的问题。文章详细介绍了硬件滤波的精准过滤原理,包括名单与掩码两种模式,并提供了多种场景下的HAL库配置代码示例,帮助开发者有效提升系统实时性与稳定性。

milk8的博客 468

基于STM32L4XX、HAL库的CH182H1以太网收发器(PHY)驱动程序设计

define PHY_REG_PHYSCR 0x12 // PHY特殊控制寄存器。#define PHY_REG_PHYSTS 0x10 // PHY状态寄存器。#define PHY_REG_PHYIDR 0x11 // PHY标识寄存器。#define PHY_REG_ID1 0x02 // PHY标识符1。#define PHY_REG_ID2 0x03 // PHY标识符2。

zhusl6688的博客 408

stm32的CAN过滤器配置

stm32的CAN过滤器配置,遇到了一个有趣的问题,先把代码贴上来 在配置FIFO1的时候, 必须得从你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:撤销:Ctrl/Command + Z 重做:Ctrl/Command + Y 加粗:Ctrl/

weixin_43521648的博客 1728

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

STM32F103-CAN过滤模式配置及simulink自动代码生成与测试

最近换了工作,电脑也换了,STM32的自动代码生成工具在官网已经下不到了,估计也是做的太差了,也不想干了~~花了一些时间把环境配置好了,目前用的是Matlab2020b,stm32cube版本5.6.0,stm32target版本5.6.0(这个是最新的了,再没有更新了) 断更很多天了,感觉很颓废。 进入正题,本文记录stm32CAN过滤模式的四种配置及simulink代码生成与测试。之前的文章中只用了32位列表模式(不清楚的可以看STM32基于simulink自动代码生成),下面分别介绍其他三种模式。

赞的博客 2386

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

STM32 CAN过滤器配置详解

STM32 CAN过滤器配置详解

路过的熊的博客 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

上一篇: 毕设单片机选型指南:从经典51到高性能ARM的实战解析
下一篇: 从Reset_Handler到main():详解STM32F103启动文件的跳转逻辑
普通网友
博客等级 码龄4年 95粉丝 1459原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值