STM32F103 “BluePill” 上的 DMA 原理与实践

摘要:本文深入浅出地介绍什么是 DMA(直接存储器访问),它的核心原理、硬件架构,以及在 STM32F103(BluePill)上常见的几种使用场景(ADC、UART、内存拷贝等)。通过对比 CPU 轮询、中断、DMA 三种方式的数据搬运效率,结合寄存器级和 HAL 库示例代码,并附带性能测试与优化建议,帮助你在实际项目中高效地利用 DMA 降低 CPU 占用、提高实时性。


目录

  1. 引言

  2. DMA 基础概念

  3. STM32F1 系列的 DMA 控制器架构

  4. DMA 工作流程详解

  5. DMA 常见模式

  6. DMA 与 UART 串口通信

  7. DMA 与 ADC 数据采集

  8. 内存到内存拷贝:DMA 也能做 memcpy

  9. 在 BluePill 上使用寄存器级配置 DMA

  10. 用 STM32CubeMX 和 HAL 库更省心地用 DMA

  11. 性能对比与注意事项

  12. 优化建议

  13. 总结与展望

  14. 参考文献


1. 引言

在嵌入式系统中,外设与内存之间经常需要搬运大量数据——比如 ADC 连续采样、UART 收发大块报文、DMA 做内存拷贝等。如果全部依赖 CPU 轮询或中断,会带来:

  • CPU 占用高:处理每个字节都要打断或忙等。

  • 实时性差:大量中断可能导致其他关键任务丢帧。

  • 效率低下:总线利用率不佳。

STM32 家族片上集成的 DMA 控制器,可在不干扰 CPU 的情况下直接在内存和外设间搬运数据。正确使用 DMA,能将数据搬运任务交给专用硬件,CPU 只需“下达命令、收尾处理”,极大提高系统整体效率。本篇文章围绕 STM32F103(也就是常见的 “BluePill”)展开,既有底层原理,又有寄存器级、HAL 库两套实战示例,帮助你快速上手。


2. DMA 基础概念

  • DMA 控制器:片上独立模块,具有多个“通道”(Channel)或“流”(Stream)用于管理不同搬运任务。

  • 通道 Channel:用户配置源地址、目标地址、数据长度、传输方向、地址自增模式、中断使能等。每个通道相当于一条搬运“管道”。

  • DMA 请求:外设(如 UART、ADC、SPI)在准备好数据或空闲可写时,会给出硬件信号,触发 DMA 从源到目标的一次搬运。

  • 总线主控权(Bus Master):DMA 控制器可暂时接管系统总线,直接访问内存和外设寄存器,无需 CPU 干预。

优势

  • 零 CPU 干预&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

damo王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值