0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32的DMA简介

CHANBAEK 来源:头条号科G栈 作者:头条号科G栈 2023-03-23 10:10 次阅读

DMAMCU一个非常重要的部分,它提供了一种直接、高效、快速的方式来传输数据,而不需要CPU的介入,大大提高了MCU的工作效率。

我们先来看一下没有DMA,数据是怎么流动的。

poYBAGQbtPqAD6MIAAFSEzRZLjg412.jpg

如图所示,红色线表示外设数据的读写,蓝色线表示内存数据的读写。数据必须要先加载到内核,然后再通过内核写入外设或内存,读写操作都需要内核做很多工作,虽然C代码可能就一行语句,但是汇编可不止一条。我们知道在程序执行的过程中这样的数据传输操作非常频繁,如果都这样处理,内核将花费太多时间在搬运数据上,无法集中精力处理更为重要的计算和中断事件,处理速度和效率就会非常的低。

使用DMA后,数据的流动变成了下图所示方式。

pYYBAGQbtPyAGVjeAAFMVBOrMIk055.jpg

数据的传输工作由DMA控制器接管,假如我们配置由外设到内存,那么外设的数据一旦准备好,DMA就会自动将数据搬运到内存,内核只需要直接读取内存就可以获取到最新的外设数据。反过来也是同样的道理。整个传输过程不需要内核的参与,如果数据量很大,DMA的优势会非常明显。

内核有点像一个工厂,SRAM类似仓库,DMA就是物流。如果没有“物流”,这个“工厂”就需要自己进货、入库、出库、发货,而如果有了“物流”,“工厂”就不需要进货和发货了,这对“工厂”的生产效率有质的提升。

STM32中,DMA控制器有多个通道,每个通道对应某几个外设,使用前需要指定好该通道给哪个外设使用。

poYBAGQbtP2AJYSqAAG1fDj9AJ4763.jpg

具体使用DMA需要做下面的配置操作:

1、 使能DMA时钟

2、 配置外设和内存地址

3、 配置传输的数据个数

4、 配置通道的优先级

5、 配置数据传输方向

6、 配置circular模式或normal模式

7、 配置外设/内存incremented模式

8、 配置外设/内存数据位数

9、 配置中断,编写中断服务程序

10、使能DMA传输

之后内核只需要等待DMA中断的到来即可,然后读写内存数据。DMA有四种中断标志:全局中断、传输完成中断、半传输中断、传输错误中断,清除全局中断标志可以将所有的中断标志位清零。

DMA的外设和内存的数据位数可以不同,不同的位数传输最终的结果如下表所示:

pYYBAGQbtP6AAi4xAAOZRJWWnyo809.jpg

使用STM32的LL库的代码如下:

1、 打开时钟

poYBAGQbtP-Af8isAAAMUGJTKlA533.jpg

2、 配置地址

pYYBAGQbtQCAbcZQAAAWNjWCxhQ117.jpg

这里ADC是外设。

3、 数据个数

poYBAGQbtQGASknqAAALoj9pYTY610.jpg

4、 优先级

pYYBAGQbtQKAfgTtAAAM0Lg0jf8585.jpg

5、 传输方向

poYBAGQbtQOASBd6AAAKavDp5BE266.jpg

6、 Circular模式

pYYBAGQbtQSAJe2XAAAM1ldykzs279.jpg

7、 Incremented模式

poYBAGQbtQWAXAIvAAAV3IViX-w397.jpg

这里外设只有一个寄存器,所以不需要increment,内存是一个数组,所以要increment。

8、 数据位

pYYBAGQbtQWAKEb4AAAWoMx89PE209.jpg

数据位可以是8位(BYTE)、16位(HALFWORD)、32位(WORD)

9、 中断相关

pYYBAGQbtQeAegXoAABPpET0jbM275.jpg

pYYBAGQbtQeAAyYbAACtyp7hOPE242.jpg

10、 使能DMA

pYYBAGQbtQiAStVQAAAKeB7xgNo875.jpg

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16852

    浏览量

    349793
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10798

    浏览量

    210702
  • 内存
    +关注

    关注

    8

    文章

    2962

    浏览量

    73792
  • STM32
    +关注

    关注

    2264

    文章

    10852

    浏览量

    354173
  • dma
    dma
    +关注

    关注

    3

    文章

    556

    浏览量

    100309
收藏 人收藏

    评论

    相关推荐

    STM32实例教程-DMA实验

    在前面我们提到过 DMA,这一章我们就来学习 STM32F1 的DMA 使用。要实现的功能是:通过 K_UP 按键控制 DMA 串口 1 数据的传送,在传送过程中让 D2 指示灯不断闪
    发表于 05-24 09:20 1128次阅读
    <b class='flag-5'>STM32</b>实例教程-<b class='flag-5'>DMA</b>实验

    DMA简介

    DMA简介STM32学习心得
    发表于 04-20 22:14

    ADC与DMA简介

    文章目录一、准备工具二、前置知识1.ADC简介2.DMA简介2.STM32Cubemx配置1.新建工程2.时钟源选择及时钟树配置3.时基选择调试接口选择4.配置ADC采集1.选择要配置
    发表于 01-19 06:54

    STM32DMA简介

    1、DMA简介DMA(Direct Memory Access) :直接存储器存取,是单片机的一个外设,它的主要功能是用来搬数据,但是不需要占用 CPU,即在传输数据的时候, CPU 可以干其他
    发表于 01-26 08:27

    STM32 DMA应用与性能分析

    STM32 DMA应用与性能分析 学习资料,感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-06 17:33 11次下载

    1. stm32 mcu简介

    1. stm32 mcu简介 1.1 stm32 mcu结构 1.2 STM32 MCU存储器映像 1.3 STM32 MCU系统时钟树 1
    发表于 10-25 19:06 15次下载
    1. <b class='flag-5'>stm32</b> mcu<b class='flag-5'>简介</b>

    基于STM32F407的DMA解析-ADC单通道DMA读取数据

    一:什么是DMA?1.DMA简介DMA,全称为:Direct Memory Access,即直接存储器访问。DMA 传输方式无需 CPU
    发表于 11-25 09:51 5次下载
    基于<b class='flag-5'>STM32</b>F407的<b class='flag-5'>DMA</b>解析-ADC单通道<b class='flag-5'>DMA</b>读取数据

    STM32学习笔记(7)——DMA直接存储器访问

    STM32学习笔记(7)——DMA直接存储器访问一、DMA简介二、DMA功能框图1. DMA请求
    发表于 12-02 14:06 3次下载
    <b class='flag-5'>STM32</b>学习笔记(7)——<b class='flag-5'>DMA</b>直接存储器访问

    STM32F1开发指南笔记32----DMA

    本章介绍STM32F1的DMA。在本章中,我们将利用STM32F1的DMA来实现串口数据传送,并在TFTLCD模块上显示当前的传送进度。当CPU初始化这个传输动作,传输动作本身是由
    发表于 12-04 19:21 20次下载
    <b class='flag-5'>STM32</b>F1开发指南笔记32----<b class='flag-5'>DMA</b>

    STM32串口DMA发送数据

    一、DMA简介二、实验流程了解了DMA之后,我们做一个实验:STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据
    发表于 12-07 10:36 22次下载
    <b class='flag-5'>STM32</b>串口<b class='flag-5'>DMA</b>发送数据

    Stm32DMA直接内存读取(2021-07-30)

    Stm32DMA直接内存读取1.DMA简介DMA*(Direct Memory Access controller)*:可用于为CPU减
    发表于 12-09 15:36 10次下载
    <b class='flag-5'>Stm32</b>之<b class='flag-5'>DMA</b>直接内存读取(2021-07-30)

    STM32基础-----DMA

    STM32基础-------DMA
    发表于 12-20 19:35 11次下载
    <b class='flag-5'>STM32</b>基础-----<b class='flag-5'>DMA</b>

    STM32之串口DMA接收不定长数据

    目录STM32之串口DMA接收不定长数据引言DMA简介什么是DMASTM32
    发表于 12-24 19:03 30次下载
    <b class='flag-5'>STM32</b>之串口<b class='flag-5'>DMA</b>接收不定长数据

    DMA】浅谈STM32F4xx的DMA(附初始化代码)

    又到年末,事情总是格外的多,12月竟然没有一点产出是不行的,今天就来分析一下DMA的作用【下附DMA映射表,可用于开发者自查】 简介 DMA 即 Direct Memory Acces
    发表于 01-17 09:59 2次下载
    【<b class='flag-5'>DMA</b>】浅谈<b class='flag-5'>STM32</b>F4xx的<b class='flag-5'>DMA</b>(附初始化代码)

    STM32F1的DMA使用

    传送完成。D1 指示灯闪烁提示系统正常运行。学习时可以参考《STM32F10x 中文参考手册》-10 DMA 控制器(DMA)章节。 DMA 简介
    的头像 发表于 06-22 10:23 2594次阅读
    <b class='flag-5'>STM32</b>F1的<b class='flag-5'>DMA</b>使用