SMT32H7系列DMA和DMAMUX的一点理解

2023-05-16

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会传输完设定长度的数据,而不是单个数据块。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SMT32H7系列DMA和DMAMUX的一点理解 的相关文章

  • STM32H7A3 ADC+DMA使用问题

    问题1 xff1a DMA采用半字传输16位ADC值 xff0c 用于存储ADC数据的数组一定是采集数的两倍 xff0c 否则会产生ADC溢出的错误中断HAL ADC ErrorCallback xff0c 从而无法进入ADC采集完成中断H
  • GD32的DMA配置

    参考 GD32F4xx 用户手册 DMA 控制器由 4 部分组成 xff1a AHB 从接口配置 DMA xff1b 两个 AHB 主接口进行数据传输 xff1b 两个仲裁器进行 DMA 请求的优先级管理 xff1b 数据处理和计数 DMA
  • STM32CUBEMX使用PWM+DMA驱动WS2812

    STM32CUBEMX使用PWM 43 DMA驱动WS2812 首先在stm32cubemx中设置pwm和dma 我设置了TIM1的CH1为PWM引脚编写DMA响应函数 xff0c 即PWM DMA完成数据发送后的回调函数 PWM DMA
  • STM32F4 SPI RX/TX DMA 读写FLASH数据

    STM32 使用DMA读写FLASH数据需要注意以下几点 xff1a 1 SPI全双工模式下 xff0c 无论读写FLASH数据均需要同时使能RX TX DMA 2 写数据时回读数据应当丢弃 xff0c 读数据时应当发送0xff来启动SPI
  • s3c6410 DMA

    S3C6410中DMA操作步骤 xff1a 1 决定使用安全DMAC SDMAC 还是通用DMAC DMAC xff1b 2 开始相应DMAC的系统时钟 xff0c 并关闭另外一组的时钟 xff08 系统默认开启SDMA时钟 xff09 x
  • 串口通信的三种方式(查询、中断、DMA)

    PC机串口定义如下图 xff1a 一般的单片机串口应用只需3根信号线 xff1a 3脚TXD xff08 发送数据 xff09 2脚RXD xff08 接收数据 xff09 5脚SG xff08 信号地 xff09 其中单片机的TXD对应连
  • STM32带FIFO的DMA传输应用示例

    STM32系列芯片都内置DMA外设 xff0c 其中很多系列的DMA配备了FIFO 这里以STM32F429芯片及开发板为例 xff0c 演示一下带FIFO的DMA传输实现过程 大致情况是这样的 xff0c 我用TIMER1通道1的比较事件
  • Xilinx的Zynq系列,ARM和PL通过DMA通信时如何保证DDR数据的正确性。

    使用ZYNQ或者MPSoC的好处是可以通过PL逻辑设计硬件加速器 xff0c 对功能进行硬件加速 加速器和ARM之间的交互信息一般包含自定义加速指令传递 待计算数据以及计算结果 这三种交互信息为了实现高性能往往需要使用DMA进行通信 考虑两
  • 查询方式/中断方式/DMA方式的区别及适用范围

    区别 xff1a 查询方式 xff1a CPU与设备串行工作 数据传送与主程序串行工作 xff1b 中断方式 xff1a CPU与设备并行工作 数据传送与主程序串行工作 xff1b DMA方式 xff1a CPU与设备并行工作 数据传送与主
  • STM32 USART 串口DMA收发注意事项

    正常情况这里不介绍 目录 1 低波特率情况 xff0c 接收信号可能会出现干扰 2 波特率300时 xff0c DMA接收无法工作 3 波特率1200时DMA发送 4 具体现象如下 环境 xff1a 主频72M STM32F103C8 注意
  • STM32使用DMA接收串口数据

    目录 01 概述 02 DMA接收 03 中断 04 代码 01 概述 在之前的文章里 STM32串口详解 和 STM32 DMA详解 文章中 xff0c 详细讲解了STM32的串口和DMA外设 xff0c 本篇文章将不在细述串口和DMA的
  • STM32 HAL 串口收发(无DMA,中断接收)

    STM32CUBE配置 一 使用printf发送数据 xff0c 在usart c中添加代码串口重定向 USER CODE BEGIN 0 include lt stdio h gt ifdef GNUC define PUTCHAR PR
  • AXI DMA总结、内核axidmatest.c测试程序分析、SG mode

    AXI DMA 概述 xff1a XILINX提供的AXI DMA支持Scatter Gather mode和Direct Register mode 数据位宽支持32 64 128 256 512 1024bits xff0c strea
  • 在EBAZ4205 zynq7010上运行AXI_DMA中断回环测试

    在EBAZ4205 zynq7010上运行AXI DMA loop interrupt 整体的布局图 这是上面的一张接口图 下面对每个模块附上截图 AXI DMA的输出mm2s introut s2mm introut接到PS系统的中断触发
  • STM32F103ZET6 之 ADC+TIM+DMA+USART 综合实验

    1 实验目的 1 使用 TIM1 触发 ADC ADC 采集的数据通过DMA 传至内存 然后通过串口打印出采集的数据 2 学会 DMA 传输数据并将数据进行保存 3 验证ADC 的采样率与实际设置的是否相符 2 硬件资源 1 指示灯 2 A
  • STM32 进阶教程 15 - 串口DMA收发

    前言 串口操作相信大家一定很熟悉 如果你已经会串口的收发数据 并可以灵活使用轮询及中断方式对串口进行数据收发 那么恭喜你 学完本节内容后 也将可以学会串口的更高级操作方式 DMA方式 DMA操作串口可以大大减轻MCU的负担 同时也可以加快数
  • STM32F1应用DMA——串口收发不定长数据

    STM32F1应用DMA 串口收发不定长数据 使用STM32自带DMA传输数据 可以减轻CPU负担 只需设置一些参数即可发送想要发送的数据 以下是STM32F1系列芯片测试过的部分代码 可实现DMA串口收发数据 下图来自STM32官网的手册
  • 嵌入式基础知识-DMA

    本篇来介绍DMA的一些基础知识 1 DMA简介 DMA Direct Memory Access 中文名为直接内存访问 它是一些计算机总线架构提供的功能 能使数据从附加设备 如磁盘驱动器 直接发送到计算机主板的内存上 对应嵌入式处理器来说
  • 启用 DMA 的 UART Tx 模式

    我已经为 UART 在传输模式下编写了一个简单的设备驱动程序 并启用了 DMA 和中断 我使用的硬件是 omap 4460 pandaboard 其中加载了 Linux 3 4 下面我分享一下相关部分的代码 在开放阶段 dma map io
  • glBufferSubData什么时候返回? [复制]

    这个问题在这里已经有答案了 我想将一个非常大的内存块的内容传输到足够大的 GPU 缓冲区 然后立即更改 CPU 上的内存内容 伪代码是这样的 glBindBuffer very large buffer glBufferSubData ve

随机推荐

  • kmeans算法的matlab代码

    答 xff1a Kmeans算法的matlab代码可以在网上找到 xff0c 这里是一个示例 xff1a clc clear K 61 3 X 61 8 5 1 7 2 1 3 6 2 6 3 2 7 3 3 3 6 5 4 7 7 7 2
  • 用PHP实现九九乘法表

    九九乘法表可以用循环语句来实现 下面是一个简单的例子 xff1a span class hljs keyword for span span class hljs variable i span 61 1 span class hljs v
  • 如何使用OpenAI的ChatGPT

    您可以使用OpenAI的ChatGPT通过以下几种方式 xff1a API xff1a 您可以通过调用OpenAI API来使用ChatGPT 您可以在OpenAI的官方网站上注册账号 xff0c 然后获取API密钥 xff0c 最后在您的
  • qt利用opengl加载显示obj格式的3D模型

    Qt是一个跨平台的C 43 43 图形用户界面库 xff0c 可以用来开发桌面应用程序 如果想要在Qt中加载并显示OBJ格式的3D模型 xff0c 可以使用Qt的OpenGL模块 首先 xff0c 需要在Qt工程中包含OpenGL模块 xf
  • 中国用户如何免费用chatgpt

    ChatGPT是一种自然语言生成模型 xff0c 它可以根据输入的文本自动生成文本 如果你是中国用户 xff0c 想要免费使用ChatGPT xff0c 你可以通过以下方式获得 xff1a 在GitHub上找到ChatGPT的开源代码 xf
  • SDN控制平台开源代码

    开源代码是指源代码在开放的许可下公开发布 xff0c 任何人都可以从源代码免费获得 复制 修改和分发 在SDN控制平台领域 xff0c 有许多开源代码可供选择 xff0c 如 xff1a OpenDaylight ONOS Ryu等 这些项
  • 两两比较统计学方法Tukey的优点、缺点,以及适用和不适用的情况

    Tukey的优点是它可以使用不同的统计检验来检测抽样数据中的异常值 xff0c 并能够计算出一个可以比较不同数据组之间的平均数的统计量 它的缺点是它只能处理少量的数据 xff0c 而且不能用于比较非正态分布的数据 Tukey适用于有限的数据
  • 浅谈现代无人机技术

    摘要 xff1a 在物联网技术 电池能源技术 传感器技术不断发展的今天 xff0c 无人机技术也变得日趋成熟起来 xff0c 成为一大热门技术 笔者主要对当下的无人机技术做出简单的分析 xff0c 并且简单实践复现该项技术 囊括 xff1a
  • c++数组初始化

    静态数组 span class token keyword int span dp span class token punctuation span span class token number 1 span span class to
  • PID控制器主要针对线性系统还是非线性系统

    PID控制器可以用于线性系统和部分非线性系统 PID控制器最初是为线性系统设计的 xff0c 可以有效控制具有稳定线性动态特性的系统 xff0c 如电机控制 温度控制等 但是 xff0c PID控制器也可以应用于一些非线性系统中 xff0c
  • VNC远程登录服务器(Ubuntu14.04)

    使用服务器多用户登录 xff0c 使用命令行没有图像化界面 xff0c 难免有所不便 xff0c 就来搞下VNC远程登录Ubuntu14 04 1 使用命令行登录进行vnc安装 sudo apt get install vnc4server
  • 树莓派4b使用记录(一):在树莓派4b使用python-opencv打开海康工业相机及遇到的问题与解决方法

    树莓派4b使用记录 一 xff1a 在树莓派4b使用python opencv打开海康工业相机及遇到的问题与解决方法 一 在树莓派上安装海康工业机器人的MVS软件 xff08 Linux版本 xff09 海康工业机器人软件下载地址 xff1
  • react 的性能优化

    一 性能永远是第一需求 xff0c 时刻考虑性能问题 如何避免应用出现性能问题 xff0c 如下所示 xff1a 了解常见的性能问题场景时刻注意代码的潜在性能问题注重可重构的代码了解如何使用工具定位性能问题 二 网络性能优化 xff0c 自
  • STM32应用之485通信

    我们先看看普通的收发电路 普通的485电路 xff0c 除了 用RXD连接485芯片的RO引脚 用TXD连接485芯片的DI引脚 xff0c 还会用一个单片机的普通IO引脚连接到RE DE引脚上 当单片机要发送数据的时候 xff0c 控制P
  • AD铺铜技巧总结

    原文链接 xff1a https blog csdn net snaking616 article details 78643046 目录 1 铜皮操作分类 2 铺铜技巧 2 1 过孔处理 2 1 1 过孔与绿油 2 1 2 过孔的十字连接
  • 十大滤波算法

    一 限幅滤波 1 xff09 方法 根据经验判断两次采样允许的最大偏差值A 每次采新值时判断 xff1a 若本次值与上次值之差 lt 61 A xff0c 则本次有效 xff1b 若本次值与上次值之差 gt A xff0c 本次无效 xff
  • 初识GD32

    什么是GD32 xff1f GD32是由北京兆易创新开发的国产32位MCU xff0c 基于Arm Cortex M3 M23 M4内核的32位通用微控制器 目前已经推出GD32F1xx xff0c GD32F2xx xff0c GD32F
  • GD32 新建工程模板

    本文以GD32F450MCU为核心 xff0c 新建工程模板 准备资料 xff1a GD32F4xx Firmware Library V2 1 0 GD32F4Pack包 http www gd32mcu com cn download
  • VirtualBox安装Win10系统

    VirtualBox是一款免费的开源虚拟机 xff0c 它简单易用 xff0c 支持Windows Linux和Mac系统等 最重要的是安装简单 xff0c 操作方便 装机准备 Windows10镜像文件 VirtualBox软件 Virt
  • SMT32H7系列DMA和DMAMUX的一点理解

    DMA和DMAMUX DMA xff1a 无CPU参与下直接进行数据搬运的控制器 DMAMUX xff1a 建立DMA请求和DMA通道之间的映射关系 xff0c 类似于路由的功能 无DMAMUX的MCU xff0c DMA请求和DMA通道的