DMA (Direct Memory Access): 无需CPU直接控制传输,通过硬件为RAM与I/O设备开辟直接传输数据的通道,提高系统效率。

STM32F4 DMA特性
- STM32F4具有2个DMA控制器 (DMA1和DMA2),共16个数据流 (每个控制器8路),每个数据流有8个通道,大部分外设均可通过DMA控制。
- 四种传输方式:
- 外设到内存
- 内存到外设
- 内存到内存
- 外设到外设
- 需要设置:源地址、目标地址、传输数据类型/长度。
DMA结构
包括DMA控制器、通道请求、仲裁器、流控制器、FIFO、AHB主从接口等。

DMA应用
- 高速AD采样,数据批量处理。
- 任意波形发生器,表格数据直接送DA转换。
DMA应用设计:UART1接收数据到SRAM
- 选择DMA:根据DMA请求映射表,选择DMA控制器、数据流和通道 (如DMA2 Stream5 Channel4 for USART1_RX)。
- 获取地址:USART1数据寄存器地址 (
&USART1->DR
),SRAM目标缓冲区地址。
- 编程:
- 串口初始化。
- DMA初始化 (
DMA_InitTypeDef
): - 使能DMA时钟。
- 配置:通道、外设基地址、内存基地址、传输方向 (外设到内存)、缓冲区大小、外设/内存地址是否自增、外设/内存数据宽度、模式 (普通/循环)、优先级、FIFO模式及阈值、内存/外设突发传输。
DMA_Init()
。- (可选)配置DMA中断。
DMA_Cmd()
使能DMA流。
- 中断程序:如
DMA2_Stream5_IRQHandler
,判断中断状态 (DMA_GetITStatus()
),处理数据,清中断标志 (DMA_ClearITPendingBit()
)。