STM32的DMA操作

目录

DMA概述

STM32中的DMA

DMA的通道

DMA处理

数据传输方向

DMA_CCRx寄存器

DMA通道x配置寄存器(DMA_CCRx)(x = 1...7)

仲裁器

DMA通道x配置寄存器(DMA_CCRx)(x = 1...7)

​可编程的数据量

DMA通道x配置寄存器(DMA_CCRx)(x = 1...7) 

指针增量

存储器到存储器

通道传输数据量

 中断

通道的配置过程

DMA相关函数配置

DMA_Init

DMA_Cmd

 DMA_ITConfig 

DMA_SetCurrDataCounter

DMA_GetCurrDataCounter

DMA_GetFlagStatus

 DMA_ClearFlag

DMA_GetITStatus

DMA_ClearITPendingBit

常用的外设DMA使能库函数

ADC

DAC

​USART

​I2C

​TIM 

 DMA的初始化配置

1. 使能DMA时钟

2. 初始化DMA通道参数

3. 使能DMA发送,使能外设DMA使能函数

4. 使能DMA通道,启动传输

5. 查询DMA传输状态

6. 获取或设置通道当前剩余数据量


DMA概述

Direct Memory Access

直接存储器访问

DMA传输将数据从一个地址空间复制到另一个地址空间

由CPU初始化这个DMA传输动作,动作本身由DMA控制器完成

DMA传输通过硬件为RAM和IO设备之间开辟一条直接传输数据的通道,提高了CPU的运行效率

STM32中的DMA

STM32最多有2个DMA控制器,其中大容量产品有2个DMA控制器,小容量产品只有1个

DMA1有7个通道,DMA2有5个通道

每个通道专门用来管理来自于一个或多个外设对存储器访问的请求

还有一个仲裁协调各个DMA请求的优先权

STM32的DMA具有以下特征:

  • 每个通道都直接连接专用的硬件DMA请求,支持软件触发,可以通过软件进行配置
  • 优先级可以通过软件编程设置,共4级
  • 独立的源和目标数据区的传输宽度,模拟打包和拆包过程,源和目标地址必须按数据传输宽度对齐
  • 支持循环的缓冲器管理
  • 每个通道都有3个事件标志(DMA半传输,DMA传输完成,DMA传输出错),这3个事件都可以成为单独的中断 
  • 外设和存储器,存储器和外设,存储器和存储器之间
  • 存储包括:FLASH,SRAM,外设的SRAM
  • 外设包括:APB1,APB2和AHB
  • 可编程的数据传输数目:最大为65536

DMA的通道

DMA1有7个通道

DMA处理

在发生一个事件后,外设向DMA控制器发送一个请求信号。DMA控制器根据通道的优先权处理请求

当DMA控制器开始访问发出请求的外设时,DMA控制器立即发送给他一个应答信号

当从DMA控制器得到应答信号时,外设立即释放它的请求,一旦释放了这个请求,DMA控制器同时撤销应答信号

每次DMA传送由3个操作完成:

  • DMA_CPARx存储的是外设的基地址,DMA_CMARx存储额是存储器的基地址,这两个要先赋值好
  • DMA_CNDTRx包含未完成操作的数目,在DMA_CNDTRx寄存器中,每完成一次发送,这个DMA_CNDTRx寄存器的值会减1

数据传输方向

DMA_CCRx寄存器

DMA通道x配置寄存器(DMA_CCRx)(x = 1...7)

仲裁器

DMA通道x配置寄存器(DMA_CCRx)(x = 1...7)

同样是在这个寄存器,可以配置通道的优先级

可编程的数据量

DMA通道x配置寄存器(DMA_CCRx)(x = 1...7) 

源和目标的数据宽度一致时是最方便的

指针增量

存储器到存储器

还需要设置DMA_CCRx的MEM2MEM位

通道传输数据量

在DMA_CNDTRx寄存器中配置,虽然这是一个32的寄存器,但是只用到了低16位,所以最大数据量为2的16次方-1

 中断

通道的配置过程

1. 设置DMA_CPARx(外设地址)和DMA_CMARx(存储器地址)的值

2. 设置传输方向,通过DMA_CCRx寄存器

3. 设置传输数据量,在DMA_CNDTRx寄存器

4. 设置传输优先级,在DMA_CCRx寄存器中

5. 设置是否循环模式,外设和存储器的增量模式

6. 数据宽度,中断配置,5和6都是在DMA_CCRx寄存器中进行配置

7. 在DMA_CCRx寄存器中进行ENABLE位的配置

当传输一半的数据后,半传输标志HTIF为1,当设置了允许半传输中断位HTIE时,将产生中断请求。在传输数据结束后,传输完成标志TCIF为1,当设置了允许传输完成中断位TCIE后,将产生一个中断请求


DMA相关函数配置

DMA_Init

DMA_Cmd

 DMA_ITConfig 

DMA_SetCurrDataCounter

DMA_GetCurrDataCounter

DMA_GetFlagStatus

 DMA_ClearFlag

DMA_GetITStatus

DMA_ClearITPendingBit


常用的外设DMA使能库函数

ADC

DAC

USART

I2C

TIM 


 DMA的初始化配置

1. 使能DMA时钟

2. 初始化DMA通道参数

3. 使能DMA发送,使能外设DMA使能函数

4. 使能DMA通道,启动传输

5. 查询DMA传输状态

6. 获取或设置通道当前剩余数据量

版权声明:本文为CSDN博主「CodeForCoffee」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_24118527/article/details/122765608

生成海报
点赞 0

CodeForCoffee

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

STM32F1系列的ADC配置

目录 ADC引脚 注入通道与规则通道 1. 注入通道 2. 规则通道 ​ADC时钟 ADC的触发事件 ​ ADC的运行模式 1. 单次转换模式 2. 连续转换模式 3. 扫描模式  ADC的中断 ADC的时钟 RCC

STM32实现SPI通信1

目录 SPI的结构框图 STM32的SPI模块 从选择NSS管理 软件NSS 硬件NSS 时钟信号的相位与极性 数据帧格式 状态标志 SPI中断 STM32F103RCT6的SPI1引脚​ SPI模块引脚配置的GPIO模式

STM32实现软件I2C通信

目录 I2C协议 1. 空闲状态 2. 开始信号 3. 停止信号 4. 应答信号ACK 5. 数据的有效性 6. 数据传输 I2C的实现 IIC_Init II2_START​ IIC_Stop​ IIC_Wait_Ack​