正点原子STM32笔记——DMA原理

一、DMA简介

①DMA 全称Direct Memory Access,即直接存储器访问。

正常情况下(没用DMA),将数据从一个空间复制到另一个空间,需要将数据从一个空间读入CPU,然后写到另一个空间里。

②DMA传输将数据从一个地址空间复制到另一个地址空间。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实现和完成的。这样就大大减轻了CPU的负担。

③DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场过程,通过硬件为RAM和IO设备开辟一条直接传输数据的通道,使得CPU的效率大大提高。

STM32最多有2个DMA控制器(DMA2仅存在大容量产品中),DMA1有7个通道。DMA2有5个通道。每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁起来协调各个DMA请求的优先权。

DMA框图:
DMA框图

图中红色圈出的就是DMA1和DMA2。举个例子,假设传输方向是从外设到存储器,下图是来自APB1和APB2的两个外设的DMA请求。请求通过仲裁器连接到相应的通道,然后可以通过DMA总线访问

在这里插入图片描述

二、STM32DMA特性

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

三、DMA原理

1、DMA1控制器和DMA2控制器

在这里插入图片描述
传输方向:外设到存储器,存储器到外设的 ,存储器到存储器间。
通道选好后,可选的外设也就固定了。如上图,如果选择通道1,则可选的外设就有ADC1、、TIM_CH3、TIM4_CH1。
在这里插入图片描述

2、DMA处理

在这里插入图片描述
在这里插入图片描述

比如,我们设置从存储器到外设,外设假定是UART1_RX,存储器假定是内存中某一基地址比如说一个数组。源地址就是存储器,目标地址就是外设。所以我们就将UART1_RX的地址赋给DMA_CPARx,将数组中基地址赋给DMA_CMARx。如果传输100个数据,则DMA_CNDTRx的值就是100,每传输一个数据,DMA_CNDTRx的值就减1。数据的传输方向就在DMA_CCRx寄存器中的DIR位(位4)设置。而从外设传输到存储器方法是一样的。从存储器到存储器传输就不一样了。
在这里插入图片描述

3、仲裁器

DMA1有7个通道,有可能每个通道都有请求,这时候就需要设置优先级,谁的优先级高处理谁。
在这里插入图片描述
配置优先级也是在DMA_CCRx寄存器中配置的。
在这里插入图片描述

4、DMA通道

在这里插入图片描述
DMA传输的数据是可编程的,最大达到65535。存储器数据宽度和外设数据宽度也可以设置,即可以设置读取的数据宽度和写入的数据宽度。当读取的数据宽度和写入的数据宽度相等时,比如说数据宽度都是16位,那么传输数据的时候就一次传输16位。当读取的数据宽度和写入宽度不相等时,可以参考下图:
可编程的数据传输宽度、对齐方式和数据大小端
5、指针增量和循环模式
在这里插入图片描述
在这里插入图片描述

6、存储器到存储器模式
在这里插入图片描述
存储器到存储器传输也是由源地址传到目标地址,而源地址就被送给DMA_CPARx,目标地址就被送给DMA_CMARx。

7、中断
在这里插入图片描述
8、通道配置过程
在这里插入图片描述
这些就是DMA的一些基础概念和原理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值