Skip to content

Commit 11c4e7b

Browse files
committed
Fix ESP8266 HardwarEserial init
1 parent 336a670 commit 11c4e7b

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

src/components/uart/hardware.cpp

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,25 @@ bool UARTHardware::ConfigureSerial() {
126126
_baud_rate = _config.baud_rate;
127127
#endif // HAS_SW_SERIAL
128128
} else {
129-
// Create a new HardwareSerial instance
129+
#if ARDUINO_ARCH_RP2040
130+
// On RP2040, use predefined Serial1 or Serial2 instances
131+
switch (_config.uart_nbr) {
132+
case 0:
133+
_hwSerial = &Serial1;
134+
break;
135+
case 1:
136+
_hwSerial = &Serial2;
137+
break;
138+
default:
139+
WS_DEBUG_PRINTLN(
140+
"[uart] ERROR: Invalid UART number for RP2040 (use 0 or 1)!");
141+
return false;
142+
}
143+
_hwSerial->setRX(rx_pin);
144+
_hwSerial->setTX(tx_pin);
145+
_hwSerial->begin((unsigned long)_config.baud_rate, (uint32_t)cfg);
146+
#else
147+
// Create a new HardwareSerial instance for other platforms
130148
_hwSerial = new HardwareSerial(_config.uart_nbr);
131149
if (_hwSerial == nullptr) {
132150
WS_DEBUG_PRINTLN(
@@ -137,15 +155,12 @@ bool UARTHardware::ConfigureSerial() {
137155
#if ARDUINO_ARCH_ESP32
138156
_hwSerial->begin((unsigned long)_config.baud_rate, (uint32_t)cfg, rx_pin,
139157
tx_pin, false, (unsigned long)_config.timeout);
140-
#elif ARDUINO_ARCH_RP2040
141-
_hwSerial->setRx(rx_pin);
142-
_hwSerial->setTx(tx_pin);
143-
_hwSerial->begin((unsigned long)_config.baud_rate, (uint32_t)cfg);
144158
#else
145159
// ESP8266, SAMD, and other platforms
146160
// take the default Arduino/Wiring API arguments
147161
_hwSerial->begin((unsigned long)_config.baud_rate, (uint32_t)cfg);
148162
#endif
163+
#endif // ARDUINO_ARCH_RP2040
149164
_baud_rate = _config.baud_rate;
150165
}
151166
return true;

0 commit comments

Comments
 (0)