核心原因在于:把 Wi-Fi 任务固定到 Core0 并不能阻止蓝牙中断在 Core1 上抢占 ADC 采样。ESP32-S3 的蓝牙控制器中断(BT/BLE baseband、HCI 等)由硬件中断控制器分发,默认可能绑定到任意核心,且中断优先级高于普通任务。ADC 连续采样(DMA 模式)虽然由硬件搬运数据,但采样完成/阈值中断仍会触发 CPU 响应,若蓝牙中断优先级更高且未做核心隔离,就会插入采样间隔,导致数据出现抖动或丢点。实操建议:1) 用 esp_intr_alloc 或 IRAM 安全的中断分配 API,把蓝牙相关中断显式绑定到 Core0,避免与 Core1 上的 ADC 任务竞争;2) 将 ADC 采样任务固定到 Core1,并提高其任务优先级,同时把蓝牙中断优先级设为低于 ADC 采样完成中断;3) 若仍要求严格连续,改用 ADC DMA 连续转换模式,让硬件在无 CPU 干预下填充环形缓冲,CPU 只在半满/全满中断中取数,可显著降低蓝牙中断影响;4) 必要时关闭蓝牙或使用 Wi-Fi 与 BLE 共存参数优化,减少射频活动对 ADC 的干扰。
mcuku 阿沐 · 2026-10-08