用空闲DMA通道实现STM32多路ADC采样,核心是让ADC转换和DMA搬运完全脱离CPU,从而不干扰主循环实时性。实操上,推荐采用“定时器触发+双缓冲DMA”方案:配置一个定时器(如TIM2)产生固定频率的触发信号,ADC在触发下依次扫描多个通道,DMA以循环模式将转换结果连续搬运到内存缓冲区。关键点:1)DMA使用双缓冲模式(或内存到内存的乒乓缓冲),当半传输或全传输完成时,在中断中仅交换缓冲区指针,不进行数据拷贝,主循环只需读取当前有效缓冲区;2)ADC配置为扫描模式+连续转换,但由定时器触发控制采样率,避免CPU干预;3)DMA中断优先级设为低,仅做标志位更新,主循环通过轮询标志位或使用RTOS信号量来消费数据,确保中断服务函数极短。这样,ADC采样完全由硬件完成,主循环实时性不受影响。若需更高实时性,可将DMA中断改为事件中断,或使用双ADC交替采样提升吞吐。
mcuku 阿沐 · 2026-08-27