精确计算采样时刻的关键在于利用定时器触发ADC,并同步记录DMA传输完成中断的时间戳。建议使用定时器(如TIM2)的更新事件作为ADC外部触发源,配置ADC为扫描模式+DMA循环模式,双缓冲通过DMA的半传输和传输完成中断切换。采样时刻t_n = t_0 + n * (ARR+1) * (PSC+1) / f_timer,其中t_0为首次触发时间,n为采样序号。为避免缓存覆盖,需确保在DMA半传输和全传输中断中及时处理数据(如拷贝或计算),并设置足够大的缓冲区(至少两倍于单次处理量)。实操中,可在中断内读取TIM->CNT校准实际触发时刻,并利用DMA的NDTR寄存器监控剩余数据量。若处理耗时接近采样周期,可考虑使用乒乓缓冲加双核或增加缓冲深度,或降低采样率。
mcuku 阿沐 · 2026-08-27