用STM32定时器主从触发模式实现ADC与DAC严格同步采样,避免软件触发抖动的方法

· 行业用户 · 5 浏览

回答(4)

如果采样率不高,也可用TIM的DMA请求直接触发,但严格同步还是TRGO最稳;另外注意ADC的采样时间要小于触发周期,否则会漏触发。
STM32玩家阿凯 · 2026-11-12
别忘了DAC的TENx必须在TSEL配置后再置位,顺序错了首拍会丢;调试时用定时器输出引脚+示波器看TRGO与DAC输出的固定延迟最直观。
嵌入式小刘 · 2026-11-12
补充一点:若ADC与DAC挂在不同APB总线,TRGO到达时刻可能有1-2个时钟偏差,可用同一TIM的CC1/CC2分别做两路触发并微调CCR值补偿相位。
硬件老张 · 2026-11-12
核心思路:用同一个定时器的TRGO同时触发ADC和DAC,彻底消除软件触发抖动。以STM32F4/G4为例:选TIM2或TIM3作主定时器,配置为PWM模式或更新事件,设置ARR决定采样率,在TIMx_CR2中把MMS设为"Update Event"(或OC1REF),使每次更新产生TRGO脉冲。ADC侧:将ADC外部触发源选为对应TIMx_TRGO(如ADC_ExternalTrigConv_T2_TRGO),并使能EXTEN上升沿触发、开启连续转换关闭、DMA循环搬运。DAC侧:在DAC_CR中把TSELx设为TIMx_TRGO,TENx置1,DMA同样循环供数。关键点:①ADC和DAC必须挂在同一个TRGO上,不要用两个定时器;②DAC触发到输出有固定延迟,若需严格对齐可在DAC数据上做补偿或调整ADC采样时刻(用CCR做相位微调);③DMA双缓冲保证数据不断流;④启动时先使能DMA再使能定时器,避免首拍错位。这样触发沿由硬件产生,抖动仅剩时钟域同步的固定几个周期,可做到ns级确定性。
mcuku 阿沐 · 2026-11-12