STM32---关于DMA的入门详解

为了说清楚,以及通俗易懂的讲解,以下分几部分来讲解DMA**

一、DMA 是什么?**

想象一下:你(CPU)是一个老板,平时要处理很多事,比如接电话、写报告、开会......

现在你要把一份大文件从办公室 A 搬到办公室 B。

没有 DMA 的情况(传统方式):

你得亲自一趟趟跑,搬一页、放一页,全程自己动手。这期间你就没法干别的事了------效率低,还累!

有了 DMA 的情况:

你叫来一个"快递小哥"(DMA 控制器),告诉他:"把 A 办公室的 100 页文件搬到 B 办公室。"

然后你继续开会、写邮件,完全不用管搬运过程。等快递小哥搬完,他会敲门告诉你:"老板,搞定啦!"

👉 DMA 就是这个"快递小哥":它可以在不占用 CPU 的情况下,自动在内存、外设之间搬运数据。

二、DMA 怎么用?(简单流程)

虽然不同单片机(比如 STM32、ESP32)配置细节不同,但基本步骤类似:

  1. 告诉 DMA 要搬什么:源地址(比如 ADC 的数据寄存器)、目标地址(比如一个数组)。
  2. 告诉它搬多少:比如 1000 个字节。
  3. 设置方向:是从外设到内存?还是内存到外设?还是内存到内存?
  4. 启动 DMA:让它开始工作。
  5. (可选)设置中断:搬完后通知 CPU 做后续处理。

对小白来说:很多开发板(如 STM32)有图形化配置工具(比如 STM32CubeMX),点几下就能生成初始化代码,不用手写复杂寄存器。

三、什么时候需要用 DMA?

当你遇到以下情况,就该考虑 DMA 了:

✅ 场景 1:高速采集传感器数据(比如音频、ADC)

  • 例子:用麦克风录音,每秒要采样 8000 次。
  • 如果用 CPU 一个个读,会忙死,还可能丢数据。
  • 用 DMA:让 ADC 一有新数据,DMA 自动存到数组里,CPU 只需偶尔处理整段音频。

✅ 场景 2:串口(UART)收发大量数据

  • 例子:通过串口接收一整张图片的数据(几千字节)。
  • 不用 DMA:CPU 要不断进中断,一个字节一个字节收,很卡。
  • 用 DMA:DMA 一次性把所有数据收到缓冲区,CPU 收完再处理。

✅ 场景 3:驱动显示屏(如 LCD、OLED)

  • 屏幕刷新需要快速发送大量像素数据。
  • 用 DMA 把图像数据从内存直接"推"给屏幕控制器,画面更流畅。

✅ 场景 4:SD 卡或 Flash 读写

  • 大文件读写时,DMA 可以高效搬运数据,避免 CPU 被拖慢。

四、总结一句话

DMA 就是让"快递小哥"帮你搬数据,你(CPU)可以专心干更重要的事,系统更高效、更实时!

相关推荐
虎王物联9 小时前
STM32 HAL库串口DMA空闲中断:高效接收不定长Modbus数据帧
stm32·单片机·嵌入式硬件·dma·modbus
自小吃多9 小时前
DXF文件导入与PCB板框定义笔记
笔记·嵌入式硬件
SUNNYSPY0019 小时前
AO4402-ASEMI便携设备电源开关AO4402
单片机
单片机仿真设计12 小时前
【proteus仿真】基于 STC89C52 单片机家用智能台灯设计(仿真图+程序)
stm32·单片机·嵌入式硬件·proteus·毕设
2601_9507906812 小时前
深圳国产单片机厂商怎么选?技术能力与服务能力检查表
单片机·嵌入式硬件·国产mcu·芯片厂商·深圳单片机·单片机选型
hongmai66688813 小时前
MP2348GTL-Z:这颗24V/4A同步降压芯片,把性能和体积平衡得恰到好处
c语言·开发语言·arm开发·单片机·5g
笨笨饿14 小时前
#135_代码中的类型重定义艺术:从基础封装到函数类型设计
开发语言·stm32·单片机·嵌入式硬件·mcu·物联网·嵌入式实时数据库
西城微科方案开发14 小时前
高精度低功耗胎压计方案——气压表解决方案
单片机·嵌入式硬件
LavaLin0115 小时前
STM32H562RGT6 与 STM32F722RET6 规格对比
stm32
VALENIAN瓦伦尼安教学设备16 小时前
设备状态检测振动分析实训台案例分析
大数据·数据库·人工智能·嵌入式硬件·算法