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
This commit is contained in:
Song Ruo Jing
2026-01-22 20:34:50 +08:00
parent 8ae44fca86
commit 77aa76ecc4
2 changed files with 2 additions and 1 deletions
@@ -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 * @param baudrate Pointer to accept value of UART baud rate
* *
* @return * @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) * - ESP_OK Success, result will be put in (*baudrate)
* *
*/ */
+1
View File
@@ -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_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_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; soc_module_clk_t src_clk;
uint32_t sclk_freq; uint32_t sclk_freq;