你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

DMAMUX 使用内部外设Request Event(不使用TIM12和LPTIM)

[复制链接]
talk is cheap 提问时间:2025-12-8 16:08 / 未解决

问题描述:如何使用内部外设(TIM2)产生DMAMUX请求事件,作为其他外设的同步触发请求,硬件平台:STM32H750XBH7。 问题背景:首先描述业务逻辑:仪器需要定时10KHz频率通过DMA双缓冲向SPI总线(SPI菊花链控制多路DAC,已测试正常)上发送数据,同时触发一路串口发送ASCII数据(100Hz或者10Hz),仪器的主要性能指标在于jiteer(尽量避免定时触发的不稳定性,由于仪器是一个连续时间过程,jitter-定时触发的快慢变化会随着时间的累计误差逐渐增大),当前使用25M外部晶振(测试内部RC晶振-0.08%抖动会引起很大的累计偏差)+TIM12触发SPI和串口(均使用DMA双缓冲,数据不经过CPU),当前使用示波器解码(5M的SPI总线,示波器100Msa/s)观察,估算1s计时累计的时间抖动约在0.5ms附近。 image.png 期望结果:由于当前定时触发+SPI双缓冲链路过长,jitter属于不确定性因素,受限于硬件传输线路/温漂等因素,当前期望对其偏差进行补偿,通过调节定时器ARR自动重装载的数值来进一步减小误差(通过测量的频率来反馈修改定时器ARR数值),但不论是TIM12/LPTIM1/2/3均是16位,能够操作的空间很小,只能使用TIM2-32bit.

当前网上例程安富莱/ST论坛/CubeMX例程均使用TIM12/EXTI/LPTIM同步触发,从未见过使用(绝不可能无法使用,否则DMAMUX的功能太过局限),我自己使用CubeMX配置这一部分无法同步触发(CubeMX例程全是使用LPTIM同步触发),希望给予指导或者参考例程 image.png

image.png

image.png

image.png
image.png
image.png
image.png
赞 收藏 评论9 发布时间:2025-12-8 16:08

举报

9个回答
talk is cheap 回答时间:2025-12-10 16:10:43

talk is cheap 发表于 2025-12-9 16:48
还是不知道为什么TIM_UP事件为什么不能正常触发HAL_DMAMUX1_SYNC_DMAMUX1_CH0_EVT事件,后端验证部分 ...

[md]事实上 我阅读了外部ST论坛,我查阅到之前有开发者提出类似的问题,国外FAE也有相关研究,很有可能已经有相关的demo,希望进一步获取的支持 谢谢

https://community.st.com/t5/stm32-mcus-products/how-to-use-dmamux-generated-events-to-trigger-another-dma/m-p/652741

https://community.st.com/t5/stm32-mcus-embedded-software/dmamux-chaining-of-request-generators/m-p/766449

https://community.st.com/t5/stm32-mcus-products/confusion-on-dmamux-registers-in-rm0468/m-p/694258

talk is cheap 回答时间:2025-12-8 18:39:56

根据现在CubeMX的生成代码,感觉这个问题是一个DMAMUX级联的问题:首先使用DMA_REQUEST_TIM1_CH1请求生成HAL_DMAMUX1_SYNC_DMAMUX1_CH0_EVT(DMA1_Stream0),然后HAL_DMAMUX1_SYNC_DMAMUX1_CH0_EVT同步触发hdma_spi2_tx的发送DMA(DMA1_Stream2),问题的关键在于不知道如何建立DMA_REQUEST_TIM1_CH1和HAL_DMAMUX1_SYNC_DMAMUX1_CH0_EVT的联系

xmshao 回答时间:2025-12-9 11:14:37

talk is cheap 发表于 2025-12-8 18:39
根据现在CubeMX的生成代码,感觉这个问题是一个DMAMUX级联的问题:首先使用DMA_REQUEST_TIM1_CH1请求生 ...

[md]TIM1的定时器事件本身是没法直接作为其它DMA请求的同步触发信号的,

【当然LPTIM可以,这也正是我们看到的例程多选择LPTIM或EXTI来产生DMA请求或作为

其它DMA Stream的同步信号】

DMAMUX_EVT通常由其它DMA完成事件产生,这样便于DMA间的级联。

比方TIM1-CH1事件触发DMA1-S1的传输,该传输完成事件可以连接到DMAMUX,

去作为其它DMA stream的同步触发信号。

talk is cheap 回答时间:2025-12-9 12:40:01

xmshao 发表于 2025-12-9 11:14
TIM1的定时器事件本身是没法直接作为其它DMA请求的同步触发信号的,</p>
<p>【当然LPTIM可以,这也正是我们 ...

[md]感谢回复 正如上图所示 我认为dmamux1_evt0(0-3)这类事件作为DMAMUX1和DMAMUX2触发输入和同步输入(大约占据一半的硬连线资源),正是通过级联的方式管理外部dmamux1_req_gen0到ADC3共计115个来自外设的DMA请求, (实际现有上缺少的恰好是使用常见的外设请求I2C/高级定时器TIM2这样的通用外设,而不是触发/同步输入的偏后ID:LPTIM1/EXTI),我检索了所有STM32Cube_FW_H7_V1.12.1例程,均为LPTIM和EXTI。当前我测试DMAMUX级联的过程中我使用的是TIM2-CH1生成dmamux1_evt0,其难点感觉感觉还是在于还没摸清楚DMAMUX是如何触发对应DMA通道(DMAMUX1_OVR_IRQHandler不知道怎么触发陷入debug中断来验证来自外设的DMA请求是否有效),待更新

talk is cheap 回答时间:2025-12-9 16:48:25

talk is cheap 发表于 2025-12-9 12:40
感谢回复 正如上图所示 我认为dmamux1_evt0(0-3)这类事件作为DMAMUX1和DMAMUX2触发输入和同步输入 ...

[md]还是不知道为什么TIM_UP事件为什么不能正常触发HAL_DMAMUX1_SYNC_DMAMUX1_CH0_EVT事件,后端验证部分正常工作(只是将原本使用LPTIM2-测试过正常输出同步触发的部分修改为HAL_DMAMUX1_SYNC_DMAMUX1_CH0_EVT),且观测寄存器也是正常符合事件生成时序图

image.png

xmshao 回答时间:2025-12-10 09:28:28

talk is cheap 发表于 2025-12-9 16:48
还是不知道为什么TIM_UP事件为什么不能正常触发HAL_DMAMUX1_SYNC_DMAMUX1_CH0_EVT事件,后端验证部分 ...

[md]前面说了TIM-UP事件肯定不能直接产生DMA_EVTx事件,倒是TIM-UP触发的DMA传输事件可以产生DMA_EVTx事件,然后它可以产生新的DMA请求或做其它DMA通道的同步触发事件。

talk is cheap 回答时间:2025-12-18 21:39:04

xmshao 发表于 2025-12-10 09:28</p>
<p>[md]前面说了TIM-UP事件肯定不能直接产生DMA_EVTx事件,倒是TIM-UP触发的DMA传输事件可以产生DMA_EVT ...

[md]谢谢指点 成功了 后续会发布在gitee上

xmshao 回答时间:2025-12-19 17:28:02

talk is cheap 发表于 2025-12-18 21:39
谢谢指点 成功了 后续会发布在gitee上

不客气。

我刚好昨天也分享一篇基于DMAMUX实现DMA级联的文章,你可以阅读参考。

利用DMAMUX实现DMA级联传输示例

talk is cheap 回答时间:2026-1-3 22:32:29

xmshao 发表于 2025-12-19 17:28
不客气。</p>
<p>我刚好昨天也分享一篇基于DMAMUX实现DMA级联的文章,你可以阅读参考。

[md]https://gitee.com/qindongzhi/dma_-uart.git 前段时间太忙了 工程如下 需要者自提

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版