10.3.1 DMA句柄及初始化
1.DMA句柄定义
DMA的句柄是用结构体DMA_HandleTypeDef定义的,用于对DMA控制器进行配置,定义如下。

句柄DMA_HandleTypeDef提供给所有DMA相关库函数使用,因此在应用相关函数之前,要先用句柄对DMA进行配置。
2.DMA初始化
DMA初始化是用一个结构体DMA_InitTypeDef完成的,包括初始化DMA传输方式、外设内存的地址是否递增、外设及内存数据宽度、工作模式和优先配置等参数。DMA_InitTypeDef结构体定义如下。

各语句功能如下。
①Direction:指定DMA数据传输方式,有以下3种传输方式可以选择。
•DMA_PERIPH_TO_MEMORY:外设到内存。
•DMA_MEMORY_TO_PERIPH:内存到外设。
•DMA_MEMORY_TO_MEMORY:内存到内存。
②PeriphInc和③MemInc:指定外设和内存的地址是否递增,其分别有以下两种选择方式。
•DMA_PINC_ENABLE:外设使能递增;DMA_PINC_DISABLE:外设禁止递增。
•DMA_MINC_ENABLE:内存使能递增;DMA_MINC_DISABLE:内存禁止递增。
④PeriphDataAlignment和⑤MemDataAlignment:指定外设数据宽度和内存数据宽度,有3种设置选择,即字节、半字、字。
•DMA_PDATAALIGN_BYTE:外设字节。(https://www.daowen.com)
•DMA_PDATAALIGN_HALFWORD:外设半字。
•DMA_PDATAALIGN_WORD:外设字。
•DMA_MDATAALIGN_BYTE:内存字节。
•DMA_MDATAALIGN_HALFWORD:内存半字。
•DMA_MDATAALIGN_WORD:内存字。
⑥Mode:指定DMA通道x的工作模式,有普通模式和循环模式。
注:若在所选通道上配置了内存到内存的数据传输,则不能使用循环模式。
•DMA_NORMAL:普通模式。
•DMA_CIRCULAR:循环模式。
⑦Priority:指定DMA通道x的软件优先级,有以下4种优先级设置。
•DMA_PRIORITY_LOW:低级。
•DMA_PRIORITY_MEDIUM:中等。
•DMA_PRIORITY_HIGH:高级。
•DMA_PRIORITY_VERY_HIGH:最高。
例如,要定义一个外设串口1用于DMA数据传输,程序如下。
