Skip to content

Commit 9aeb1ba

Browse files
ESP32-P4 UART Pin Definitions (#10521)
* feat(uart): allow pins_arduino.h to define esp32-p4 uart pins ESP32-P4 has UART default pins only for UART0 and UART1. This PR allows the board definition from pins_arduino.h to define RX2 ... RX4 and TX2 ... TX4 if necessary. It also solves the issue of begin(baud) with no pins for UART2...4 by just sending a error message and returning. * feat(uart): removes the uart2 pin definitions - not existant * fix(uart): solves the case when uart has already been initialized * ci(pre-commit): Apply automatic fixes * fix(ci): uart definition for esp32-p4 uart2 rx,tx pins --------- Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
1 parent 38a4c29 commit 9aeb1ba

File tree

3 files changed

+50
-4
lines changed

3 files changed

+50
-4
lines changed

Diff for: cores/esp32/HardwareSerial.cpp

+42
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,11 @@ void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, in
313313
// map logical pins to GPIO numbers
314314
rxPin = digitalPinToGPIONumber(rxPin);
315315
txPin = digitalPinToGPIONumber(txPin);
316+
int8_t _rxPin = uart_get_RxPin(_uart_nr);
317+
int8_t _txPin = uart_get_TxPin(_uart_nr);
318+
319+
rxPin = rxPin < 0 ? _rxPin : rxPin;
320+
txPin = txPin < 0 ? _txPin : txPin;
316321

317322
HSERIAL_MUTEX_LOCK();
318323
// First Time or after end() --> set default Pins
@@ -341,14 +346,51 @@ void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, in
341346
case UART_NUM_2:
342347
if (rxPin < 0 && txPin < 0) {
343348
// do not change RX2/TX2 if it has already been set before
349+
#ifdef RX2
344350
rxPin = _rxPin < 0 ? (int8_t)RX2 : _rxPin;
351+
#endif
352+
#ifdef TX2
345353
txPin = _txPin < 0 ? (int8_t)TX2 : _txPin;
354+
#endif
355+
}
356+
break;
357+
#endif
358+
#if SOC_UART_HP_NUM > 3 // may save some flash bytes...
359+
case UART_NUM_3:
360+
if (rxPin < 0 && txPin < 0) {
361+
// do not change RX2/TX2 if it has already been set before
362+
#ifdef RX3
363+
rxPin = _rxPin < 0 ? (int8_t)RX3 : _rxPin;
364+
#endif
365+
#ifdef TX3
366+
txPin = _txPin < 0 ? (int8_t)TX3 : _txPin;
367+
#endif
368+
}
369+
break;
370+
#endif
371+
#if SOC_UART_HP_NUM > 4 // may save some flash bytes...
372+
case UART_NUM_4:
373+
if (rxPin < 0 && txPin < 0) {
374+
// do not change RX2/TX2 if it has already been set before
375+
#ifdef RX4
376+
rxPin = _rxPin < 0 ? (int8_t)RX4 : _rxPin;
377+
#endif
378+
#ifdef TX4
379+
txPin = _txPin < 0 ? (int8_t)TX4 : _txPin;
380+
#endif
346381
}
347382
break;
348383
#endif
349384
}
350385
}
351386

387+
// if no RX/TX pins are defined, it will not start the UART driver
388+
if (rxPin < 0 && txPin < 0) {
389+
log_e("No RX/TX pins defined. Please set RX/TX pins.");
390+
HSERIAL_MUTEX_UNLOCK();
391+
return;
392+
}
393+
352394
// IDF UART driver keeps Pin setting on restarting. Negative Pin number will keep it unmodified.
353395
// it will detach previous UART attached pins
354396

Diff for: cores/esp32/HardwareSerial.h

-4
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,6 @@ typedef enum {
200200
#define RX2 (gpio_num_t)4
201201
#elif CONFIG_IDF_TARGET_ESP32S3
202202
#define RX2 (gpio_num_t)19
203-
#elif CONFIG_IDF_TARGET_ESP32P4
204-
#define RX2 (gpio_num_t)15
205203
#endif
206204
#endif
207205

@@ -210,8 +208,6 @@ typedef enum {
210208
#define TX2 (gpio_num_t)25
211209
#elif CONFIG_IDF_TARGET_ESP32S3
212210
#define TX2 (gpio_num_t)20
213-
#elif CONFIG_IDF_TARGET_ESP32P4
214-
#define TX2 (gpio_num_t)14
215211
#endif
216212
#endif
217213
#endif /* SOC_UART_HP_NUM > 2 */

Diff for: tests/validation/uart/uart.ino

+8
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,14 @@
5252
#define NEW_TX1 10
5353
#endif
5454

55+
// ESP32-P4 has no UART pin definition for RX2, TX2, RX3, TX3, RX4, TX4
56+
#ifndef RX2
57+
#define RX2 RX1
58+
#endif
59+
#ifndef TX2
60+
#define TX2 RX1
61+
#endif
62+
5563
/* Utility global variables */
5664

5765
static String recv_msg = "";

0 commit comments

Comments
 (0)