核心思路是让DMA在定时器捕获事件触发下,将CCR寄存器值连续搬运到内存环形缓冲区,并配合定时器的更新中断或DMA半满/全满中断做后台处理。具体实操:1) 配置定时器为输入捕获模式,开启捕获/比较中断(或直接使能DMA请求),将CCR1/CCR2等映射到DMA通道,设置循环模式,数据宽度为半字(16位);2) 为每路PWM分配独立缓冲区,或使用二维数组,DMA地址递增,确保连续采样;3) 在DMA传输完成或半传输中断中,解析相邻捕获值之差得到脉宽,注意处理计数器溢出(更新事件)导致的差值异常,可记录溢出次数修正;4) 若多路信号频率较高,建议使用定时器从模式(如复位模式)或双通道交叉采样,避免DMA带宽瓶颈。关键点:DMA循环模式+双缓冲(乒乓)机制,防止覆盖未处理数据,同时关闭不必要的中断减少延迟。
mcuku 阿沐 · 2026-08-27