ESP32 不建议使用的 GPIO 如下
- IO0 Strapping,用于选择 SPI 启动还是下载启动
- IO1 TXD , 用于串口下载
- IO2 Strapping,下载启动需要用
- IO3 RXD,用于串口下载
- IO5 Strapping, SDIO 从机信号输入输出时序
- IO6-11 内部 SPI FLASH
- IO12 Strapping, MTDI信号
- IO15 Strapping MTDO信号
ESP32S2 不建议使用的 GPIO 如下(这个是我自己总结的,缺少佐证):
- GPIO0 系统启动模式选择
GPIO1 TXD 用于串口下载GPIO3 RXD 用于串口下载- GPIO43 TXD 用于串口下载
- GPIO44 RXD 用于串口下载
GPIO37 SPI NOR/PSRAM 的SPIHDIO39 SPI NOR的SPICS06.IO40 SPI NOR/PSRAM 的SPICLKIO41 SPI NOR/PSRAM 的SPIQIO42 SPI NOR/PSRAM 的SPIDIO38 SPI NOR/PSRAM 的 SPIWP- IO26 用作PSRAM SPICS1
- IO27 用作PSRAM SPIHD
- IO28用作PSRAM SPIWP
- IO29 用作PSRAM SPICS0
- IO30 用作PSRAM SPICLK
- IO31 用作PSRAM SPIQ
- IO32 用作PSRAM SPID
- GPIO45 VDD_SPI 电压选择
- GPIO46 系统启动是否打印 ROM Code
关于 S2 的 PSRAM 在【参考3】有描述:

特别提醒:如果你使用开发板,例如 S2 Saola 这种, IO18 上有LED,如果直接使用这个pin作为SPI CLOCK可能会导致不断重启的问题。
参考:
1.http://www.360doc.com/content/20/0312/20/42387867_898729516.shtml
2.ESP32WROOM32D &ESP32WROOM32U 技术规格书
3.https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_cn.pdf
====================================================
2023年1月17日更新
ESP32S3不建议使用的 GPIO 如下:
1.GPIO0 Strapping
2.GPIO3 Strapping
3.GPIO19 USB-JTAG
4.GPIO20 USB-JTAG
5.GPIO26-37 SPI0/1
6.GPIO45 Strapping
7.GPIO46 Strapping
- Strapping 管脚:GPIO2、GPIO3、GPIO45 和 GPIO46 是 Strapping 管脚。更多信息请参考 ESP32-S3 技术规格书。
- SPI0/1:GPIO26-32 通常用于 SPI flash 和 PSRAM,不推荐用于其他用途。当使用八线 flash 或八线 PSRAM 或同时使用两者时,GPIO33~37 会连接到 SPIIO4 ~ SPIIO7 和 SPIDQS。因此,对于内嵌 ESP32-S3R8 或 ESP32-S3R8V 芯片的开发板,GPIO33~37 也不推荐用于其他用途。
- USB-JTAG:GPIO19 和 GPIO20 默认用于 USB-JTAG。用做 GPIO 时驱动程序将禁用 USB-JTAG。
上述来自:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s3/api-reference/peripherals/gpio.html