×
单片机 > 单片机程序设计 > 详情

stm32标准库dma初始化详解

发布时间:2020-06-05 发布时间:
|

 STM32的DMA有三种类型的传输

1.M-M(内存到内存) 

2.M-P(内存到外设)

3.P-M(外设到内存)

   STM32的标准库函数提供了一个STM32的初始化结构体如下;

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;

上述结构体是STM32的初始化结构体,从上面的结构体变量定义,我们初始化DMA的时候可以分三步走:

第一步:从哪里来到那里去:这句话说明的是上述的第1-3条

  uint32_t DMA_PeripheralBaseAddr;//外设地址

  uint32_t DMA_MemoryBaseAddr; //内存地址

  uint32_t DMA_DIR;                       //传输方向

第二步:数据要传输多少,传的单位是多少:这句话说明的是上述的第4-8条

  uint32_t DMA_BufferSize;           //传输的数据多少

  uint32_t DMA_PeripheralInc;     //外设地址是否递增

  uint32_t DMA_MemoryInc;       //内存地址是否递增

  uint32_t DMA_PeripheralDataSize;   //外设数据宽度

  uint32_t DMA_MemoryDataSize;     //内存数据宽度

第三步:啥时候传输结束; 这句话说明的是传输的模式

  uint32_t DMA_Mode;                        //模式 


DMA的初始化步骤

1、打开DMA时钟

2、写入DMA初始化结构体数据

3,调用DMA_Init函数将结构体数据写入寄存器

4,清空DMA发送/接收完成标志位

5,调用DMA_Cmd函数开启DMA通道

如果是M-P则需要通过使能DMA请求例如:

USART_DMACmd(使能DMA串口请求)

如果是M-M则不需要使能DMA请求。

当打开DMA通道时直接就开始数据传输了。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法