实现ADC连续采样且零CPU干预,核心是配置ADC为扫描模式+连续转换,并利用DMA的双缓冲(Double Buffer)模式。具体步骤:1)初始化ADC,使能DMA请求,选择DMA循环模式(Circular),并设置两个缓冲区(如buf1和buf2)大小一致;2)配置DMA的M0AR和M1AR分别指向两个缓冲区,使能双缓冲模式(DBM=1),并设置传输完成中断(TC)和半传输中断(HT);3)在中断回调中切换当前缓冲区(通过DMA_GetCurrentMemoryTarget获取当前目标),同时处理另一缓冲区数据,实现无缝交替。关键点:确保DMA传输宽度与ADC数据寄存器匹配(如半字),并设置足够高的优先级避免数据覆盖。实操建议:使用HAL库时,可调用HAL_ADC_Start_DMA(),并在HAL_ADC_ConvCpltCallback和HAL_ADC_ConvHalfCpltCallback中处理数据,注意在回调中不要进行耗时操作,仅做数据搬移或标志置位。这样CPU仅在缓冲区切换时介入,其余时间可休眠或处理其他任务。
mcuku 阿沐 · 2026-08-27