stm32学习随记:DMA使用(HAL库)

1、stm32f103 有两个DMA

2、DMA1 有 7个通道, DMA2有5个通道。同一时间内是能使用一个通道,所以要设定好优先级。

    可以在 DMA_CCRx 寄存器中设 置,有最高优先级、高优先级、中等优先级和低优先级四个等级。

   第二阶段 是硬件,如果两个请求有相同的软件优先级,则较低编号的通道比高编号的 通道有较高的优先权。例如:通道 2 优先于通道 4

3、DMA 通道,每个通道都可以在由固定地址的外设寄存器和存储器之间执行 DMA 传输。 所以,我们要找到外设寄存器存放数据的地址 和 存储的变量的地址。

4、DMA有三种中断方式: 传输过半,传输完成和传输错误。

 

5、HAL函数部分,用stm32cube设置好DMA后,查看一下DMA的初始化。

01 typedef struct {
02 uint32_t Direction; // 方向
03 uint32_t PeriphInc; // 寄存器自增
04 uint32_t MemInc; // 内存自增
05 uint32_t PeriphDataAlignment; // 寄存器数据对齐
06 uint32_t MemDataAlignment; // 内存数据对齐
07 uint32_t Mode; // 模式
08 uint32_t Priority; // 优先级
09 } DMA_InitTypeDef;


 Direction:传输方向,有三种,分别是外设到存储器、存储器到外设和存储
器到存储器,根据工程要求来选择三种传输方向。
 PeriphInc:配置外设地址寄存器是否要自动递增,这里配置为递增
 MemInc:使能存储器地址自动递增功能。我们自定义的存储器一般都是存放
多个数据的,所以使能存储器地址自动递增功能。  PeriphDataAlignment:外设数据长度调整,有三种分别是字节、字和半字,配
置为字节。
 MemDataAlignment:存储器数据字长调整,类似外设。
 Mode:配置传输模式,配置为常规类型。  Priority:优先权,配置为高。

 

你可能感兴趣的:(stm32)