单片机
文章平均质量分 78
单片机(英语:Single-chip microcomputer,台湾作单晶片,全称单芯片微型计算机),是把中央处理器、存储器、定时/计数器(timer/counter)、各种输入输出接口等都集成在一块集成电路芯片上的微型计算机。与应用在个人计算机中的通用微处理器相比,它更强调自供应(不用外接硬件)
wdfk_prog
个人博客: wdfk-prog.space
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
便携式功耗分析仪LuatOS IoT Power vs. Nordic PPK2
摘要: 本文对比评测两款便携式功耗分析仪:LuatOS IoT Power与Nordic PPK2。LuatOS IoT Power为手持设备,具备独立屏幕和操作功能,强调便携性和即开即用,适合现场调试;Nordic PPK2则依赖PC软件,提供更高精度(100nA分辨率)和100KHz采样率,并集成8通道逻辑分析仪,适合专业开发者进行代码级功耗优化。IoT Power在通用性和易用性上占优,而PPK2在纳安级测量和逻辑分析方面更具优势。推荐创客选IoT Power,专业开发者选PPK2,预算充足者可互补使原创 2025-11-01 16:31:11 · 1032 阅读 · 0 评论 -
NBM7100电池能量管理芯片及其驱动代码分享
如果你正在为设备的“续航焦虑”而烦恼,或者对高级电源管理技术充满好奇,那么,立即去GitHub上Star并深入研究这个“宝藏”项目吧。仓库的真正价值,在于它远远超出了一个基础驱动的范畴。作者将NBM7100与真实的LoRaWAN应用场景深度结合,并解决了大量实际工程中才会遇到的“坑”。它并非一个简单的LDO或DC-DC,而是一个智能的能量“搬运工”。它向我们展示了如何通过精巧的硬件选型和细致的软件设计,突破电池物理瓶颈,将低功-耗物联网设备的续航能力推向一个新的高度。后及时切回“充电”模式,是集成的关键。原创 2025-11-01 16:23:46 · 938 阅读 · 0 评论 -
一个开源的CANopen转Modbus网关
一个开源的CANopen转Modbus网关在RT-Thread上的实现原创 2025-11-01 14:32:13 · 721 阅读 · 0 评论 -
数据异常值检测利器:Grubbs‘检验的C语言实现
本文介绍了Grubbs'检验在异常值检测中的应用。作为单变量数据集的统计检验方法,Grubbs'检验通过计算嫌疑值与平均值的偏差程度(以标准差为单位)来判断异常值。文章详细阐述了检验的四步流程:计算统计量、确定临界值、提出假设并做出决策。针对传统方法需要手动查表的痛点,推荐了wdfk-prog/grubbs开源C语言库,该库内置临界值表(支持N=3-100),提供简洁API,特别适合嵌入式系统等C语言环境下的自动化异常值检测需求。通过实例演示,展示了该库如何高效识别传感器数据中的异常值。原创 2025-11-01 14:29:52 · 623 阅读 · 0 评论 -
不止是驱动:一个专心设计的、基于“构建器”模式的传感器管理框架
本文介绍了一种嵌入式传感器管理框架sensor,旨在解决传统开发中驱动接口不统一、逻辑重复和应用耦合的问题。框架采用分层设计:驱动层负责硬件通信,核心层通过构建器(Builder)实现标准化的数据处理流程(采集、校准、报警等),应用层只需配置业务逻辑。以DS18B20为例,展示了注册驱动、配置构建器和启动流程三个步骤。该框架显著提高了代码复用性和可维护性,使开发者能够专注于业务需求而非底层细节,适用于复杂的物联网传感器系统开发。原创 2025-11-01 14:25:34 · 760 阅读 · 0 评论 -
结合QBoot与HPatchLite实现高效差分升级(FOTA)
本文介绍了RT-Thread系统中基于QBoot和HPatchLite的差分升级方案。传统全量升级消耗带宽大、耗时长,差分升级通过仅传输新旧固件差异部分解决这一问题。方案分为PC端生成差分包和设备端执行升级两大阶段:PC端使用hdiffi工具生成补丁,再用打包工具封装为QBoot格式;设备端通过QBoot引导加载程序调用HPatchLite库完成升级,支持Flash Swap和RAM Buffer两种缓冲策略以适应不同资源限制。文章详细阐述了分区规划、配置方法和核心机制,为物联网设备提供了一种高效可靠的固件原创 2025-11-01 13:55:57 · 869 阅读 · 0 评论 -
ART-Pi开发者的福音:一个“宝藏级”实践仓库,点亮你的学习之路
ART-Pi实用开发资源:RT-Thread实战案例集 GitHub仓库wdfk-prog/ART-PI为ART-Pi开发板(STM32H750)提供了一套完整的RT-Thread实战项目,涵盖存储管理、文件系统、物联网应用等核心功能。该仓库通过FAL分区、LittleFS文件系统、自定义MSH命令等示例,帮助开发者快速跨越基础到实战的鸿沟。其模块化代码结构支持直接移植,适用于初学者学习RT-Thread内核,或开发者加速IoT项目原型搭建。项目开箱即用,配合RT-Thread Studio可实现快速验证,原创 2025-11-01 14:17:38 · 917 阅读 · 0 评论 -
RT-Thread调试利器:get_irq_priority——像Keil一样在MSH中查看和设置中断优先级
摘要:RT-Thread软件包get_irq_priority提供了一种无需硬件调试器即可实时查询和设置中断优先级的方法。它通过MSH命令实现中断状态全景展示、多维排序和动态优先级调整,解决了嵌入式开发中中断调试的痛点问题。该工具基于CMSIS标准API,支持主流Cortex-M内核MCU,显著提升了调试效率、增强了系统透明度,特别适合现场设备维护和RTOS学习。项目地址:https://github.com/wdfk-prog/rt-thread-get_irq_priority。(149字)原创 2025-11-01 14:11:11 · 999 阅读 · 0 评论 -
ARM Cortex-M内核中DMA内存地址对齐的影响与效率权衡
摘要: ARM Cortex-M4/M7内核中,DMA访问未对齐内存地址会导致性能下降、硬件故障风险及缓存一致性等问题。性能损失源于未对齐访问被拆分为多次总线事务,而受限内存区域的未对齐访问可能触发Hard Fault。针对大数据传输,"预拷贝至对齐缓冲区+DMA"方案效率更高,但需额外内存;小数据场景可直接使用未对齐DMA。最佳实践包括编译时对齐缓冲区、动态对齐分配及合理配置MPU。选择策略需权衡时间效率、内存占用和系统稳定性。原创 2025-09-23 09:04:17 · 1288 阅读 · 0 评论 -
SPI通信模式及其对DMA控制器配置策略的影响
SPI通信模式与DMA配置冲突分析 本文深入探讨了SPI协议的通信模式及其对DMA控制器配置的影响。SPI作为全双工同步串行接口,其物理层数据传输具有严格的同步性:发送和接收在同一个时钟周期内完成。文章分析了三种主要通信模式:全双工、半双工和三线单工,并重点指出"阻塞式发送+DMA接收"组合在全双工模式下的不可行性。这种配置破坏了SPI协议的同步机制,可能导致数据丢失或RX FIFO溢出,因为接收依赖于发送产生的时钟信号。正确的做法是使用统一的传输函数(如HAL_SPI_Transmit原创 2025-09-22 13:20:41 · 1160 阅读 · 0 评论 -
STM32H7系列微控制器SPI FIFO阈值配置对高速数据传输稳定性的影响
本文分析了STM32H7系列微控制器SPI接口中FIFO阈值配置对高速数据传输稳定性的影响。研究发现,当FIFO阈值设置为较高的SPI_FIFO_THRESHOLD_08DATA时,在高速SPI时钟下容易因DMA响应延迟导致发送下溢错误,引发系统挂起。通过将阈值调整为SPI_FIFO_THRESHOLD_01DATA,可建立即时数据补充机制,确保FIFO永不空置,从而消除时序竞争风险。虽然该调整会略微增加DMA请求频率,但在STM32H7高性能平台上影响甚微,却可显著提升系统稳定性。这一案例揭示了在嵌入式系原创 2025-09-22 11:56:53 · 1170 阅读 · 0 评论 -
ubantu st-link 调试
本文介绍了Linux环境下STM32开发环境的搭建流程,主要包括: 软件包管理:使用dpkg -i安装.deb文件 工具链安装: 手动安装gcc-arm-none-eabi交叉编译器,配置环境变量 创建符号链接设置arm-none-eabi-gdb等工具 调试工具部署: 安装ST-Link驱动 编译安装OpenOCD 0.12.0,配置ST-Link接口 调试配置: 通过telnet连接OpenOCD控制目标芯片 配置VSCode的tasks.json实现单步调试功能 (字数:149)原创 2025-02-15 09:35:47 · 858 阅读 · 0 评论 -
STM32系列微控制器DMA寄存器写入失败的解决方法
摘要: 本文分析了STM32微控制器中DMA寄存器写入失败的两种主要原因:未使能DMA外设时钟和运行时修改已激活的DMA流配置。首先,DMA控制器的AHB总线时钟未开启会导致寄存器访问完全失效。其次,若DMA流的使能位(EN=1)处于激活状态,硬件会锁定关键配置寄存器(如DMA_SxCR),导致写入被忽略。解决方法是:确保时钟初始化后,遵循“禁用-配置-使能”的原子操作流程修改DMA流。本文通过代码示例和流程图,提供了系统化的诊断步骤和最佳实践,帮助开发者规避此类问题,确保DMA传输的可靠性。 关键词: S原创 2025-09-18 15:35:11 · 1072 阅读 · 0 评论 -
STM32CubeIDE 调试“失灵”之谜:别动那个关键的复选框
文章摘要 STM32CubeIDE中“Build before launching”选项的关闭可能导致调试功能“失灵”。该选项确保在调试前自动编译最新代码,生成匹配的.elf文件。取消勾选后,IDE会使用旧版文件,引发调试断点失效、逻辑不符等问题,甚至因文件缺失导致调试无响应。解决方法是进入Preferences > Run/Debug > Launching,勾选该选项。保持此设置可避免“调试幽灵代码”,确保开发效率。这是保证代码与调试一致性的关键设置,建议始终启用。原创 2025-09-10 16:05:12 · 782 阅读 · 0 评论 -
STM32高性能DMA架构解析:MDMA与DMA的核心差异及最佳实践
摘要:STM32高性能MCU采用分层DMA架构,包含传统DMA/BDMA和更强的MDMA控制器。DMA/BDMA如同"专属快递员",专注外设数据传输,响应快、功耗低;MDMA则像"中央物流中心",通过64位AXI总线实现高速内存操作,支持复杂任务。二者协同工作可构建高效DMA链,MDMA的链表模式还能实现无CPU干预的分散-聚集操作。设计时应遵循"简单任务用DMA,复杂批量用MDMA"的原则,以优化系统性能与功耗。这种架构使STM32H7/U5系列原创 2025-08-19 11:17:57 · 1577 阅读 · 0 评论 -
LoRaWAN节点学习笔记
LoRaWAN终端节点技术研究摘要 本文研究了基于Sub-GHz频段的LoRaWAN终端节点技术,重点分析了ST-SUBGHZ射频收发器的关键特性。该收发器支持150-960MHz ISM频段,提供两种功率模式(最高+22dBm),采用半双工通信方式。研究详细探讨了电源管理方案(LDO/SMPS)、HSE32 TCXO时钟源设计、发射器高低功率输出配置(RFO_HP/RFO_LP)、接收链架构以及RF-PLL频率合成技术。特别强调了LoRa调制解调器的实现,包括扩频因子(SF5-12)和带宽(7.8-500原创 2025-01-14 20:57:52 · 1556 阅读 · 0 评论 -
stop2模式低功耗无法进入的问题分析
本文分析了低功耗模式下无法正常进入的问题。现象表现为进入低功耗后立即退出,通过打印函数发现中断标志位未清除导致失败。经排查发现SYSTICK中断未处理触发了标志位挂起,原因是屏蔽中断响应后未及时进入低功耗函数。解决方案建议:1)精简进退低功耗函数的运行代码;2)采用多次开关中断方式减少单次间隔运行量;3)在中断处理中使用原生printf减少调用耗时。这些优化可避免中断标志位挂起导致的低功耗进入失败问题。原创 2023-05-25 15:35:14 · 792 阅读 · 0 评论 -
关于RTC的玄学bug分析与解决
本文分析了RTC(实时时钟)异常现象,发现按键操作会挤压背面的晶振区域导致RTC起振异常。实验表明,当使用LSE作为时钟源时,这种机械干扰会导致APP初始化失败,而BootLoader却能正常跳转。对比发现APP初始化了LSE且使用了RTC硬件资源是失败主因。建议避免接触精密器件区域,并改进PCB布局设计,确保按键背面不放置敏感元件。该案例揭示了机械应力对精密电路的影响,为硬件设计提供了重要参考。原创 2023-07-07 17:31:21 · 833 阅读 · 0 评论 -
freertos学习笔记
FreeRTOS核心机制与内存管理分析 本文系统梳理了FreeRTOS的关键设计规范和底层实现机制。在命名规范方面,FreeRTOS采用前缀标识法,变量名以类型缩写开头(如x表示BaseType_t),函数名则包含返回类型和所属文件信息(如vTask表示void返回的任务函数)。内存管理方面,FreeRTOS提供5种堆实现:heap_1不支持释放,heap_2/4支持释放但后者能合并碎片,heap_3封装标准malloc,heap_5支持非连续内存区域。任务管理部分详解了任务删除限制、堆栈分配、优先级设置等原创 2025-01-14 20:55:17 · 1072 阅读 · 0 评论 -
CUBEMXV6.70版本 使用STM32H750 之前时钟配置报错的修改办法
CUBEMXV6.70版本STM32H750时钟配置报错解决方法 在使用CUBEMXV6.70配置STM32H750时钟时出现报错,可通过以下步骤解决: 重新选择正确的芯片版本 在时钟配置界面修改参数设置(虽然配置变化但实际代码可能不变) 若无选项,可尝试强制刷新或重新生成代码 该方法通过重新选择版本和调整配置解决了时钟报错问题,同时指出配置变化可能不会体现在实际工程代码中。原创 2022-12-16 14:46:14 · 879 阅读 · 4 评论 -
FEERTOS的TICKLESS模式下最大低功耗的时间只能是349tick的原因分析
本文分析了TICKLESS模式下最大低功耗时间限制为349tick的原因。通过跟踪FreeRTOS源码发现,系统为确保SysTick重载值不溢出24位计数器,将最大休眠时间限制为0xFFFFFF/(系统时钟/调度频率),在本例中计算结果为349tick。文章提出两种优化方案:方案1继续使用TICKLESS模式,通过分段休眠降低功耗;方案2改用空闲钩子函数配合RTC定时唤醒,但存在系统调度计时不准确的问题。两种方案各有利弊,需根据具体应用场景的功耗需求和处理要求进行选择。原创 2024-03-27 10:00:47 · 382 阅读 · 0 评论 -
FREERTOS开启TICKLESS后最大只能349tick休眠的原因分析
摘要 本文分析FreeRTOS空闲线程在TICKLESS模式下的运行时间限制问题。通过代码调试发现,当空闲时间超过349个tick时,系统会强制限制为这个最大值。原因是SysTick作为24位计数器,其最大计数值为0xFFFFFF。根据48MHz系统时钟和1000Hz调度频率计算,理论最大可休眠时间为0xFFFFFF/48000≈349个tick。这种设计确保了SysTick重载值不会溢出,但限制了系统的低功耗休眠时间。原创 2023-05-23 16:51:43 · 353 阅读 · 0 评论 -
STM32F7 ADC+DMA 目标数组无更新 解决办法
百度过其他adc+dma设置方法,均无效果。无效,进不去debug。机缘巧合之下搜索RTC的时候看到这篇文章。怀疑是编译器优化问题。加上__IO,防止编译器优化无效。得知F7的地址不是这个。这个文章仅做思路查看。原创 2021-12-22 15:28:30 · 3011 阅读 · 1 评论 -
ADC+DMA 目标数组无更新 解决办法
本文介绍了STM32F7系列ADC与DMA的优化实现方案。重点解决了L1-Cache导致DMA数据不更新的问题,提出了三种解决方案:使用DTCM内存、手动维护Cache一致性或配置write-through模式。代码采用32字节对齐内存分配,实现了带平均值计算的ADC电压读取功能,并通过DMA半传输和传输完成回调处理Cache一致性。优化后的方案支持多通道处理,包含初始化、数据读取示例和详细的注意事项,如内存分配建议、性能优化手段和错误处理机制,具有更好的结构清晰度和可维护性。原创 2021-12-22 16:54:50 · 2317 阅读 · 0 评论 -
【ARM V6编译器 编译汇编代码出错解决办法】
本文展示了ARM架构下使用汇编内联实现基础系统功能的代码示例。包括WFI指令执行、中断开关控制(INTX_DISABLE/ENABLE)和栈顶地址设置(MSR_MSP)等功能实现。这些底层操作用于系统休眠、中断管理和堆栈初始化,采用混合编程方式通过asm关键字嵌入汇编指令,其中WFI_SET函数单独实现,其他函数均包含返回指令(BX LR)。代码适用于需要直接操作CPU寄存器和指令的场景,为嵌入式系统开发提供基础支持。原创 2022-02-12 15:07:57 · 1121 阅读 · 0 评论 -
CUBE 配置SDRAM 无法选择地址问题解决办法
本文介绍了STM32 HAL库中SDRAM引脚配置问题的解决方法。当在CubeMX中无法选择SDRAM地址引脚时,通常是因为该引脚已被其他功能占用。通过检查并释放被占用的引脚(如示例中的PF12),即可恢复配置功能。文章提供了两种确定SDRAM所需引脚的方法:新建CubeMX工程查看自动配置,或直接参考他人已实现的代码。最后给出了一个具体的SDRAM初始化示例,详细列出了需要配置的GPIO引脚及其复用设置,主要涉及GPIOC/D/E/F/G等多个端口引脚,均设置为FMC复用功能。原创 2022-02-23 10:58:40 · 4556 阅读 · 0 评论 -
HAL_DMA_ERROR_FE错误代码解决方法
摘要:本文分析了STM32F7芯片使用DMA+USART+FIFO通信时出现数据丢失的问题。通过调试发现系统频繁进入DMA的FIFO错误中断(错误代码10),但实际配置并未启用FIFO功能。解决方案是在DMA中断服务函数中通过__HAL_DMA_DISABLE_IT(&hdma_usart1_tx,DMA_IT_FE)关闭FIFO错误中断。文中指出若不处理该错误,HAL库会强制关闭DMA传输,导致通信异常。文章还提供了错误定位方法和相关代码片段,适合遇到类似问题的开发者参考。(150字)原创 2022-02-10 18:17:37 · 2898 阅读 · 0 评论
分享