diff --git a/drivers/serial/uart_stm32.c b/drivers/serial/uart_stm32.c index d8c63cdbf13..4cfdb5e36ef 100644 --- a/drivers/serial/uart_stm32.c +++ b/drivers/serial/uart_stm32.c @@ -616,6 +616,10 @@ static int uart_stm32_err_check(const struct device *dev) err |= UART_ERROR_FRAMING; } + if (LL_USART_IsActiveFlag_NE(config->usart)) { + err |= UART_ERROR_NOISE; + } + #if !defined(CONFIG_SOC_SERIES_STM32F0X) || defined(USART_LIN_SUPPORT) if (LL_USART_IsActiveFlag_LBD(config->usart)) { err |= UART_BREAK; @@ -641,10 +645,10 @@ static int uart_stm32_err_check(const struct device *dev) if (err & UART_ERROR_FRAMING) { LL_USART_ClearFlag_FE(config->usart); } - /* Clear noise error as well, - * it is not represented by the errors enum - */ - LL_USART_ClearFlag_NE(config->usart); + + if (err & UART_ERROR_NOISE) { + LL_USART_ClearFlag_NE(config->usart); + } return err; }