Skip to content

Commit

Permalink
fix(HardwareSerial): fix pin remapping in begin() (#10380)
Browse files Browse the repository at this point in the history
The pin remapping functions have to be called as early as possible in
the begin() function, to immediately convert the input parameters to the
GPIO numbers used everywhere in the core.

This issue has always been dormant since the introduction of pin
remapping in 9b4622d, but was exposed by the recent UART pin detach
support, which actually disabled the original Serial0 pins.

Move the pin remapping function calls earlier in the begin() function to
fix this issue.
  • Loading branch information
pillo79 authored Oct 1, 2024
1 parent f23914e commit 8ff2da7
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions cores/esp32/HardwareSerial.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,10 @@ void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, in
}
#endif

// map logical pins to GPIO numbers
rxPin = digitalPinToGPIONumber(rxPin);
txPin = digitalPinToGPIONumber(txPin);

HSERIAL_MUTEX_LOCK();
// First Time or after end() --> set default Pins
if (!uartIsDriverInstalled(_uart)) {
Expand Down Expand Up @@ -317,9 +321,6 @@ void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, in
}
}

// map logical pins to GPIO numbers
rxPin = digitalPinToGPIONumber(rxPin);
txPin = digitalPinToGPIONumber(txPin);
// IDF UART driver keeps Pin setting on restarting. Negative Pin number will keep it unmodified.
// it will detach previous UART attached pins

Expand Down

0 comments on commit 8ff2da7

Please sign in to comment.