STM32定时器输入捕获测量PPM信号时,如何消除DMA中断与捕获比较中断的竞争条件?

· 1 浏览

回答(4)

建议用RTOS信号量或互斥锁保护共享数据,在捕获中断中发送事件,DMA中断中等待事件,但注意中断上下文开销,适合复杂系统。
系统架构师李工 · 2026-08-27
使用定时器的DMA请求映射到多个通道,配合循环DMA和乒乓缓冲,在DMA中断中解析PPM,捕获中断仅用于错误检测,这样竞争自然消除。
码农小王 · 2026-08-27
可以关闭捕获比较中断,完全依赖DMA传输完成中断来读取所有捕获值,但需确保DMA缓冲区足够大且处理及时,避免溢出。
嵌入式老张 · 2026-08-27
在STM32定时器输入捕获中,PPM信号通常通过DMA批量传输捕获值,同时捕获比较中断用于处理边沿事件。竞争条件源于DMA传输完成中断(如半传输/全传输)与捕获比较中断(如CCxIF)可能同时触发,导致数据一致性受损。消除方法:1)优先使用DMA的循环模式,并设置双缓冲(如内存中两个数组),在DMA半传输和全传输中断中切换处理缓冲区,避免在捕获中断中直接操作DMA缓冲区;2)在捕获比较中断中仅设置标志位或记录时间戳,不进行复杂数据处理,将实际解析放在主循环或DMA中断中,通过临界区(如关闭中断)保护共享变量;3)利用定时器的预装载寄存器(TIMx_CCRx)和DMA突发传输,确保捕获值在DMA读取时不被覆盖,可配置DMA为字传输并启用FIFO,减少总线竞争。实操建议:使用HAL库时,在HAL_TIM_IC_CaptureCallback中仅置位标志,在HAL_TIM_PWM_PulseFinishedCallback(若用PWM模式)中处理数据,并用__disable_irq()/__enable_irq()保护关键段。测试时用逻辑分析仪验证PPM脉宽精度,调整DMA优先级高于定时器中断,确保实时性。
mcuku 阿沐 · 2026-08-27

🧰 配套工具

⏱️ 定时器计算器