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

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

3天内不再提示

详解STM32的DMA功能

CHANBAEK 来源:头条号秋天滴风 作者:头条号秋天滴风 2023-04-25 09:49 次阅读

本文将介绍STM32DMA功能;

①DMA介绍

②STM32F4-DMA功能框图及详解

③DMA的增量设置、模式、中断

①DMA介绍

DMA是direct memory access的缩写,即直接存储器访问;DMA是通过硬件RAM和IO设备之间开辟一条通道,使得采集到的数据直接存到RAM,使得数据的传输不需要经过CPU读数据再将数据放入RAM、这样极大提高了CPU的效率。

②STM32F4-DMA功能框图及详解

wKgZomRHMaKAQh-vAAFYKSnFrwM368.jpg

外设通道:

wKgaomRHMaOAX9sxAACx8iuP1NQ353.jpg

STM32F4具有2个DMA控制器,每个DMA控制器有8个数据流,每个数据流可以从8个外设请求中选择一个作为该数据流的外设通道;外设通道就是数据流的源地址或者目标地址;外设通道的选择可以通过DMA数据流x的配置寄存器DMA_SxCR的CHSEL[2:0]位配置;

以下是DMA1的外设通道表:

wKgZomRHMaOAQ6E4AAIHP_-spxg373.jpg

数据流仲裁:当同时存在多个数据流在工作时,需要数据流仲裁器管理判断数据流的优先传输;数据流传输的优先级可以通过配置控制寄存器DMA_SxCR的PL[1:0]位,来选择优先级为非常高、高、中、低;当多个数据流的优先级相同时,数据流的编号越低、优先级越高;

数据FIFO:

每个数据流都有一个4字(16字节、4个32位寄存器)FIFO(先进先出存储器缓冲区),DMA的传输具有FIFO模式和直接模式;

直接模式:当出现DMA请求时,会进行数据的传输到存储器;若DMA的请求配置设置为存储器到外设模式传输数据时,DMA会将数据从存储器预加载到FIFO中、当外设触发DMA请求时数据立即传输给外设;

FIFO模式:当数据量达到一定数量时,进行数据的传输;可以通过配置DMA_SxFCR的FTH[1:0]位来设置FIFO的阈值级别为FIFO的1/4 、2/4 、3/4。如果数据量达到阈值则FIFO中的数据将被传输到目标地址;

4-5、外设端口、存储器端口:

wKgaomRHMaSAA87jAAHRHPAYMLE136.jpg

DMA1的控制器的存储器端口接在AHB总线上,外设端口接在APB1外设上;所以DMA1可以控制数据在外设与存储器之间传输,但不能实现数据在存储器与存储器之间传输;

DMA2的控制器的存储器端口和外设端口都有接到AHB总线上说以与DMA1相比,DMA2比DMA1多一个数据在存储器与存储器之间传输的模式;

③DMA的增量设置、模式、中断

DMA的传输模式:DMA的传输模式有外设与外设之间的传输、外设与存储器之间的传输、存储器与存储器之间的传输;模式的选择可以通过DMA_SxCR寄存器的DIR[1:0]位控制;

DMA传输的源、目的、长度:

外设寄存器地址在DMA_SxPA寄存器中设置;

存储器地址在DMA_SxM0AR寄存器中设置;

数据的传输量在寄存器DMA_CNDTRx中设置

传输数据的位宽在DMA_SxCR寄存器的PSIZE MSIZE位设置(尽量设置为一致)

DMA的增量设置:

通过设置DMA_SxCR寄存器中的PINC MINC位的状态,可以使得外设和存储器在每次数据传输后地址递增或地址不变;当选择为递增模式后,地址的增量就是数据的位宽

循环模式:循环模式用于循环处理缓存区和连续的数据传输(ADC的扫描模式),可以通过DMA_SxCR寄存器中的CIRC位来选择为循环模式;循环模式下当一轮数据传输完成后,下一次开始的地址和上一次的数据传输地址一样;

DMA的单次传输和突发传输:

DMA有单次传输和突发传输,DMA控制器可以产生4、8、16个节拍的增量突发传输(原本一次传输一个数据位宽,4个节拍就是4个数据位宽一次性一起传输);突发传输的大小通过DMA_SxCR寄存器中的MBURST[1:0]和PBURST[1:0]位对两个AHB端口独立配置;

在突发传输下、AHB的总线仲裁器会一直授权给DMA主总线AHB的传输会锁定其它总线暂时使用不了,使得突发传输不可被打断从而保证了数据的一致性;

每个DMA数据流在传输的时候可以触发以下中断:

wKgZomRHMaSAD6olAADkFwmQoDA028.jpg

在DMA_xISR中可以设置、查看状态;

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

    关注

    38

    文章

    7151

    浏览量

    162004
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10451

    浏览量

    206580
  • STM32
    +关注

    关注

    2240

    文章

    10675

    浏览量

    348850
  • dma
    dma
    +关注

    关注

    3

    文章

    536

    浏览量

    99068
  • STM32F4
    +关注

    关注

    3

    文章

    192

    浏览量

    27680
收藏 人收藏

    评论

    相关推荐

    STM32CubeMx的初始配置顺序是怎么影响DMA功能

    ‍经常有STM32开发者基于STM32CubeMx进行配置并生成基于HAL库的初始化代码,当涉及到DMA功能时,发现DMA
    的头像 发表于 10-13 10:14 2203次阅读
    <b class='flag-5'>STM32</b>CubeMx的初始配置顺序是怎么影响<b class='flag-5'>DMA</b><b class='flag-5'>功能</b>的

    STM32实例教程-DMA实验

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

    STM32 DMA使用详解

    DMASTM32 DMA使用详解1、画图Cortex-M3内部结构图,要体现相应的总线,并标注其作用。Icode:程序存在Flash中,通过ICode(Instruction Code)总线
    发表于 08-12 07:01

    什么是DMADMA有何功能

    stm32F1DMA详解1、问题:什么是DMA?回答:DMA,全称为:Direct Memory Access,即直接存储器访问简而言之,DMA
    发表于 12-09 07:35

    STM32串口DMA问题详解

    昨天晚上在STM32串口DMA的问题上纠结了好长时间,所以今天上午写篇博客来谈谈我对串口DMA发送的理解。
    的头像 发表于 10-27 16:16 7987次阅读
    <b class='flag-5'>STM32</b>串口<b class='flag-5'>DMA</b>问题<b class='flag-5'>详解</b>

    STM32的ADC1采集多条通道 可以不使用DMA功能吗?

    STM32的ADC1采集多条通道,可以不使用DMA功能吗?
    的头像 发表于 03-14 14:46 5207次阅读
    <b class='flag-5'>STM32</b>的ADC1采集多条通道 可以不使用<b class='flag-5'>DMA</b><b class='flag-5'>功能</b>吗?

    STM32F1 _DMA_USART

    STM32F1_DMA_USART
    的头像 发表于 04-08 10:23 4263次阅读
    <b class='flag-5'>STM32</b>F1 _<b class='flag-5'>DMA</b>_USART

    STM32 DMA详解

    事情。 DMA 控制器基于复杂的总线矩阵架构,将功能强大的双 AHB 主总线架构与独立的 FIFO 结 合在一起,优化了系统带宽,下图①处,可以看出双 AHB 主总线架构与独立的 FIFO的结构
    的头像 发表于 10-27 14:47 9804次阅读
    <b class='flag-5'>STM32</b> <b class='flag-5'>DMA</b><b class='flag-5'>详解</b>

    16、STM32——DMA详解

    1、DMA简介DMA(Direct Memory Access) :直接存储器存取,是单片机的一个外设,它的主要功能是用来搬数据,但是不需要占用 CPU,即在传输数据的时候, CPU 可以干其他
    发表于 12-02 13:51 21次下载
    16、<b class='flag-5'>STM32</b>——<b class='flag-5'>DMA</b><b class='flag-5'>详解</b>

    STM32基础-----DMA

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

    STM32 HAL CubeMX 串口IDLE接收空闲中断+DMA

    关于DMA原理部分讲解,及CubeMx配置部分,请参考该文章【STM32】HAL库 STM32CubeMX教程十一—DMA (串口DMA发送
    发表于 12-20 19:39 30次下载
    <b class='flag-5'>STM32</b> HAL CubeMX 串口IDLE接收空闲中断+<b class='flag-5'>DMA</b>

    STM32单片机实现DMA+ADC+UART功能

    。于是想到了ADC采样的数据用DMA功能存储,并通过串口打印。但是串口打印依然要占用单片机时间,那能不能串口数据的输出也采用 DMA功能呢?这样ADC采样的数据通过
    发表于 12-28 19:25 32次下载
    <b class='flag-5'>STM32</b>单片机实现<b class='flag-5'>DMA</b>+ADC+UART<b class='flag-5'>功能</b>

    STM32串口收发数据为什么要使用DMA

    CPU处理。因此,大量数据拷贝时,使用DMA可以释放CPU资源,相关文章推荐:详解STM32中的DMA原理。
    的头像 发表于 02-12 13:22 5663次阅读
    <b class='flag-5'>STM32</b>串口收发数据为什么要使用<b class='flag-5'>DMA</b>

    STM32F1的DMA使用

    在前面我们提到过 DMA,这一章我们就来学习 STM32F1 的DMA 使 用。要实现的功能是:通过 K_UP 按键控制 DMA 串口 1
    的头像 发表于 06-22 10:23 1559次阅读
    <b class='flag-5'>STM32</b>F1的<b class='flag-5'>DMA</b>使用

    STM32G4 Advanced Timer Break功能详解

    电子发烧友网站提供《STM32G4 Advanced Timer Break功能详解.pdf》资料免费下载
    发表于 09-19 15:09 1次下载
    <b class='flag-5'>STM32</b>G4 Advanced Timer Break<b class='flag-5'>功能</b><b class='flag-5'>详解</b>