From be2bb37f0e7d727797642c4468faadb26cf68145 Mon Sep 17 00:00:00 2001 From: Song Ruo Jing Date: Fri, 28 Nov 2025 20:34:06 +0800 Subject: [PATCH] fix(uart): Avoid division by zero error when calling uart_get_baudrate If uart_driver_install is not called before uart_get_baudrate, the UART port may not be ready. In such cases, the register values cannot be read out, leading to a division by zero error in uart_ll_get_baudrate. This commit adds a check to ensure the UART port is enabled before attempting to read its registers. Closes https://github.com/espressif/esp-idf/issues/17513 --- components/esp_driver_uart/include/driver/uart.h | 2 +- components/esp_driver_uart/src/uart.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/components/esp_driver_uart/include/driver/uart.h b/components/esp_driver_uart/include/driver/uart.h index 13aa41cfac..911e138c94 100644 --- a/components/esp_driver_uart/include/driver/uart.h +++ b/components/esp_driver_uart/include/driver/uart.h @@ -248,7 +248,7 @@ esp_err_t uart_set_baudrate(uart_port_t uart_num, uint32_t baudrate); * @param baudrate Pointer to accept value of UART baud rate * * @return - * - ESP_FAIL Parameter error + * - ESP_FAIL Parameter error or the UART port is not enabled * - ESP_OK Success, result will be put in (*baudrate) * */ diff --git a/components/esp_driver_uart/src/uart.c b/components/esp_driver_uart/src/uart.c index e300a431d5..70a5da83ee 100644 --- a/components/esp_driver_uart/src/uart.c +++ b/components/esp_driver_uart/src/uart.c @@ -390,6 +390,7 @@ esp_err_t uart_set_baudrate(uart_port_t uart_num, uint32_t baud_rate) esp_err_t uart_get_baudrate(uart_port_t uart_num, uint32_t *baudrate) { ESP_RETURN_ON_FALSE((uart_num < UART_NUM_MAX), ESP_FAIL, UART_TAG, "uart_num error"); + ESP_RETURN_ON_FALSE(uart_ll_is_enabled(uart_num), ESP_FAIL, UART_TAG, "uart port not enabled, unable to get register values"); soc_module_clk_t src_clk; uint32_t sclk_freq;