@@ -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