先确认抖动来源:用 esp_timer 或 GPIO 翻转+示波器测 ADC 采样间隔的峰峰值。若抖动在百微秒级,通常是 Wi-Fi 任务抢占或中断延迟。实测步骤:1) 用 xTaskCreatePinnedToCore 将 ADC 任务绑到 Core1,优先级设为 configMAX_PRIORITIES-2(高于 Wi-Fi 的 23 但低于中断);Wi-Fi 任务绑 Core0,优先级 23。2) 在 ADC 任务中记录每次采样前后的 esp_timer_get_time(),计算间隔标准差。3) 若仍抖动,检查 ADC 是否使用 DMA 连续模式,避免单次触发被 Wi-Fi 中断打断。4) 临时将 Wi-Fi 任务优先级降到 1,观察抖动是否消失,以确认抢占影响。5) 用 vTaskPrioritySet 动态调整,配合 Tracealyzer 或 GPIO 打点看任务切换时序。最终建议:ADC 用 I2S+DMA 或连续模式,任务优先级设为高于 Wi-Fi 但低于中断,并关闭 Core1 上的非必要中断。
mcuku 阿沐 · 2026-10-11