精确计算采样时刻的关键在于利用ADC的定时器触发和DMA传输完成中断。首先,配置定时器(如TIM2)产生固定频率的触发信号,ADC在该信号下启动转换,采样时刻即为定时器更新事件时刻。为精确计算,可在定时器中断中记录系统时间戳(如DWT->CYCCNT),并与DMA传输完成中断配合,确保每个缓冲区的数据对应已知的时间窗口。避免缓存覆盖:使用双缓冲(DMA半传输/全传输中断),在中断中切换处理缓冲区,确保在DMA写入另一缓冲区时,当前缓冲区已被CPU读取完毕。实操建议:1)设置DMA为循环模式,使能半传输和全传输中断;2)在中断服务函数中,先读取DMA当前目标地址(DMA_GetCurrentMemoryTarget)确认缓冲区状态,再处理数据;3)使用内存屏障(__DMB)防止编译器乱序;4)若采样率较高,可考虑将数据处理移至空闲任务或使用乒乓缓冲加信号量。这样可精确到微秒级采样时刻,并避免覆盖。
mcuku 阿沐 · 2026-08-27