STM32-DMA直接存储器存取

一、概述

DMA(Direct Memory Access)直接存储器存取

  • DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源
  • 12个独立可配置的通道:DMA1(7个通道),DMA2(5个通道)
  • 每个通道都支持软件触发和特定的硬件触发

STM32F103C8T6 DMA资源:DMA1(7个通道)

存储器映像

DMA框图,如下:

DCode总线是专门访问Flash的,系统总线是访问其他东西的,由于DMA要转运数据,所以DMA也必须要有访问的主动权。

虽然DMA有多个通道可以独立转运数据,但DMA总线只有一个,仲裁器会根据通道的优先级来决定谁先用,谁后用。在总线矩阵这里也有个仲裁器,当CPU和DMA同时访问同一个目标,那么DMA就会暂停CPU的访问,以防止冲突,不过总线仲裁器,仍然会保证CPU得到一半的总线带宽,使CPU也能正常工作。

DMA请求就是DMA的硬件触发源,比如ADC转换数据,需要转运数据就需要通过这条线路,向DMA发出硬件触发信号,之后DMA就可以执行转运的动作了,数据寄存器都是可以正常读写


 DMA基本结构,如下:

外设寄存器其实就是外设与存储器用于连接的通道,也就是转换机构。外设寄存器也能写Flash 、SRAM的地址,存储器也能写外设寄存器的地址。

传输计数器是用来指定总共需要转运几次的,这个传输寄存器是一个自减寄存器,比如给它指定5次,没转运一次就会减1,如果不使用自动重装器,减为0时就是转运结束。使用这个自动重装器,当传输计数器减为0时会立即重装到初始值为5。如果不重装,就单次模式转运,重装就是循环模式转运。修改传输计数器时,要使DMA_Cmd先使能。

接着就是触发源,有软件触发源和硬件触发源,具体是哪个由M2M(memory to memory)参数决定,当我们给这个M2M为1时,就会进行软件触发,它这个软件触发的逻辑是以最快的速度,连续不断地触发DMA,争取早日把传输计数器清零,完成这一轮的转换。自动重装器和软件触发不能同时使用。软件触发一般就是应用存储器到存储器的转运。硬件(这里硬件可以理解为外设)触发一般与外设有关的转运,比如ADC转换完成,来触发DMA转运。

这开关控制就是用DMA_Cmd()进行使能。

DMA请求映像

EN位决定这个寄存器工作不工作。EN位为0表示不工作,EN位为1表示工作。

固定的硬件优先级进行优先级判断,通道号越小,优先级越高

数据宽度与对齐:

源端宽度小于目标宽度时,数据的高位补零,也就是右对齐; 源端宽度小大于目标宽度时,数据的高位丢弃掉,

数据转运+DMA:

DMA外设地址可以自增,DMA存储器地址也可以自增,

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值