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)中重新写入传输数目。

相关推荐
不太可爱的叶某人6 小时前
【学习笔记】MySQL技术内幕InnoDB存储引擎——第5章 索引与算法
笔记·学习·mysql
岁岁岁平安6 小时前
Redis基础学习(五大值数据类型的常用操作命令)
数据库·redis·学习·redis list·redis hash·redis set·redis string
HIZYUAN6 小时前
AG32嵌入式系统如何实现加密与固件升级(一)
stm32·单片机·嵌入式硬件·mcu·fpga开发·创业创新
知识分享小能手8 小时前
Vue3 学习教程,从入门到精通,使用 VSCode 开发 Vue3 的详细指南(3)
前端·javascript·vue.js·学习·前端框架·vue·vue3
pay4fun8 小时前
2048-控制台版本
c++·学习
知识分享小能手10 小时前
Bootstrap 5学习教程,从入门到精通,Bootstrap 5 表单验证语法知识点及案例代码(34)
前端·javascript·学习·typescript·bootstrap·html·css3
YTao_G10 小时前
STM32模块:022 PWR电源控制
stm32·单片机·嵌入式硬件
weixin_4188138710 小时前
Python-可视化学习笔记
笔记·python·学习
Haoea!10 小时前
Flink-05学习 接上节,将FlinkJedisPoolConfig 从Kafka写入Redis
学习·flink·kafka
丁满与彭彭12 小时前
嵌入式学习笔记-MCU阶段-DAY01
笔记·单片机·学习