DMA Direct Memory Access(直接存储器访问)

DMA能干的事,核心就是三种传输方向:

传输方向说明典型场景
外设 → 存储器从外设读取数据存到内存ADC采集数据存入数组
存储器 → 外设从内存取出数据发给外设内存数据通过串口发送
存储器 → 存储器内存之间相互搬运RAM数据拷贝到另一块RAM

存储器:

  • ✅片内 RAM(内存)
  • ✅外部 SRAM / SDRAM(外接内存)
  • ✅片内 Flash(只能做源,不能做目标)
  • ✅外接映射的外部存储(FMC 挂载的器件)

DMA一次最多可搬运 1~65535个 数据单元,每个单元可以是字节(8位)、半字(16位)或全字(32位)。

此外,DMA还支持两种传输模式:

  • 普通模式:传完一批数据就停止
  • 循环模式:传完后自动重新开始,循环往复

凡是需要频繁搬运数据、但又不想让CPU被占满的场景,都适合用DMA:

  1. ADC连续采样:ADC不断采集数据,DMA自动把结果搬进内存数组
  2. 串口(UART)通信:收发大量数据时用DMA搬运,CPU可以去处理其他任务
  3. SPI/I2C总线通信:与外部传感器、存储器批量交换数据
  4. 音频/波形处理:DAC播放音频时,DMA从内存持续搬运数据给DAC
  5. 内存数据拷贝:在SRAM不同区域之间快速搬移数据
  6. 显示屏刷新:将图像数据从内存搬运到显示控制器