DMA,全称Direct Memory Access,即直接存储器访问
DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输
DMA 这个外设是可以直接访问 STM32 内部的存储器的,包括运行内存 SRAM、程序存储器 Flash 和寄存器等等
CPU有转移数据、计算、控制程序转移等很多功能,系统运作的核心就是CPU,CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说数据的复制和存储数据,如果我们把这部分的CPU资源拿出来,让CPU去处理其他的复杂计算事务,就能够更好的利用CPU的资源,因此:转移数据(尤其是转移大量数据)是可以不需要CPU参与,比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,直接让数据由A拷贝到B 不经过CPU的处理,DMA就是基于以上设想设计的,它的作用就是解决大量数据转移过度消耗CPU资源的问题。有了DMA使CPU更专注于更加实用的操作:计算、控制等
DMA用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输
无须CPU的干预,通过DMA数据可以快速地移动,这就节省了CPU的资源来做其他操作
DMA的作用就是实现数据的直接传输,而去掉了传统数据传输需要CPU寄存器参与的环节,主要涉及四种情况的数据传输,但本质上是一样的,都是从内存的某一区域传输到内存的另一区域(外设的数据寄存器本质上就是内存的一个存储单元)
四种情况的数据传输如下:
- 外设到内存
- 内存到外设
- 内存到内存
- 外设到外设(仅限于一些高级的DMA可以实现 ,传统DMA可以实现以上三种)
数据传输,首先需要的是 ①数据的源地址 ②数据传输位置的目标地址 ,③传递数据多少的数据传输量 ,④进行多少次传输的传输模式 DMA所需 要的核心参数,便是这四个
以上内容参考
原文链接:https://blog..net/as/article/details/
DMA的更多详细的介绍也可以看这篇文章
对于大容量的STM32芯片有2个DMA控制器 两个DMA控制器(一共有 12 个独立可配置的通道),DMA1有7个通道,DMA2有5个通道,每个通道都可以配置一些外设的地址
通道就是数据转运的路径,数据从一个地方移动到另一个地方,就需要占用一个通道,各个通道之间互不干扰,每个通道都支持软件触发和特定的硬件触发(每个DMA通道的硬件触发源是不一样的)(存储器到存储器之间的转运一般使用软件触发,外设到存储器的转运一般使用硬件触发 —— 因为外设的数据是有一定时机的)
STM32F103C8T6 DMA 资源:DMA1(7个通道)
DMA是在存储器之间进行数据转运的,我们就需要了解STM32中有哪些存储器,这些存储器又是被安排到了哪些地址上
STM32中所有类型的存储器及它们所被安排的地址:

存储器总共分为两大类,ROM 和 RAM,ROM是只读存储器、掉电不丢失,RAM是随机存储器、掉电丢失

【注意】自动重装和软件触发不能同时使用
DMA数据传输有 3 个条件:
- 传输计数器大于0
- 触发源有触发信号
- DMA使能
数据转运 + DMA

ADC扫描模式 + DMA

讯享网
关于DMA库函数更详细的介绍可以参考文章:

MyDMA.c
讯享网
MyDMA.h
讯享网

AD.c
AD.h
讯享网
专栏文章均参考 《》教程视频

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/142455.html