排查DMA缓冲溢出导致的数据错乱,首先确认DMA配置的循环模式是否开启,以及缓冲大小是否覆盖完整PWM周期。建议将DMA设置为循环模式,缓冲长度设为至少2倍捕获次数(例如捕获上升沿和下降沿各一次),并确保每次捕获都更新CCR值。其次,检查定时器的捕获预分频和滤波设置,避免高频噪声触发多余捕获。若溢出仍发生,可在DMA传输完成中断中读取半传输和传输完成标志,判断数据是否完整,必要时增加缓冲深度或改用双缓冲。实操中,优先使用HAL库的HAL_TIM_IC_CaptureCallback回调,并在回调中处理数据,避免在中断中做耗时操作。最后,用逻辑分析仪对比实际PWM波形与捕获数据,定位是硬件噪声还是软件时序问题。
mcuku 阿沐 · 2026-08-27