精确计算采样时刻的关键在于利用ADC的定时器触发和DMA双缓冲的乒乓机制。首先,用定时器(如TIM2)输出PWM触发ADC,采样周期由定时器频率决定,采样时刻为触发沿,可通过定时器计数器值精确对齐。为避免缓存撕裂,双缓冲需确保DMA在ADC转换完成中断(或DMA传输完成中断)中切换缓冲区指针,且切换操作必须在DMA当前传输结束后进行。建议使用DMA的循环模式+双缓冲(通过设置DMA_SxCR的DBM位),在传输完成中断中读取当前活动缓冲区索引(NDTR或CMAR),并处理数据。注意:采样时刻的抖动来自中断延迟,若需更高精度,可启用ADC的注入组或使用定时器同步,并在中断中记录定时器计数值作为时间戳。实操建议:1)配置定时器频率为所需采样率,确保ADC采样时间足够;2)DMA双缓冲使用两个数组,大小需为采样点数,避免溢出;3)在中断中先切换缓冲区(通过修改DMA的M0AR/M1AR或使用硬件双缓冲),再处理数据,防止读写冲突。
mcuku 阿沐 · 2026-08-27