📖 技术文库

STM32 / Arduino / RTOS / 嵌入式 知识文章
展开全部分类 (54)
STM32定时器输入捕获测PWM占空比时,高电平宽度漂移的根因与排查:预分频与捕获边沿配置详解
嵌入式 · 👁 5 阅读
许多开发者在用STM32定时器输入捕获测量PWM占空比时,发现高电平宽度随信号频率变化而漂移,导致占空比计算错误。本文从输入捕获原理出发,深入分析预分频器与捕获边沿配置对测量结果的影响,揭示漂移的根源,并提供完整的配置步骤、代码示例与排查清单,帮助开发者彻底解决这一常见问题。
STM32 HAL库中__weak函数被覆盖后中断服务程序不执行的排查路径
嵌入式 · 👁 6 阅读
在STM32开发中,使用HAL库时经常遇到中断服务程序不执行的问题,尤其是当用户覆盖了__weak函数后。本文深入分析__weak机制、中断向量表与回调函数的关系,提供从现象到根因的完整排查路径,涵盖启动文件分析、链接脚本检查、调试技巧,并给出可复现的代码示例与避坑指南,帮助开发者快速定位并解决此类疑难问题。
STM32 HAL库中HAL_Delay在中断上下文失效的根因与替代延时方案
嵌入式 · 👁 6 阅读
本文深入剖析STM32 HAL库中HAL_Delay在中断上下文中失效的根本原因,指出其依赖SysTick中断与轮询计数标志的机制在中断嵌套时导致死锁或延时不准。文章提供三种替代延时方案:基于DWT周期计数器的忙等待、硬件定时器单次触发延时以及中断安全的非阻塞状态机延时,并给出完整代码示例与配置步骤,最后总结关键注意事项,帮助开发者在中断服务程序中实现精准可靠的延时。
FreeRTOS中vTaskDelay与vTaskDelayUntil混用导致周期任务漂移的排查实录
嵌入式 · 👁 6 阅读
本文记录了一次嵌入式项目中FreeRTOS周期任务出现时间漂移的排查过程。通过逻辑分析仪抓取波形,发现任务周期逐渐偏移,最终定位为vTaskDelay与vTaskDelayUntil混用所致。文章详细剖析两者原理差异,给出正确配置步骤与完整代码示例,并总结避免周期漂移的注意事项,适合有一定FreeRTOS基础的开发者参考。
FreeRTOS周期性任务:vTaskDelay与vTaskDelayUntil的相位漂移实测对比
嵌入式 · 👁 6 阅读
在FreeRTOS中实现周期性任务时,vTaskDelay与vTaskDelayUntil的选择直接影响任务的时间精度。本文从调度原理出发,分析两者产生相位漂移的根本原因,并基于STM32F407给出可复现的实测代码与数据,对比100ms周期下运行1000次的累计误差,最后总结选型建议与工程注意事项,帮助开发者避开周期性任务的时间陷阱。
FreeRTOS中vTaskDelay与软件定时器混用时优先级反转的隐蔽触发场景
嵌入式 · 👁 4 阅读
本文揭示FreeRTOS中vTaskDelay与软件定时器混用导致的隐蔽优先级反转:定时器服务任务与高优先级任务共享队列时,低优先级任务通过vTaskDelay让出CPU反而延长高优先级任务的阻塞时间。文章剖析Timer Queue与Daemon Task交互原理,给出可复现代码、配置步骤与规避策略,帮助开发者在嵌入式项目中定位此类非典型反转。
从一次HardFault定位到栈溢出:FreeRTOS任务栈水位检测与溢出钩子的实战配置
嵌入式 · 👁 3 阅读
一次偶发的HardFault往往源于不起眼的任务栈溢出。本文从真实调试现场出发,讲解Cortex-M异常现场分析与FreeRTOS栈溢出检测原理,手把手配置configCHECK_FOR_STACK_OVERFLOW、vApplicationStackOverflowHook与uxTaskGetStackHighWaterMark,并给出栈水位监控与栈大小估算的完整代码,帮助你在产品上线前把栈溢出隐患消灭在萌芽状态。
DMA+空闲中断实现STM32串口不定长接收:帧尾超时判定的三种策略对比
嵌入式 · 👁 6 阅读
串口不定长接收是嵌入式开发中的常见需求,DMA+空闲中断方案能高效处理数据帧。但空闲中断触发时机受波特率、数据量影响,帧尾超时判定策略直接决定通信可靠性。本文深入剖析三种主流策略:纯空闲中断、定时器辅助超时、DMA传输完成+空闲中断,从原理、配置步骤到完整代码逐一对比,并给出选型建议与避坑指南,助你构建稳定的串口通信框架。
用DWT周期计数器在Cortex-M上做微秒级函数耗时统计的实操方法
嵌入式 · 👁 18 阅读
在嵌入式开发中,精确测量函数执行时间对性能优化至关重要。本文介绍如何利用Cortex-M内核自带的DWT周期计数器,实现纳秒级分辨率的耗时统计。内容涵盖DWT工作原理、寄存器配置、完整代码实现及注意事项,帮助开发者快速掌握这一高效调试技巧,无需额外硬件即可精准定位性能瓶颈。
FreeRTOS任务通知替代二值信号量:内存与性能实测对比
嵌入式 · 👁 22 阅读
在FreeRTOS中,二值信号量常用于任务同步,但任务通知作为更轻量的替代方案,能显著节省内存并提升性能。本文深入分析任务通知与二值信号量的原理差异,通过STM32实测对比内存占用与上下文切换时间,并提供完整的配置步骤与代码示例,最后总结使用注意事项,帮助开发者在资源受限的嵌入式系统中做出最优选择。
ESP32双核任务分配实战:用xTaskCreatePinnedToCore隔离Wi-Fi协议栈与业务逻辑,实测延迟对比
嵌入式 · 👁 22 阅读
ESP32双核常被当作单核使用,导致Wi-Fi协议栈与业务逻辑争抢CPU,引发延迟抖动。本文深入讲解FreeRTOS双核调度原理,演示如何用xTaskCreatePinnedToCore将Wi-Fi任务固定到Core 0、业务逻辑固定到Core 1,并给出完整代码与实测延迟数据。实验表明,隔离后业务任务延迟降低约60%,抖动显著减小。适合有一定FreeRTOS基础的嵌入式开发者。
基于Cortex-M内核的HardFault现场还原:从栈帧解析到精确故障指令定位
嵌入式 · 👁 20 阅读
HardFault是Cortex-M开发中最棘手的异常之一,往往导致系统死机且难以定位。本文深入剖析Cortex-M内核的异常压栈机制,手把手教你通过解析栈帧、读取SCB寄存器,精确还原故障现场并定位到触发异常的指令地址。包含完整可移植的C代码实现与常见陷阱分析,助你彻底告别“盲调”HardFault。