STM32学习(五)DMA—直接存储区访问

(一)DMA简介

DMA也就是直接存储器存取,DMA可以提供外设(一般为外设的数据寄存器,如ADC的数据寄存器,串口的数据寄存器等等)和储存器(运行内存SRAM和程序存储器Flash)或者存储器和存储器之间的高速数据传输,无需CPU干涉,节省了CPU资源。STM32的DMA有12个可独立配置的通道,包括:DMA1(7个通道),DMA2(5个通道)。每个通道都支持软件触发和特定的硬件触发。STM32F130C8T6的DMA资源只有DMA1(7个通道)。

(二)存储器映像

 DMA是在存储器之间进行数据转运的,存储器有两个重要的点,一个是存储器的内容,另一个是存储器的地址。表中就是STM32中所有类型的存储器以及他们被安排的地址。ROM是只读存储器,是一种非易失性,掉电不丢失的存储器。RAM是随机存储器,是一种易失性,掉电丢失的存储器。

(三)DMA框图

 图中Flash为主闪存,SRAM为运行内存,部分1中的各个外设,都可以看作寄存器,也是一种SRAM存储器。寄存器是一种特殊的存储器,一方面,CPU可以对寄存器进行读写,就像读写运行内存一样,另一方面,寄存器的每一位背后,都连接了一根导线,这些导线可以用于控制外设电路的状态。由2部分可以看出,DMA1有7个通道,各个通道可以分别设置它们转运数据的源地址和目的地址。在3部分中,有个仲裁器,由于DMA总线只有一条,却有多个通道,所有的通道只能分时复用这一条DMA总线,如果产生了冲突那么就会由仲裁器,根据通道的优先级来决定顺序。

(四)DMA基本结构图 

 让我们来分析这个图,来看DMA具体是怎么工作的。外设寄存器站点和存储器站点是两大主要数据转运站点。由图可以看出,数据的转运可以从外设到存储器,也可以从存储器到外设,还可以从Flash到SRAM,SRAM到SRAM。

4.1外设和存储器

外设和存储器两个站点,都有3个参数。

a.起始地址,两个站点的起始地址决定了数据从哪里啊来,到哪里去。

b.数据宽度,该参数决定了一次转运要按多大的数据宽度进行,可以选择字节Byte,半字HalfWord和字Word。字节是8位,也就是一次转运一个Uint8_t这么大的数据。半字是16位(Uint16_t),字是36位(Uint32_t)。

c.地址是否自增,当指定一次转运完成后,下一次转运要不要把数据转运到下一个位置,相当于指针,p++。

4.2传输计数器和自动重装器

传输计数器主要用来指定运转次数,传输计数器是一个自减计数器。当减到0之后,之前自增的地址也会恢复到起始地址的位置。如果使用自动重装器,当计数器减到0之后,会立即重装到初始值。

4.3DMA触发控制

触发控制,顾名思义,也就是决定DMA需要在什么时机进行转运。触发源,包括硬件触发和软件触发,具体选择哪个,由,M2M决定,当给M2M位1时,DMA就会选择软件触发(不能和循环模式同时用),一般用于存储器到存储器的转运。当M2M位给0,使用硬件触发,硬件触发源可以选择ADC,串口,定时器等。使用硬件触发的转运,一般都是与外设有关的转运。

4.4开关控制

开关控制也就是DMA_Cmd函数,当给DMA使能后,DMA转运就绪,就可以进行转运了。

DMA转运有几个条件

一,DMA_Cmd必须使能

二,传输计数器必须大于0

三,触发源必须有触发信号,触发一次,转运1次,传输计数器自减一次,当传输计数器等于0,且没有自动重装时,此时无论是否触发,DMA都不会在进行转运了,此时DMA_Cmd,给DISABLE,关闭DMA,再为传输寄存器写入一个大于0的数,在给ENABLE,开启DMA。

注意:写传输计数器时,必须要先关闭DMA再进行。

  • 40
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值