STM32之DMA控制器

前言:DMA简单来说就是一个数据转运器,用于将外设与存储器之间的和存储器与存储器之间的数据进行高速转运。主要应用场景在于当AD转换数据时,使用扫描模式,此时就需要DMA来将数据搬运,不然AD转换出的下一个数据会将前一个数据给覆盖掉。

一、DMA的简介

DMA有12个独立的可配置的通道,其中DMA1有7个,DMA2有5个。每个通道都支持软件触发和硬件触发。软件触发一般用于单片机内部各寄存器之间的数据传输,其方式为一次性将所有数据转运完成。硬件触发一般用于外设与内部寄存器之间的数据传输,因为外设采集数据有时效性,必须等待采集完成一次之后再转运,如此反复。

二、DMA的内部结构与基本原理

该图左上角为控制器相当于CPU,右边的Flash,SRAM,还有一堆的寄存器都是数据转运的对象。可以看到左边有DMA1和DMA2两个单元,里面有对应的通道。AHB从设备就是DMA自己的寄存器,用于对DMA进行配置。其中Flash是只读寄存器,不能对其写入数据。

DMA工作流程:在发生一个事件后,外设向 DMA 控制器发送一个请求信号。 DMA 控制器根据通道的优先权处理请求。当DMA 控制器开始访问发出请求的外设时, DMA 控制器立即发送给它一个应答信号。当从DMA 控制器得到应答信号时,外设立即释放它的请求。一旦外设释放了这个请求, DMA 控制器同时撤销应答信号。如果有更多的请求时,外设可以启动下一个周期。
三、存储器简介
ROM为掉电不丢失的寄存器。RAM为随机寄存器,掉电丢失。
程序寄存器Flash为烧录的代码的存储位置。内核外设寄存器存的是NVIC这类。
四、DMA具体配置与模式
数据手册上写到:
下面是配置 DMA 通道 x 的过程 (x 代表通道号 )
1. DMA_CPARx 寄存器中设置外设寄存器的地址。发生外设数据传输请求时,这个地址将
是数据传输的源或目标。
2. DMA_CMARx 寄存器中设置数据存储器的地址。发生外设数据传输请求时,传输的数
据将从这个地址读出或写入这个地址。
3. DMA_CNDTRx 寄存器中设置要传输的数据量。在每个数据传输后,这个数值递减。
4. DMA_CCRx 寄存器的 PL[1:0] 位中设置通道的优先级。
5. DMA_CCRx 寄存器中设置数据传输的方向、循环模式、外设和存储器的增量模式、外
设和存储器的数据宽度、传输一半产生中断或传输完成产生中断。
6. 设置 DMA_CCRx 寄存器的 ENABLE 位,启动该通道。
一旦启动了 DMA 通道,它既可响应连到该通道上的外设的 DMA 请求。
模式:
循环模式:循环模式用于处理循环缓冲区和连续的数据传输 ( ADC 的扫描模式 )
存储器到存储器模式:DMA 通道的操作可以在没有外设请求的情况下进行,这种操作就是存储器到存储器模式。
图片来源:江协科技
其中的指定重装寄存器用于实现循环模式,当传输计数器的传输数减到0时,自动重装器就会重新将计数次数初始化,达到一个循环的效果。
五、具体的硬件触发通道
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Young member

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值