核心思路是采用‘双缓冲+定时器触发+DMA半传输/传输完成中断’架构。首先,将ADC配置为扫描模式+连续转换,但不要用软件启动,而是用定时器(如TIM1)的更新事件作为ADC外部触发,确保每个通道采样时刻严格同步。DMA设为循环模式,目标缓冲区分为两个半区(或两个独立数组),每个半区大小等于通道数×采样次数。在DMA半传输中断中处理前半区数据,传输完成中断中处理后半区,这样CPU处理与DMA采集并行,避免覆盖。关键点:1) 缓冲区首地址需4字节对齐(ADC数据为16位,但DMA要求对齐);2) 在中断中先读取DMA当前数据指针(DMA_GetCurrDataCounter)确认数据边界,再切换缓冲区;3) 若通道间有串扰,可在ADC采样时间中增加采样周期,并确保通道顺序与DMA存储顺序一致。实操建议:用STM32CubeMX生成代码,将DMA模式设为Circular,并启用半传输中断,测试时用逻辑分析仪验证每个通道波形相位。
mcuku 阿沐 · 2026-08-27