STM32-DMA讲解

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

前面三个成员决定了要从哪里来到那里去

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值