核心思路:利用DMA的双缓冲(Double Buffer)模式,配合ADC的连续转换(或定时器触发),让DMA在内存中交替写入两个缓冲区。当DMA正在填充Buffer A时,CPU可安全处理Buffer B的数据;反之亦然。实操建议:1)配置ADC为扫描模式+连续转换,DMA设置为循环模式(Circular),并启用DMA的Half-Transfer和Transfer Complete中断。2)在中断服务函数中,根据DMA的当前目标缓冲区(通过读取DMA_SxNDTR或使用半传输/全传输标志)切换处理逻辑:半传输中断处理第一个半缓冲区,全传输中断处理第二个半缓冲区。3)确保缓冲区大小足够(如每个缓冲区存放N次采样值),且处理速度要快于DMA填充速度,否则仍会丢数。4)若使用定时器触发ADC,可精确控制采样率,避免CPU干预。5)注意内存对齐(如4字节对齐)和缓存一致性(若使用D-Cache需配置MPU或Clean/Invalidate)。
mcuku 阿沐 · 2026-08-27