STM32之DMA(直接存储器存储)

DMA简介:
在硬件系统中,主要由CPU(内核),外设,内存(SRAM),总线等结构组成,数据就经常要在内存与外设之间传输转移,或者是从外设A转移到外设B.
DMA(Direct Memory Access)直接存储器存储,是一种可以大大减轻CPU工作量的数据存储方式.
数据转移的一般方式:
例如当CPU需要处理由ADC外设采集回来的数据时,CPU首先要把数据从ADC外设的寄存器读取到内存中(变量),然后进行运算处理.
(但是,因为在转移数据的过程中会占用CPU十分宝贵的资源,所以希望CPU更多地被用在数据运算或响应中断之中,而数据转移的工作交由其它部件完成。)
DMA的方式:
DMA可以为CPU分担了数据转移的工作。因为DMA的存在,CPU被解放出来,它可以在DMA转移数据的过程中同时进行数据运算,响应中断,大大提高效率.

DMA的工作:
在STM32中文手册可以找到STM32的系统结构图,可以很清晰的看到STM32内核,存储器,外设以及DMA的连接
这里写图片描述
所有这些硬件结构最终都通过各种各样的线连接到总线矩阵之中,硬件结构之间的数据转移都经过总线矩阵的协调,使各个外设都能够和谐地使用总线来传输数据.

例如:
在不使用DMA的情况下,内核通过DCode经过总线矩阵协调,使用AHB把外设ADC采集的数据读取到内核,然后内核DCode再通过总线矩阵协调,把数据存放到内存SRAM中。
而在使用DMA之后,由DMA控制器的DMA总线与总线矩阵协调,使用AHB把外设ADC的数据经由DMA通道存放到内存SRAM。在这个数据传输的过程中,不需要内核的全程参与,所以内核可以同时进行数据运算,而且DMA的方式是点到点的数据转移,而不使用DMA的方式还要以内核来作为中转站,显然是DMA的传输方式的效率更高。(所以”直接“是很强的东西!!)

DMA的控制参数:
要使用DMA,需要确定一系列的控制参数:
如外设数据的地址,内存地址,传输方向等,在开启DMA传输前还要先发出DMA请求。

DMA实例main函数:
main函数功能:
实际上是利用DMA把数据(数组)从内存转移到外设(串口)。外设工作的时候,除了转移数据,实质是不需要内核干预的,而数据转移的工作现在交给了DMA,所以在串口发送数据的时候,内核同时还可以进行其它操作,比如点亮LED灯(类似一个线程动作&#x

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值