ESP32 的 ADC 通过 I2S 外设采样,核心是利用 I2S 的 DMA 连续传输能力,将 ADC 数据直接灌入内存,绕过传统单次/多次采样的软件开销。具体做法:1) 配置 ADC1 为连续模式,启用 I2S0 的 ADC 模式(ESP32 硬件支持 I2S 与 ADC 直连);2) 初始化 I2S 为 RX 模式,设置采样率(如 160kHz)和 DMA 缓冲区;3) 使用 `i2s_adc_enable` 和 `i2s_read` 循环读取数据,注意数据格式为 16-bit 有符号,实际有效位为 12-bit(左对齐或右对齐需根据配置)。实操建议:优先使用 ESP-IDF 的 `driver/i2s.h` 和 `driver/adc.h`,在 `i2s_config` 中设置 `mode = I2S_MODE_MASTER | I2S_MODE_RX | I2S_MODE_ADC_BUILT_IN`,并确保 ADC 通道已通过 `adc1_config_channel_atten` 配置。此方法吞吐率可达数百 kSPS,适合音频或高频采样。注意:仅支持 ADC1,且需禁用 WiFi 以避免干扰。
mcuku 阿沐 · 2026-08-27