Skip to content

Commit 8e62997

Browse files
SuGliderlucasssvazpre-commit-ci-lite[bot]
authored
fix(UART): sets the correct uart clock source when using begin(baudrate) (#11122)
* fix(uart): uart begin does not set the clock source when baudrate changes * fix(uart): returns success on baud rate change operation * fix(code): uart typo - missing ( in the code * fix(uart): replacing mutex lock to avoid double lock * ci(pre-commit): Apply automatic fixes --------- Co-authored-by: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
1 parent 74ee9df commit 8e62997

File tree

2 files changed

+10
-13
lines changed

2 files changed

+10
-13
lines changed

cores/esp32/esp32-hal-uart.c

+9-12
Original file line numberDiff line numberDiff line change
@@ -585,17 +585,11 @@ uart_t *uartBegin(
585585
uartEnd(uart_nr);
586586
} else {
587587
bool retCode = true;
588-
UART_MUTEX_LOCK();
589588
//User may just want to change some parameters, such as baudrate, data length, parity, stop bits or pins
590589
if (uart->_baudrate != baudrate) {
591-
if (ESP_OK != uart_set_baudrate(uart_nr, baudrate)) {
592-
log_e("UART%d changing baudrate failed.", uart_nr);
593-
retCode = false;
594-
} else {
595-
log_v("UART%d changed baudrate to %d", uart_nr, baudrate);
596-
uart->_baudrate = baudrate;
597-
}
590+
retCode = uartSetBaudRate(uart, baudrate);
598591
}
592+
UART_MUTEX_LOCK();
599593
uart_word_length_t data_bits = (config & 0xc) >> 2;
600594
uart_parity_t parity = config & 0x3;
601595
uart_stop_bits_t stop_bits = (config & 0x30) >> 4;
@@ -972,10 +966,11 @@ void uartFlushTxOnly(uart_t *uart, bool txOnly) {
972966
UART_MUTEX_UNLOCK();
973967
}
974968

975-
void uartSetBaudRate(uart_t *uart, uint32_t baud_rate) {
969+
bool uartSetBaudRate(uart_t *uart, uint32_t baud_rate) {
976970
if (uart == NULL) {
977-
return;
971+
return false;
978972
}
973+
bool retCode = true;
979974
UART_MUTEX_LOCK();
980975
#if SOC_UART_SUPPORT_XTAL_CLK // ESP32-S3, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-H2 and ESP32-P4
981976
soc_module_clk_t newClkSrc = UART_SCLK_XTAL;
@@ -993,12 +988,14 @@ void uartSetBaudRate(uart_t *uart, uint32_t baud_rate) {
993988
uart_ll_set_sclk(UART_LL_GET_HW(uart->num), newClkSrc);
994989
#endif
995990
if (uart_set_baudrate(uart->num, baud_rate) == ESP_OK) {
996-
log_v("Setting UART%d baud rate to %d.", uart->num, baud_rate);
991+
log_v("Setting UART%d baud rate to %ld.", uart->num, baud_rate);
997992
uart->_baudrate = baud_rate;
998993
} else {
999-
log_e("Setting UART%d baud rate to %d has failed.", uart->num, baud_rate);
994+
retCode = false;
995+
log_e("Setting UART%d baud rate to %ld has failed.", uart->num, baud_rate);
1000996
}
1001997
UART_MUTEX_UNLOCK();
998+
return retCode;
1002999
}
10031000

10041001
uint32_t uartGetBaudRate(uart_t *uart) {

cores/esp32/esp32-hal-uart.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ void uartWriteBuf(uart_t *uart, const uint8_t *data, size_t len);
5858
void uartFlush(uart_t *uart);
5959
void uartFlushTxOnly(uart_t *uart, bool txOnly);
6060

61-
void uartSetBaudRate(uart_t *uart, uint32_t baud_rate);
61+
bool uartSetBaudRate(uart_t *uart, uint32_t baud_rate);
6262
uint32_t uartGetBaudRate(uart_t *uart);
6363

6464
void uartSetRxInvert(uart_t *uart, bool invert);

0 commit comments

Comments
 (0)