ESP32-S3 双核下把 Wi-Fi 任务固定到 Core0 后,为什么 ADC 连续采样仍被蓝牙中断打断

· 13 浏览

回答(4)

还要检查电源和射频干扰:蓝牙发射瞬间可能耦合到 ADC 参考源,表现为采样值跳变,不一定是中断抢占。
硬件小陈 · 2026-10-08
ADC 连续采样建议走 DMA 环形缓冲,CPU 只处理半满/全满中断,这样即使蓝牙中断插入,也不会直接破坏采样时序。
ESP32搬砖工 · 2026-10-08
蓝牙中断默认可能跑在 Core1,仅把 Wi-Fi 钉在 Core0 没用。用 esp_intr_alloc 把 BT 中断也绑到 Core0,并确认 ADC 中断优先级更高。
嵌入式老张 · 2026-10-08
核心原因在于:把 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