• SMT32H7系列DMA和DMAMUX的一点理解


    DMA和DMAMUX

    DMA:无CPU参与下直接进行数据搬运的控制器
    DMAMUX:建立DMA请求和DMA通道之间的映射关系,类似于路由的功能。无DMAMUX的MCU,DMA请求和DMA通道的映射关系是固定的,不能由软件修改。有了DMAMUX可以将DMA请求和DMA通道由软件联系起来,实现自定义链接。
    以STM32H743为例:
    DMAMUX1:DMAMUX1_Channel0-15对应DMA1_Stream0-7和DMA2_Stream0-7。

    DMAMUX2:DMAMUX2_Channel0-7对应BDMA_Channel0-7。

    具体见下图,理解仅供参考。

    在这里插入图片描述
    触发发生器的例子
    1.比如外部中断EXTI触发存储器到存储器/外设的DMA请求
    无DMAMUX的情况下:因为EXTI本身没有DMA请求,但EXTI要触发DMA只能在EXTI中断中启动DMA,配置好存储器到存储器/外设的DMA后,然后再EXTI中断中启动DMA。
    有DMAMUX的情况下:触发信号HAL_DMAMUX1_REQ_GEN_EXTI0和信号发生器DMA_REQUEST_GENERATORx关联相当于EXTI0具有了DMA请求,然后配置好DMA传输通道,配置好EXTI0,EXTI0就能触发DMA实现DMA传输了。这里边可能MCU已经做好EXTI边沿信号和DMA启动的关联了,不然和在EXTI中断中启动DMA又有什么区别呢。(猜测,没用过)
    2.比如GPIO触发DMA请求实现存储器到GPIO的数据传输
    无DMAMUX的情况下:GPIO本身没有DMA请求,要实现存储器到GPIO的DMA传输需要借用一个DMA请求,我当初用的是TIM_UP的DMA请求(当然也可以用其它信号,只要能产生DMA请求就行),然后在DMA配置中按照存储器到外设的DMA配置就行,我用这个可以实现输出一段固定波形的信号,信号的CLK和TIM周期一致,如果这段波形要周期性出现可以用另一个定时器,在定时器中断中使能DMA。
    本质上是外设1->存储器->外设2的传输,外设1有DMA请求,外设2没有DMA请求,用外设1的请求干外设2的事情。
    在这里插入图片描述
    有DMAMUX的情况下:触发信号HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT和信号发生器DMA_REQUEST_GENERATORx关联产生的DMA请求用作GPIO的DMA请求,然后配置DMA传输通道,配置LPTIM定时器,则启动DMA后,LPTIM定时器每次产生1个DMA请求,发送1个数据。如果DMA是循环模式则会根据NDTR循环传输,如果是正常模式则NDTR传完后DMA自动关闭。

    同步发生器的例子
    同步信号主要用于周期启动DMA
    1.定时进行串口DMA发送数据
    无DMAMUX的情况:串口都有DMA请求,不需要触发发生器,直接通过外设请求和DMA传输通道关联,但是我要定时发送串口数据,则需要在一个定时器中断中启动串口DMA发送。
    有DMAMUX的情况:先进行串口外设和DMA传输通道的关联,然后选择同步信号HAL_DMAMUX1_SYNC_LPTIM1_OUT关联DMAMUX,配置LPTIM实现周期发出同步信号启动DMA。
    同步信号是用来启动DMA的,不是DMA的请求,DMA的请求来自串口。

    重点理解
    1.触发信号和同步信号都是固定的
    在这里插入图片描述
    在这里插入图片描述
    2.理解触发信号HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT和HAL_DMAMUX1_SYNC_LPTIM1_OUT在两个项目中应用的区别。
    触发信号相当于DMA请求信号,同步信号相当于DMA启动信号。
    触发信号多用于外设1->存储器->外设2的类型,同步信号多用于存储器->外设里的周期性启动DMA的情况。
    在触发信号HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT下,每一次触发信号引起一次DMA请求,而一次定时器的DMA请求只能传输一个DMA数据块。
    在同步信号HAL_DMAMUX1_SYNC_LPTIM1_OUT下,一次同步信号启动一次DMA,DMA会传输完设定长度的数据,而不是单个数据块。

    只是理解,没有过多验证。

  • 相关阅读:
    一台抵得上多种测量仪器-B1500A半导体参数分析仪
    Promise从入门到精通 (第二章 Promise的理解和使用)
    使用 Python 进行敏感词过滤
    痛心:实验室服务器被黑挖矿怎么办?
    唯品会关键字搜索商品API接口(item_search-按关键字搜索唯品会商品API接口),唯品会API接口
    Python异常使用三大注意事项详解!
    Spring Boot整合日志
    Redis—List数据类型及其常用命令详解
    0.5 如何运行Python代码
    @pytest.mark.dependency依赖跨模块时,当前测试方法自动被跳过
  • 原文地址:https://blog.csdn.net/weixin_42617385/article/details/125432314