自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 DMA 全深度解析(4):DMA+PWM实现单总线协议

本文介绍了利用STM32的DMA+TIM PWM实现非标准时序协议的高效通信方案。针对WT588F02B语音模块的一线串口协议,传统CPU软件延时方式会完全占用CPU资源(11.4ms/字节),而DMA方案通过预存比较值数组,由DMA自动搬运到定时器CCR寄存器生成精确PWM波形,使CPU仅在准备数据时短暂工作(<1us),其余时间完全空闲。该方案具有硬件定时精度、零CPU占用、支持多任务等优势,并可扩展应用于DHT11、WS2812等多种非标准协议。文章详细对比了两种实现方式的性能差异,并提供了完整

2026-05-20 23:19:49 716

原创 DMA 全深度解析(3):环形缓冲区(Ring Buffer)的实现

本文介绍了一种基于STM32F4+FreeRTOS+HAL的UART-DMA串口采集系统设计方案。通过环形缓冲区(RingBuffer)实现异步数据采集与同步处理的解耦,采用"中间件+BSP+APP"三层架构设计,包含DMA CIRCULAR模式持续写入、中断回调更新指针、队列通知同步等核心机制。系统支持半满/全满中断和空闲中断互补触发,结合状态机实现帧协议解析,有效解决了串口通信中的数据错乱和丢包问题。测试验证表明,该方案在保证数据完整性的同时提高了处理效率,适用于GPS、蓝牙、传感器

2026-05-14 23:58:09 535

原创 DMA 全深度解析(2):AB-buffer的实现

本文介绍了AB双缓冲(乒乓缓冲区)在嵌入式开发中的应用,重点解决连续数据流处理中的核心矛盾:数据接收与处理的并行冲突。通过STM32F4+FreeRTOS+HAL库实现了一套完整的ADC-DMA采集系统,采用双缓冲交替工作模式(DMA写BufferA时CPU处理BufferB,反之亦然),配合互斥锁保护和优先级继承机制,确保数据处理的同步与安全。系统包含管理线程(高优先级)、处理线程和DMA中断回调,通过轻量级任务通知实现高效通信,并具备背压检测功能防止数据覆盖。文章详细解析了架构设计、代码实现和验证要点,

2026-05-13 22:25:31 682

原创 DMA 全深度解析(1):从总线原理到实战配置

本文详细介绍了STM32F4中DMA(直接存储器访问)技术的原理与应用。DMA通过独立控制器接管数据搬运任务,实现CPU与外设并行工作,大幅提升系统效率。文章从DMA解决的问题入手,分析了STM32F4的DMA架构、三种传输方向(外设-内存、内存-外设、内存-内存)及核心机制(总线仲裁、FIFO缓冲、突发传输)。同时提供了CubeMX配置指南、常见错误规避方法以及中断处理技巧。最后总结了DMA的关键特性与配置要点,并列出面试常见问题,帮助开发者全面掌握这一提升嵌入式系统性能的重要技术。

2026-05-10 23:50:39 574 1

原创 深剖Cortex-M内核J-Link烧录原理:从协议到配置FLM文件

本文深入解析了Cortex-M内核下J-Link烧录的工作原理与FLM文件制作方法。主要内容包括: J-Link烧录原理:通过SWD/JTAG协议实现"初始化-擦除-写入-校验"的完整流程,利用Cortex-M的DAP调试端口直接操作Flash控制器。 FLM文件核心作用:作为Keil与J-Link间的桥梁,封装Flash参数(容量、扇区等)和操作指令(擦除、写入等),需与芯片规格严格匹配。 自制FLM文件步骤:通过修改FlashDev.c定义参数、FlashPrg.c实现操作函数,编译

2026-04-30 15:23:36 651 1

原创 [实验] 嵌入式系统中断延时优化

本文通过实验探究了中断向量表和中断回调函数在RAM与Flash不同存放组合对嵌入式系统中断延时的影响。实验采用四组对照方案,在Cortex-M4平台上测量中断触发到执行回调函数的延时。结果显示:中断向量表放在RAM、回调函数放在Flash的组合表现最优,平均延时600ns;而全RAM配置反而延时最高(807ns)。核心结论表明:将中断向量表置于RAM可显著降低"启动环节"延时,而回调函数利用Flash加速机制即可满足实时性要求。这为嵌入式实时系统中断优化提供了有效方案,既能降低延时又可节

2026-04-22 19:43:14 542

原创 吃透ARM内存分布:从面试高频题到高阶优化,一篇全搞定

本文以嵌入式高频面试题为切入点,系统讲解 ARM Cortex‑M4 单片机的内存分布与运行机制。首先辨析 ROM 与 RAM 的本质区别,深入解析 M4 内核 32 位统一地址空间的内存映射原理,以及 CPU 访问片内 / 外部地址的实现逻辑;随后详细拆解 .text、.data、.bss、.rodata、堆、栈等段的存储规则与地址分布,明确各类代码与变量在 Flash 和 RAM 中的存放位置;接着结合实战介绍如何通过 SCT 分散加载文件定制存储区域,并利用 .map 文件查看内存布局、定位占用与溢出

2026-04-13 22:47:06 912 2

原创 深入 ARM Cortex-M4 内核:单片机从上电到应用的全链路驱动流程解析

本文聚焦单片机启动与全局变量存储的底层原理,直面面试高频考题:“程序是否从main()启动?”“有初值的全局变量重启后如何恢复?”“全局变量存在哪里?为何初始化与未初始化变量内存分段?”​从ARM Cortex-M4硬件复位出发,剖析启动文件(Reset_Handler)的全流程:上电后PC指向复位向量,启动代码完成时钟、栈初始化,通过.data段拷贝(恢复有初值全局变量)、.bss段清零(处理未初始化变量),最终调用main()。结合RTOS任务切换(SVC/PendSV异常、MSP/PSP堆栈切换)

2026-04-08 22:56:13 669

原创 Keil MDK 开发全流程核心生成文件详解(纯技术干货版)

嵌入式开发中Keil编译生成的文件详解 本文系统梳理了Keil开发环境下各类编译生成文件的核心作用与实用价值。从工程配置类的.sct分散加载文件和.uvprojx工程文件,到编译中间产物.i预处理文件和.s汇编文件,再到链接阶段生成的.o目标文件和.axf调试镜像,最后到量产固件.hex/.bin文件,完整呈现了嵌入式程序从源码到可执行文件的转换链条。重点解析了.map内存映射文件的结构与调试价值,包括段交叉引用表、未使用段清理日志、本地符号表和全局符号表等关键信息。这些文件共同构成了项目编译的底层架构。

2026-04-03 20:08:17 890

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除