From 77aa76ecc41df119edc804e87067efe9bf494b74 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 1c6623a597..0e806a07cc 100644 --- a/components/esp_driver_uart/include/driver/uart.h +++ b/components/esp_driver_uart/include/driver/uart.h @@ -247,7 +247,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 7e2688abee..f70f3c8cb6 100644 --- a/components/esp_driver_uart/src/uart.c +++ b/components/esp_driver_uart/src/uart.c @@ -406,6 +406,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;