1.DMA概念介绍
DMA,全称Direct Memory Access,即直接存储器访问。
DMA传输 将数据从一个地址空间复制到另一个地址空间。
注意:DMA传输无需CPU直接控制传输
2.DMA框图
3.DMA处理过程
外设的 8 个请求独立连接到每个通道,由 DMA_SxCR 控制数据流选择哪一个通道,每个
数据流有 8 个通道可供选择,每次只能选择其中一个通道进行 DMA 传输。
5 DMA优先级
第一阶段(软件阶段):每个通道的优先级可在DMA_CCRx寄存器中设置,有四个等级:最高、高、中和低优先级。
第二阶段(硬件阶段):如果两个请求有相同软件优先级,较低编号的通道比较高编号的通道有较高的优先级。
6.寄存器
7.DMA句柄结构体
typedef struct __DMA_HandleTypeDef
{
void Instance; / 寄存器基地址 /
DMA_InitTypeDef Init; / DAM 通信参数 */
uint32_t StreamBaseAddress
uint32_t StreamIndex
…
}DMA_HandleTypeDef;
typedef struct
{
uint32_t Channel; /* 传输通道,例如:DMA_CHANEL_4 /
uint32_t Direction; / 传输方向,例如存储器到外设 DMA_MEMORY_TO_PERIPH /
uint32_t PeriphInc; / 外设(非)增量模式,非增量模式 DMA_PINC_DISABLE /
uint32_t MemInc; / 存储器(非)增量模式,增量模式 DMA_MINC_ENABLE /
uint32_t PeriphDataAlignment; / 外设数据大小:8/16/32 位 /
uint32_t MemDataAlignment; / 存储器数据大小:8/16/32 位 /
uint32_t Mode; / 模式:外设流控模式/循环模式/普通模式 /
uint32_t Priority; / DMA 优先级:低/中/高/非常高 */
}DMA_InitTypeDef;
8 8.2以DMA方式传输串口数据配置步骤
注意:
DMA传输四个核心参数:
1 数据的源地址。
2 数据传输位置的目标地址。
3 传递数据多少的数据传输量 。
4 进行多少次传输的传输模式。
当用户将参数设置好,主要涉及源地址、目标地址、传输数据量这三个,DMA控制器就会启动数据传输,当剩余传输数据量为0时 达到传输终点,结束DMA传输 ,当然,DMA 还有循环传输模式 当到达传输终点时会重新启动DMA传输。
代码:
8.1 dma.c
//DMA数据传输(内存到内存的传输)实现步骤:
//1.全局变量与宏定义
//1.1源与目标缓冲区定义
//2.函数定义
//初始化DMA配置