STM32的DMA简介

DMA是MCU一个非常重要的部分,它提供了一种直接、高效、快速的方式来传输数据,而不需要CPU的介入,大大提高了MCU的工作效率。

我们先来看一下没有DMA,数据是怎么流动的。

STM32的DMA简介

如图所示,红色线表示外设数据的读写,蓝色线表示内存数据的读写。数据必须要先加载到内核,然后再通过内核写入外设或内存,读写操作都需要内核做很多工作,虽然C代码可能就一行语句,但是汇编可不止一条。我们知道在程序执行的过程中这样的数据传输操作非常频繁,如果都这样处理,内核将花费太多时间在搬运数据上,无法集中精力处理更为重要的计算和中断事件,处理速度和效率就会非常的低。

使用DMA后,数据的流动变成了下图所示方式。

STM32的DMA简介

数据的传输工作由DMA控制器接管,假如我们配置由外设到内存,那么外设的数据一旦准备好,DMA就会自动将数据搬运到内存,内核只需要直接读取内存就可以获取到最新的外设数据。反过来也是同样的道理。整个传输过程不需要内核的参与,如果数据量很大,DMA的优势会非常明显。

内核有点像一个工厂,SRAM类似仓库,DMA就是物流。如果没有“物流”,这个“工厂”就需要自己进货、入库、出库、发货,而如果有了“物流”,“工厂”就不需要进货和发货了,这对“工厂”的生产效率有质的提升。

在STM32中,DMA控制器有多个通道,每个通道对应某几个外设,使用前需要指定好该通道给哪个外设使用。

STM32的DMA简介

具体使用DMA需要做下面的配置操作:

1、 使能DMA时钟

2、 配置外设和内存地址

3、 配置传输的数据个数

4、 配置通道的优先级

5、 配置数据传输方向

6、 配置circular模式或normal模式

7、 配置外设/内存incremented模式

8、 配置外设/内存数据位数

9、 配置中断,编写中断服务程序

10、使能DMA传输

之后内核只需要等待DMA中断的到来即可,然后读写内存数据。DMA有四种中断标志:全局中断、传输完成中断、半传输中断、传输错误中断,清除全局中断标志可以将所有的中断标志位清零。

DMA的外设和内存的数据位数可以不同,不同的位数传输最终的结果如下表所示:

STM32的DMA简介

使用STM32的LL库的代码如下:

1、 打开时钟

STM32的DMA简介

2、 配置地址

STM32的DMA简介

这里ADC是外设。

3、 数据个数

STM32的DMA简介

4、 优先级

STM32的DMA简介

5、 传输方向

STM32的DMA简介

6、 Circular模式

STM32的DMA简介

7、 Incremented模式

STM32的DMA简介

这里外设只有一个寄存器,所以不需要increment,内存是一个数组,所以要increment。

8、 数据位

STM32的DMA简介

数据位可以是8位(BYTE)、16位(HALFWORD)、32位(WORD)

9、 中断相关

STM32的DMA简介

STM32的DMA简介

10、 使能DMA

STM32的DMA简介

展开阅读全文

页面更新:2024-05-04

标签:优先级   数据传输   位数   全局   内核   时钟   外设   通道   标志   内存   工厂   模式   操作   物流   简介   数据   数码

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top