DMA简介
DMA:Data Memory Access,直接存储器访问。主要功能是可以把数据从一个地方搬到另外一个地方而且不占用CPU。
DMA1:有7个通道,可以实现P->M,M->P,M->M
DMA2∶有5个通道,可以实现P->M,M->P,M->M
这里的通道 可以理解为传输数据的一种管道。要注意的是DMA2只存在于大容量产品和互联型产品中。
DMA功能框图

1-DMA请求
如果外设要想通过DMA来传输数据,必须先给DMA控制器发送DMA请求,DMA收到请求信 号之后,控制器会给外设一个应答信号,当外设应答后且DMA控制器收到应答信号之后,就会 启动DMA的传输,直到传输完毕。
2-通道
不同的DMA控 制器的通道对应着不同的外设请求,这决定了我们在软件编程上该怎么设置
DMA1请求映像表

DMA2请求映像表

M->M 时全部通道都可以使用
其中ADC3、SDIO和TIM8的DMA请求只在大容量产品中存在,这个在具体项目时要注意。
每个通道对 应不同的外设的DMA请求。虽然每个通道可以接收多个外设的请求,但是同一时间只能接收一 个,不能同时接收多个
3-仲裁器
当发生多个DMA通道请求时,就意味着有先后响应处理的顺序问题,这个就由仲裁器也管理。
仲裁器管理DMA通道请求分为两个阶段。
第一阶段属于软件阶段
可以在DMA_CCRx寄存器 中设置,有4个等级:非常高、高、中和低四个优先级。
第二阶段属于硬件阶段
如果两个或以 上的DMA通道请求设置的优先级一样,则他们优先级取决于通道编号,编号越低优先权越高, 比如通道0高于通道1。
在大容量产品和互联型产品中,DMA1控制器拥有高于DMA2 控制器的 优先级。
DMA相关库函数讲解
DMA_InitTypeDef
typedef struct
{
uint32_t DMA_PeripheralBaseAddr;
uint32_t DMA_MemoryBaseAddr;
uint32_t DMA_DIR;
uint32_t DMA_BufferSize;
uint32_t DMA_PeripheralInc;
uint32_t DMA_MemoryInc;
uint32_t DMA_PeripheralDataSize;
uint32_t DMA_MemoryDataSize;
uint32_t DMA_Mode;
uint32_t DMA_Priority;
uint32_t DMA_M2M;
}DMA_InitTypeDef;

DMA_DIR_PeripheralDST 外设是目的地 即: M->P
DMA_DIR_PeripheralSRC 外设是源 即: P->M
前面三个成员决定了要从哪里来到那里去

可编程的数据传输宽度、对齐方式和数据大小端

总结:小方大 将小的放在头部 大放小 要头不要尾


648

被折叠的 条评论
为什么被折叠?



