资讯详情

资讯详情

STM32 DMA 直接内存访问精讲|DMA 传输模式,外设 <-> 内存搬运,解放 CPU,寄存器底层解析

前言在 STM32 开发里,很多人写串口、ADC 采集代码,习惯在中断里搬运数据。一旦数据量变大,CPU 会频繁进出中断,占用大量算力,还容易出现丢数据、时序不稳。DMA 全称Direct Memory Access,直接内存访问。它的核心能力:不需要 CPU 参与,硬件自动完成内存、外设寄存器之间的数据搬运。CPU 只需要配置好参数,剩下的数据传输交给 DMA 硬件,传输完成后通过中断通知 CPU 即可。这是高性能嵌入式项目必备技术:串口大批量收发、ADC 多通道连续采样、SPI 高速读写、屏幕刷屏,几乎都会用到 DMA。一、DMA 底层硬件原理DMA 是独立于 Cortex-M 内核的硬件总线控制器,拥有独立的总线访问通道。CPU 和 DMA 可以并行访问存储器与外设,相当于开辟了一条数据高速通道。数据传输方向分三类:外设 → 内存:ADC 采样、串口接收。外设寄存器数据,自动存入数组。内存 → 外设:串口发送、SPI 输出、PWM 波形输出。数组里的数据自动写入外设 DR 寄存器。内存 → 内存:存储器之间拷贝(部分型号支持,例如 F1,可用来快速拷贝大块数据,不占用 CPU)关键底层知识点:DMA 每次传输完成一个数据单元(字节 / 半字 / 字),自动修改源地址、目标地址,传输指定长度的数据,完成后触发传输完成中断。DMA 核心传输模式正常模式(Normal)传输设定长度的数据后,DMA 停止工作。想要再次传输,需要软件重新启动。适用场景:
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →