Skip to content

Commit b66aa19

Browse files
authored
Makes UART work at any APB Frequency (#8097)
Fixes HardwareSerial to work with IDF 5.1 on any CPU/APB Frequency (240MHz to 10MHZ), including user created low power modes.
1 parent 6dbdd00 commit b66aa19

File tree

1 file changed

+2
-21
lines changed

1 file changed

+2
-21
lines changed

Diff for: cores/esp32/esp32-hal-uart.c

+2-21
Original file line numberDiff line numberDiff line change
@@ -110,19 +110,6 @@ void uartDetachPins(uart_t* uart, int8_t rxPin, int8_t txPin, int8_t ctsPin, int
110110
UART_MUTEX_UNLOCK();
111111
}
112112

113-
// solves issue https://github.com/espressif/arduino-esp32/issues/6032
114-
// baudrate must be multiplied when CPU Frequency is lower than APB 80MHz
115-
uint32_t _get_effective_baudrate(uint32_t baudrate)
116-
{
117-
uint32_t Freq = getApbFrequency()/1000000;
118-
if (Freq < 80) {
119-
return 80 / Freq * baudrate;
120-
}
121-
else {
122-
return baudrate;
123-
}
124-
}
125-
126113
// Routines that take care of UART events will be in the HardwareSerial Class code
127114
void uartGetEventQueue(uart_t* uart, QueueHandle_t *q)
128115
{
@@ -204,14 +191,8 @@ uart_t* uartBegin(uint8_t uart_nr, uint32_t baudrate, uint32_t config, int8_t rx
204191
uart_config.stop_bits = (config & 0x30) >> 4;
205192
uart_config.flow_ctrl = UART_HW_FLOWCTRL_DISABLE;
206193
uart_config.rx_flow_ctrl_thresh = rxfifo_full_thrhd;
207-
#if SOC_UART_SUPPORT_XTAL_CLK
208-
// works independently of APB frequency
209-
uart_config.source_clk = UART_SCLK_XTAL; // ESP32C3, ESP32S3
210194
uart_config.baud_rate = baudrate;
211-
#else
212-
uart_config.source_clk = UART_SCLK_APB; // ESP32, ESP32S2
213-
uart_config.baud_rate = _get_effective_baudrate(baudrate);
214-
#endif
195+
uart_config.source_clk = UART_SCLK_APB;
215196
ESP_ERROR_CHECK(uart_driver_install(uart_nr, rx_buffer_size, tx_buffer_size, 20, &(uart->uart_event_queue), 0));
216197
ESP_ERROR_CHECK(uart_param_config(uart_nr, &uart_config));
217198
ESP_ERROR_CHECK(uart_set_pin(uart_nr, txPin, rxPin, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE));
@@ -467,7 +448,7 @@ void uartSetBaudRate(uart_t* uart, uint32_t baud_rate)
467448
UART_MUTEX_LOCK();
468449
uint32_t sclk_freq;
469450
if(uart_get_sclk_freq(UART_SCLK_DEFAULT, &sclk_freq) == ESP_OK){
470-
uart_ll_set_baudrate(UART_LL_GET_HW(uart->num), _get_effective_baudrate(baud_rate), sclk_freq);
451+
uart_ll_set_baudrate(UART_LL_GET_HW(uart->num), baud_rate, sclk_freq);
471452
}
472453
UART_MUTEX_UNLOCK();
473454
}

0 commit comments

Comments
 (0)