STM32 DMA学习

DMA简称

DMA,Direct Memory Access,即直接存储器访问。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,能使CPU的效率大为提高。

STM32F103内部有两个DMA控制器(DMA2仅存于大容量产品中),DMA1有7个通道。DMA2有5个通道。

每个通道专门用来管理一个或多个外设对存储器访问的请求。还有一个仲裁器协调各个DMA请求的优先权。

  1. 每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过软件来配置。
  2. 在七个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),假如在相等优先权时由硬件决定(请求0优先于请求1,以此类推)。
  3. 独立的源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐。
  4. 支持循环的缓冲器管理。
  5. 每个通道都有3个事件标志(DMA半传输,DMA传输完成和DMA传输出错),这3个事件标志逻辑或成为一个单独的中断请求。
  6. 存储器和存储器间的传输。
  7. 外设和存储器,存储器和外设的传输。
  8. 内存,SRAM,外设的 SRAM、APB1、APB2 和 AHB 外设均可作为访问的源和目标。
  9. 可编程的数据传输数目,最大为65536。

DMA1框图

  1. DMA请求。
    如果外设想要通过DMA传输数据,必须先给DMA控制器发送DMA请求,DMA收到请求信号之后,控制器会给外设一个应答信号,当外设应答后且 DMA 控制器收到应答信号之后,就会启动 DMA 的传输,直到传输完毕。

STM32F103 共有 DMA1 和 DMA2 两个控制器,DMA1 有 7 个通道,DMA2 有 5 个通道,不同的DMA控制器的通道对应着不同的外设请求。

  1. 通道
    DMA 具有 12 个独立可编程的通道,其中 DMA1 有 7 个通道,DMA2 有 5 个通道,每个通道对应不同的外设的 DMA 请求。虽然每个通道可以接收多个外设的请求,但是同一时间只能接收一个,不能同时接收多个。
  2. 仲裁器
    当发生多个DMA通道请求时,就意味着有先后响应处理的顺序问题,这个就由仲裁器管理。仲裁器管理DMA通道请求分为两个阶段。第一阶段属于软件阶段,可以在DMA_CCRx寄存器中设置,有 4 个等级:非常高,高,中和低四个优先级。**第二阶段属于硬件阶段,如果两个或以上的DMA通道请求设置的优先级一样,则他们优先级取决于通道编号,编号越低优先权越高。比如通道0高于通道1.**在大容量产品和互联型产品中,DMA1 控制器拥有高于DMA2 控制器的优先级。

在非循环模式下传输结束后,要开始新的DMA传输,需要在关闭DMA通道情况下,在传输数量寄存器(DMA_CNDTR)中重新写入传输数目。

相关推荐
lingzhilab6 分钟前
零知IDE——STM32F407VET6驱动SHT40温湿度传感器与ST7789实现智能环境监测系统
stm32·单片机·嵌入式硬件
民乐团扒谱机1 小时前
实验室安全教育与管理平台学习记录(七)网络安全
学习·安全·web安全
蒙奇D索大1 小时前
【11408学习记录】考研英语长难句精析:三步拆解真题复杂结构,轻松攻克阅读难关!
笔记·学习·考研·改行学it
贝塔实验室1 小时前
Altium Designer 6.3 PCB LAYOUT教程(四)
驱动开发·嵌入式硬件·硬件架构·硬件工程·信息与通信·基带工程·pcb工艺
zd2005722 小时前
AI辅助数据分析和学习了没?
人工智能·学习
洛白白2 小时前
“职场心态与心穷
经验分享·学习·生活·学习方法
星辰pid2 小时前
stm32的gpio模式到底该怎么选择?(及iic,spi,定时器原理介绍)
stm32·单片机·嵌入式硬件
_dindong3 小时前
笔试强训:Week-4
数据结构·c++·笔记·学习·算法·哈希算法·散列表
brave and determined3 小时前
可编程逻辑器件学习(day3):FPGA设计方法、开发流程与基于FPGA的SOC设计详解
嵌入式硬件·fpga开发·soc·仿真·电路·时序·可编程逻辑器件
axuan126513 小时前
10.【NXP 号令者RT1052】开发——实战-RT 看门狗(RTWDOG)
单片机·嵌入式硬件·mcu