Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9aeb1ba

Browse files
SuGliderpre-commit-ci-lite[bot]
andauthored
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

‎cores/esp32/HardwareSerial.cpp‎

Lines changed: 42 additions & 0 deletions
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

‎cores/esp32/HardwareSerial.h‎

Lines changed: 0 additions & 4 deletions
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 */

‎tests/validation/uart/uart.ino‎

Lines changed: 8 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /