# ESP32 硬件约束与踩坑 > **芯片:esp32** | **类别:constraints** | **信源:** [Espressif 官方文档](https://docs.espressif.com) ## 1. ADC2 与 WiFi 冲突 ⚠️ 最常踩的坑 - **使用 WiFi 时 ADC2 完全不可用**(ADC2 模块与 WiFi 射频共享内部资源) - 解决:需要 WiFi + ADC → 只能用 **ADC1**(GPIO32–39) - 不使用 WiFi 时 ADC2 正常可用 - 即使 WiFi 短暂关闭也无法可靠复用 ADC2(需完全禁用 WiFi 驱动) ## 2. GPIO12 (MTDI) — Flash 电压陷阱 ⚠️ 最危险的坑 - GPIO12=LOW(默认):VDD_SDIO=3.3V → Flash 正常 ✅ - GPIO12=HIGH:VDD_SDIO=1.8V → Flash 无法读取 → **变砖** ❌ - **绝对不能在 GPIO12 上接上拉电阻到 3.3V** - **不能用 GPIO12 做 I2C SDA**(开漏+上拉会让 GPIO12 变高) - 如果必须用 GPIO12,用外部 **下拉** 电阻 ## 3. 仅输入引脚限制 - **GPIO34–39**: **无内部上拉/下拉**,外部必须自行加 - **GPIO34–39**: **不能做数字输出** - **GPIO34–39**: 不能做 I2C/SPI MOSI/UART TX/PWM 输出 ## 4. Flash/PSRAM 引脚占用 - **GPIO6–11**: 内部 Flash SPI(所有模组) - **GPIO16–17**: 内部 PSRAM(WROVER 模组) ## 5. 供电约束 - **工作电压**: 2.7–3.6V,推荐 **3.3V ±5%** - **WiFi TX 峰值电流**: ~500 mA - **供电纹波**: < **75 mVpp** - **EN 引脚**: 不能浮空,需上拉到 VDD3P3_RTC - **推荐 LDO**: ≥500 mA 输出能力 ## 6. JTAG 引脚冲突 - GPIO12 — MTDI, ⚡ Strapping(Flash 电压选择) - GPIO13 — MTCK, 无冲突 - GPIO14 — MTMS, 无冲突 - GPIO15 — MTDO, ⚡ Strapping ## 7. 外部晶振 - 外部高速晶振:**40 MHz**(必须) - 外部 RTC 晶振:**32.768 kHz**(可选,用于 Deep-sleep 精确计时) ## 8. 常见踩坑速查 - **用 GPIO12 做输出,板子不启动**: GPIO12 被外部上拉 → Flash 1.8V → 避免在 GPIO12 上加外部上拉 - **ADC 读数全是噪音**: 用了 ADC2 且 WiFi 开着 → 切换到 ADC1(GPIO32–39) - **GPIO34–39 输出不工作**: 它们是仅输入引脚 → 换个能做输出的 GPIO - **上电后直接进下载模式**: GPIO0 被外部拉低 → 检查 GPIO0 电路 - **Deep-sleep 后 RTC 内存丢了**: RTC Slow 内存只有 8KB 且需特殊 API → 使用 `RTC_DATA_ATTR` 属性 ## 上电时序要求 - t_STBL:**>= 50 µs** — VDD 电源轨稳定后到 EN (CHIP_PU) 拉高之间的最短等待时间 - t_RST:**>= 50 µs** — EN 拉低以触发硬件复位的最短保持时间 - t_H:**>= 3 ms** — EN 拉高后 Strapping 引脚值被内部锁存的时间,此后 Strapping 引脚恢复普通 GPIO 功能 > CHIP_PU (EN) 引脚**绝对不能浮空**。推荐电路:EN 通过 10kΩ 上拉到 VDD,对地接 1µF 电容做消抖和上电延迟。