Siéntase libre de abrir un problema o PR si tiene alguna sugerencia. Y si le resultó útil, entonces puede visitar uno de estos enlaces:
Siempre he usado esta página de nerds aleatorios como referencia para la cual los pines ESP32 son seguros de usar.
Pero no he visto uno similar para el ESP32 -S3, ¡así que pensé que debería hacer uno!
La mayoría de esta información se toma de la hoja de datos ESP32-S3-Wroom con información adicional de la hoja de datos ESP32-S3.
Puede descargar una versión PDF de alta resolución de esta imagen aquí.
La imagen de arriba es un módulo de turbulenta con los pines etiquetados. Bold indica el comportamiento predeterminado de cada pin. He omitido algunos de los nombres de alfileres más esotéricos, pero puede encontrar la lista completa en la hoja de datos.
Hay mucha más flexibilidad con el ESP32-S3, por lo que la mayoría de los pines se pueden usar para cualquier periférico. Sin embargo, todavía hay algunos alfileres que tienen un comportamiento divertido.
Evite estos a menos que no tenga otra opción.
Nombre | Detalles |
---|---|
GPIO0 | Mantenga esto bajo durante el arranque para ingresar al modo de descarga de firmware. |
GPIO3 | En combinación con efusas controla el comportamiento predeterminado de los pines JTAG. Seguro de usar a menos que esté jugando con efusas |
GPIO45 | VDD_SPI - Es mejor dejar esto desconectado |
GPIO46 | Impresión de mensajes ROM: es mejor dejar esto desconectado también. Causa problemas con la descarga de firmware (consulte la tabla de control del modo de arranque a continuación) |
Puede usar estos pines como entradas o salidas una vez que el ESP ha iniciado. Pero tenga en cuenta las resistencias de pull hacia arriba/hacia abajo (ver más abajo).
Si desea usarlos como entradas, asegúrese de no entrar en conflicto con las configuraciones predeterminadas durante el arranque.
Por ejemplo, es seguro tener un botón conectado a GPIO0 y usar ese botón en su código. Pero si mantiene presionado el botón durante el arranque, ingresará al modo de descarga de firmware.
Si desea usarlos como salidas, tenga en cuenta las resistencias de extracción o extracción predeterminadas.
Modo de arranque | GPIO0 | GPIO46 |
---|---|---|
SPI Boot (predeterminado) | 1 | Cualquier valor |
Descargar arranque | 0 | 0 |
Combinación no válida | 0 | 1 |
Alfiler | Configuración predeterminada | Valor de bit |
---|---|---|
GPIO0 | Pullado | 1 |
GPIO3 | Flotante | - |
GPIO45 | Desplegable | 0 |
GPIO46 | Desplegable | 0 |
Estos pueden usar cualquier pin GPIO en el ESP32-S3.
GPIO19, GPIO20: ambos se usan para la conexión USB.
Para los módulos que incluyen PSRAM Octal (cualquier módulo que tenga 8MB PSRAM) no debe usar GPIO35, GPIO36 o GPIO37.
GPIO39, GPIO40, GPIO41, GPIO42
El comportamiento de estos pines está determinado por efusas junto con GPIO3. Por defecto, si aún no ha quemado ninguna efecto, estos pines son seguros de usar. JTAG estará disponible sobre USB.
Si desea usar estos pines para JTAG, debe grabar algunas efusas y controlar GPIO3 al inicio. Consulte la Sección 2.6.4 de la hoja de datos para obtener todos los detalles.
GPIO43, GPIO44
Estos predeterminados a UART0 hasta que su código los use.
Los canales ADC están todos en pines fijos, y si está utilizando wifi, no puede usar la unidad ADC 2
Los pines para la unidad ADC 1 son:
Número de GPIO | Canal ADC |
---|---|
GPIO1 | ADC1_CH0 |
GPIO2 | ADC1_CH1 |
GPIO3 | ADC1_CH2 |
GPIO4 | ADC1_CH3 |
GPIO5 | ADC1_CH4 |
GPIO6 | ADC1_CH5 |
GPIO7 | ADC1_CH6 |
GPIO8 | ADC1_CH7 |
GPIO9 | ADC1_CH8 |
No hay DAC en el ESP32 -S3: puede simular la salida analógica usando PWM o I2S PDM.
Los siguientes alfileres tienen fallas durante el encendido.
GPIO1, GPIO2, GPIO3, GPIO4, GPIO5, GPIO6, GPIO7, GPIO8, GPIO9, GPIO10, GPIO11, GPIO12, GPIO13, GPIO14, GPIO15, GPIO16, GPIO17:
GPIO18:
GPIO19, GPIO20:
Ver Tabla 2-2 aquí
Si ve fallas de encendido en algunos alfileres al ejecutar "su" software ", pero no cuando ejecuta un mundo simple de saludo, entonces este podría ser un error común:
gpio_reset_pin ( RELAY1_SC );
gpio_set_direction ( RELAY1_SC , GPIO_MODE_OUTPUT );
Esta sintaxis se puede encontrar, por ejemplo, aquí: Blink_example_Main.c
En su lugar, use esta sintaxis:
//zero-initialize the config structure.
gpio_config_t io_conf = {};
//disable interrupt
io_conf . intr_type = GPIO_INTR_DISABLE ;
//set as output mode
io_conf . mode = GPIO_MODE_OUTPUT ;
//bit mask of the pins that you want to set,e.g.GPIO18/19
io_conf . pin_bit_mask = ( 1ULL << RELAY1_SC );
//disable pull-down mode
io_conf . pull_down_en = 0 ;
//disable pull-up mode
io_conf . pull_up_en = 0 ;
//configure GPIO with the given settings
gpio_config ( & io_conf );
Esta sintaxis se puede encontrar, por ejemplo, aquí: gpio_example_main.c
Hay casos en los que el PIN está conectado por defecto a un dominio de potencia +3.3V o un +1.8V. Los ejemplos son GPIO20 (D+) o GPIO48.
Puede apagarlos en una etapa muy temprana en el gestor de arranque:
ver aquí
Con, por ejemplo, el siguiente código:
void bootloader_before_init ( void ) {
/* Keep in my mind that a lot of functions cannot be called from here
* as system initialization has not been performed yet, including
* BSS, SPI flash, or memory protection. */
ESP_LOGI ( "HOOK" , "This hook is called BEFORE bootloader initialization" );
gpio_hal_iomux_func_sel ( GPIO_PIN_MUX_REG [ GPIO_NUM_20 ], PIN_FUNC_GPIO );
esp_rom_gpio_pad_select_gpio ( GPIO_NUM_48 );
gpio_ll_output_enable ( & GPIO , GPIO_NUM_48 );
gpio_ll_set_level ( & GPIO , GPIO_NUM_48 , 0 );
}
Hay una hoja de cálculo realmente práctica aquí proporcionada por Mark Nowell con listas de módulos ESP32-S3 y sus pinouts.
Nombre | Número de alfiler | Tipo | Descripción |
---|---|---|---|
Gnd | 1,40 | PAG | Gnd |
Epad | 41 | PAG | Gnd |
3v3 | 2 | PAG | Fuente de alimentación |
Interno | 3 | I | Alto: ON, habilita el chip. BAJO: Off, el chip se apaga. Nota: No deje el pin flotante. |
GPIO0 | 27 | I/O/T | RTC_GPIO0, GPIO0 |
GPIO1 | 39 | I/O/T | RTC_GPIO1, GPIO1 , Touch1, ADC1_CH0 |
GPIO2 | 38 | I/O/T | RTC_GPIO2, GPIO2 , Touch2, ADC1_CH1 |
GPIO3 | 15 | I/O/T | RTC_GPIO3, GPIO3 , Touch3, ADC1_CH2 |
GPIO4 | 4 | I/O/T | RTC_GPIO4, GPIO4 , Touch4, ADC1_CH3 |
GPIO5 | 5 | I/O/T | RTC_GPIO5, GPIO5 , Touch5, ADC1_CH4 |
GPIO6 | 6 | I/O/T | RTC_GPIO6, GPIO6 , Touch6, ADC1_CH5 |
GPIO7 | 7 | I/O/T | RTC_GPIO7, GPIO7 , Touch7, ADC1_CH6 |
GPIO8 | 12 | I/O/T | RTC_GPIO8, GPIO8 , Touch8, ADC1_CH7, subspics1 |
GPIO9 | 17 | I/O/T | RTC_GPIO9, GPIO9 , Touch9, ADC1_CH8, FSPIHD, subspiHD |
GPIO10 | 18 | I/O/T | RTC_GPIO10, GPIO10 , Touch10, ADC1_CH9, FSPIC0, FSPIIO4, Subspics0 |
GPIO11 | 19 | I/O/T | RTC_GPIO11, GPIO11 , Touch11, ADC2_CH0, FSPID, FSPIIO5, subspid |
GPIO12 | 20 | I/O/T | RTC_GPIO12, GPIO12 , Touch12, ADC2_CH1, FSPICLK, FSPIIO6, Subspiclk |
GPIO13 | 21 | I/O/T | RTC_GPIO13, GPIO13 , Touch13, ADC2_CH2, FSPIQ, FSPIIO7, SubspIQ |
GPIO14 | 22 | I/O/T | RTC_GPIO14, GPIO14 , Touch14, ADC2_CH3, FSPIWP, FSPIDQS, SubspIWP |
GPIO15 | 8 | I/O/T | RTC_GPIO15, GPIO15 , U0RTS, ADC2_CH4, XTAL_32K_P |
GPIO16 | 9 | I/O/T | RTC_GPIO16, GPIO16 , U0CTS, ADC2_CH5, XTAL_32K_N |
GPIO17 | 10 | I/O/T | RTC_GPIO17, GPIO17 , U1TXD, ADC2_CH6 |
GPIO18 | 11 | I/O/T | RTC_GPIO18, GPIO18 , U1RXD, ADC2_CH7, CLK_OUT3 |
USB_D- | 13 | I/O/T | RTC_GPIO19, GPIO19, U1RTS, ADC2_CH8, CLK_OUT2, USB_D- |
USB_D+ | 14 | I/O/T | RTC_GPIO20, GPIO20, U1CTS, ADC2_CH9, CLK_OUT1, USB_D+ |
GPIO21 | 23 | I/O/T | RTC_GPIO21, GPIO21 |
Spics1 | I/O/T | Spics1, GPIO26 | |
GPIO33 | I/O/T | GPIO33 | |
GPIO34 | I/O/T | GPIO33 | |
GPIO35 | 28 | I/O/T | SPIIO6, GPIO35 , FSPID, subspid |
GPIO36 | 29 | I/O/T | SPIIO7, GPIO36 , Fspiclk, subespiclk |
GPIO37 | 30 | I/O/T | SPIDQS, GPIO37 , FSPIQ, subspiq |
GPIO38 | 31 | I/O/T | GPIO38 , FSPIWP, subspiWP |
Mtck | 32 | I/O/T | MTCK , GPIO39, CLK_OUT3, subspics1 |
Mtdo | 33 | I/O/T | MTDO , GPIO40, CLK_OUT2 |
Mtdi | 34 | I/O/T | MTDI , GPIO41, CLK_OUT1 |
MTMS | 35 | I/O/T | MTMS , GPIO42 |
U0TXD | 37 | I/O/T | U0TXD , GPIO43, CLK_OUT1 |
U0RXD | 36 | I/O/T | U0RXD , GPIO44, CLK_OUT2 |
GPIO45 | 26 | I/O/T | GPIO45 |
GPIO46 | 16 | I/O/T | GPIO46 |
GPIO47 | 24 | I/O/T | Spiclk_p_diff, GPIO47 , subspiclk_p_diff |
GPIO48 | 25 | I/O/T | Spiclk_n_diff, gpio48 , subspiclk_n_diff |
Para las personas que prefieren el contenido de video, puede ver una versión de video aquí: