STM32DMA功能详解

目录

一、DMA的基本介绍

1. 什么是DMA (DMA的基本定义)

2. DMA传输参数

3. DMA的主要特征

二、DMA功能框图

1. DMA请求

2. 通道

3. 仲裁器

三、DMA 数据配置

 1. 从哪里来到哪里去

外设到存储器:

存储器到外设:

存储器到存储器:

 2. 要传多少,单位是什么

3. 什么时候传输完成

四、DMA初始化结构体详解

五、 程序编写


一、DMA的基本介绍

1. 什么是DMA (DMA的基本定义)

        DMA,全称Direct Memory Access,即直接存储器访问,是单片机的一个外设。

        DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。这里的存储器可以是片内的SRAM(默认存放变量)或者是FLASH(默认存放常量,被const修饰的全局变量可以看成是常量类型),而外设指的其实是外设的数据寄存器。但它们本质上是一样的,都是从内存的某一区域传输到内存的另一区域(外设的数据寄存器本质上就是内存的一个存储单元)。

        我们知道CPU有转移数据、计算、控制程序转移等很多功能,系统运作的核心就是CPU,CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说数据的复制和存储数据,DMA的主要功能是用来搬数据,在传输数据的时候,CPU就可以不被占用用来干其他事情,对于实时性要求比较高的场合,我们可以利用DMA来减小CPU的负担

    因此:转移数据(尤其是转移大量数据)是可以不需要CPU参与。比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,直接让数据由A拷贝到B不经过CPU的处理,通过DMA解决大量数据转移过度消耗CPU资源的问题。

2. DMA传输参数

        我们知道,数据传输,首先需要的是

  1. 数据的源地址
  2. 数据传输位置的目标地址
  3. 传递数据多少的数据传输量
  4. 进行多少次传输的传输模式 DMA所需要的核心参数,便是这四个

当用户将参数设置好,主要涉及源地址、目标地址、传输数据量这三个,DMA控制器就会启动数据传输,当剩余传输数据量为0时 达到传输终点,结束DMA传输 ,当然,DMA 还有循环传输模式 当到达传输终点时会重新启动DMA传输。

也就是说只要剩余传输数据量不是0,而且DMA是启动状态,那么就会发生数据传输。

3. DMA的主要特征

每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过软件来配置;

在同一个DMA模块上,多个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),优先权设置相等时由硬件决定(请求0优先于请求1,依此类推);

独立数据源和目标数据区的传输宽度(字节、半字、全字)[即1个字节、2个字节、4个字节],模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐;

支持循环的缓冲器管理;

每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错),这3个事件标志逻辑或成为一个单独的中断请求;如果配置了中断使能,就会触发中断,然后通过中断标志位判断引起中断的事件类型,通常我们用来监测DMA是否传输完成。

存储器和存储器间的传输、外设和存储器、存储器和外设之间的传输;

闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和目标;

可编程的数据传输数目:最大为65535。


二、DMA功能框图

以外设与SRAM通过DMA1传输数据为例,功能框图中主要有三部分内容:

1. DMA请求

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

不同的 DMA 控制器的通道对应着不同的外设请求,这决定了我们在软件编程上该怎么设置,比如ADC1对应DMA1的通道1,串口USART1的发送对应DMA1的通道4,具体见 DMA 请求映像表(图上没有的说明不具备DMA请求功能):
图片来源:STM32F10xxx参考手册>>>10 DMA控制器(DMA)>>>表59 各个通道的DMA1请求一览

 图片来源:STM32F10xxx参考手册>>>10 DMA控制器(DMA)>>>表60 各个通道的DMA2请求

  • 17
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值