STM32 串口DMA收发数据
一、STM32 DMA简介与功能说明
1、STM32F4 DMA简介
DMA(Direct memory access),即直接存储器访问。用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输的一种方式。它无需CPU参与,也没有中断处理等过程,通过硬件方式为RAM与I/O设备提供一条直接传送数据的通道。 STM32F4有2个DMA控制器,每个DMA控制器有8个数据流,每个数据流有8个通道(或请求)。其中2个DMA的请求映射如下:
2、DMA主要特性
- 每个DMA控制器有8个数据流(stream),每个数据流有8个通道
- 每个数据有单独的四级32bit先进先出存储器缓冲区(FIFO),可用FIFO模式或直接模式:
FIFO模式:可通过软件将阈值级别选取为FIFO大小的1/4、1/2或3/4
直接模式:每个DMA请求会立即启动对存储器的传输。当在直接模式下降DMA请求配置为以存储器到外设模式传输数据时,DMA仅会将一个数据从存储器预加载到内部FIFO,从而保证一旦外设触发DMA请求时则立即传输数据 - DMA数据流请求之间的优先级可通过软件编程的方式决定(4个级别:非常高、高、中、低),在软件优先级相同的情况下可以通过硬件决定优先级(例如:请求0的优先级高于请求1)
- 要传输的数据的数目可以由DMA控制器或外设管理:
DMA流控制器:要传输的数据数量范围1~65535,可用软件编程
外设流控制器:要传输的数据数量未知,由源或目标外设控制 - 每个数据流都支持循环缓冲区管理
有5个事件标志(DMA半传输、DMA传输完成、DMA传输错误、DMA FIFO错误、直接模式错误),进行逻辑或运算,从而产生每个数据流的单个中断请求。
3、DMA传输方向
- 外设到存储器的传输
- 存储器到外设的传输
存储器到存储器的传输(仅DMA2可用)
4、DMA事务
DMA事务有给定数目的数据传输序列组成。其数据传输宽度(8bit、16bit、32bit)可用软件编程。
每个DMA传输包含三项操作:
- 通过DMA_SxPAR(外设)或DMA_SxM0AR(存储器)寄存器寻址,从外设数据寄存器或存储器单元中加载数据。
- 通过DMA_SxPAR或DMA_SxM0AR寄存器寻址,将加载的数据存储到外设数据寄存器或存储器单元中。
- DMA_SxNDTR计数器在数据存储结束后递减,该计数器中包含仍需执行的事务数。
5、DMA数据流
8个数据流都可以提供源和目标之间的单向传输链路。
每个数据流配置后都可以执行:
- 常规类型事务:存储器到外设、外设到存储器或存储器到存储器的传输。
- 双缓冲区类型事务:使用存储器的两个存储器指针的双缓冲区传输(当DMA正在进行自/至缓冲区的读/写操作时,应用程序可以进行至/自其它缓冲区的写/读操作)
6、源、目标和传输模式
传输方向使用DAM