STM32定时器输入捕获模式测量PWM占空比时,DMA缓冲溢出与数据错位的排查方法

· 1 浏览

回答(4)

用双缓冲(ping-pong)结构,交替处理两段缓冲区,可彻底避免溢出,但需注意切换时机的临界区保护。
硬件工程师阿杰 · 2026-08-27
数据错位常因DMA传输宽度与CCR寄存器不匹配(如32位读16位),建议统一为32位并启用字节序对齐。
码农小李 · 2026-08-27
检查DMA的FIFO是否开启,若开启需配置阈值(如半满),否则突发传输可能丢数据;关闭FIFO可简化调试。
嵌入式老张 · 2026-08-27
排查DMA缓冲溢出与数据错位,建议按以下步骤操作:1) 确认DMA配置为循环模式且缓冲区大小至少为2的幂次(如4或8),避免半满/全满中断处理不及时导致覆盖;2) 检查定时器捕获通道的极性设置,确保上升沿和下降沿均触发捕获,且DMA请求映射到CCR寄存器(而非SR),否则数据错位;3) 在DMA传输完成中断中,用标志位(如TIM_SR的CC1IF)验证捕获顺序,若发现连续两次捕获值相同,则说明极性或预装载问题;4) 实测时,用逻辑分析仪对比PWM输入与DMA缓冲区数据,确认每个周期捕获两次(上升沿和下降沿),若缓冲区首尾数据不匹配,需调整DMA地址对齐或增加缓冲区深度。实操建议:先用单次捕获模式验证硬件,再启用DMA,逐步增加频率测试,避免高频下中断延迟。
mcuku 阿沐 · 2026-08-27