|
问题描述:如何使用内部外设(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附近。
当前网上例程安富莱/ST论坛/CubeMX例程均使用TIM12/EXTI/LPTIM同步触发,从未见过使用(绝不可能无法使用,否则DMAMUX的功能太过局限),我自己使用CubeMX配置这一部分无法同步触发(CubeMX例程全是使用LPTIM同步触发),希望给予指导或者参考例程
|
CUBEMX配置G474串口DMA传输,为什么接收正常发送不了?
STM32N6跳线flash烧录座出现写入错误,该如何解决。
STM32H743 以太网 为什么需要设置在0x30040000才能使用
简单聊聊STM32的SPI外设
STM32H743 的ADC线性校准问题
STM32N6 SPI无信号问题
NUCLEO-H7S3L8开发板,操作板载FLASH出错,无法进入APP
H743 ulpi phy 引脚配置
STM32H747XG下载一次仿真器就检测不到,运行不能正常
——STM32H747XG下载一次仿真器就检测不到,运行不能正常 原理图是否有问
微信公众号
手机版
[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
根据现在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的联系
[md]TIM1的定时器事件本身是没法直接作为其它DMA请求的同步触发信号的,
【当然LPTIM可以,这也正是我们看到的例程多选择LPTIM或EXTI来产生DMA请求或作为
其它DMA Stream的同步信号】
DMAMUX_EVT通常由其它DMA完成事件产生,这样便于DMA间的级联。
比方TIM1-CH1事件触发DMA1-S1的传输,该传输完成事件可以连接到DMAMUX,
去作为其它DMA stream的同步触发信号。
[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请求是否有效),待更新
[md]还是不知道为什么TIM_UP事件为什么不能正常触发HAL_DMAMUX1_SYNC_DMAMUX1_CH0_EVT事件,后端验证部分正常工作(只是将原本使用LPTIM2-测试过正常输出同步触发的部分修改为HAL_DMAMUX1_SYNC_DMAMUX1_CH0_EVT),且观测寄存器也是正常符合事件生成时序图
[md]前面说了TIM-UP事件肯定不能直接产生DMA_EVTx事件,倒是TIM-UP触发的DMA传输事件可以产生DMA_EVTx事件,然后它可以产生新的DMA请求或做其它DMA通道的同步触发事件。
[md]谢谢指点 成功了 后续会发布在gitee上
不客气。
我刚好昨天也分享一篇基于DMAMUX实现DMA级联的文章,你可以阅读参考。
利用DMAMUX实现DMA级联传输示例