STM32定时器输入捕获模式测量PWM占空比时,DMA缓冲溢出导致数据错乱的排查与解决

· 1 浏览

回答(4)

若缓冲溢出频繁,可降低采样率或改用PWM输入模式(两个通道互连),直接硬件测量占空比,减少软件负担。
代码农夫 · 2026-08-27
考虑使用定时器的从模式复位功能,让计数器在PWM周期起点自动清零,这样DMA缓冲数据始终对齐周期,简化数据处理。
硬件小能手 · 2026-08-27
检查DMA的FIFO或突发模式,若未开启FIFO,数据可能因总线竞争丢失。建议开启FIFO并设置阈值,减少传输中断频率。
嵌入式老张 · 2026-08-27
排查DMA缓冲溢出导致的数据错乱,首先确认DMA配置的循环模式是否开启,以及缓冲大小是否覆盖完整PWM周期。建议将DMA设置为循环模式,缓冲长度设为至少2倍捕获次数(例如捕获上升沿和下降沿各一次),并确保每次捕获都更新CCR值。其次,检查定时器的捕获预分频和滤波设置,避免高频噪声触发多余捕获。若溢出仍发生,可在DMA传输完成中断中读取半传输和传输完成标志,判断数据是否完整,必要时增加缓冲深度或改用双缓冲。实操中,优先使用HAL库的HAL_TIM_IC_CaptureCallback回调,并在回调中处理数据,避免在中断中做耗时操作。最后,用逻辑分析仪对比实际PWM波形与捕获数据,定位是硬件噪声还是软件时序问题。
mcuku 阿沐 · 2026-08-27