From 53f172bb0703156db1cedaeb381bdbb88b8a9e9d Mon Sep 17 00:00:00 2001 From: raphaelcoeffic Date: Fri, 28 Apr 2023 13:05:31 +0200 Subject: [PATCH] fix: possible endless loop in case some error flag is set but RXNE is not Fixes #3482 --- radio/src/targets/common/arm/stm32/stm32_usart_driver.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/radio/src/targets/common/arm/stm32/stm32_usart_driver.cpp b/radio/src/targets/common/arm/stm32/stm32_usart_driver.cpp index 5f4991729..63858ace0 100644 --- a/radio/src/targets/common/arm/stm32/stm32_usart_driver.cpp +++ b/radio/src/targets/common/arm/stm32/stm32_usart_driver.cpp @@ -557,15 +557,15 @@ void stm32_usart_isr(const stm32_usart_t* usart, etx_serial_callbacks_t* cb) // Drain RX while (status & (LL_USART_SR_RXNE | USART_FLAG_ERRORS)) { + // This will clear the RXNE/error bits in USART_SR register + uint8_t data = LL_USART_ReadReg(usart->USARTx, DR); + if (status & USART_FLAG_ERRORS) { if (cb->on_error) cb->on_error(); } if (status & LL_USART_SR_RXNE) { - // This will clear the RXNE bit in USART_DR register - uint8_t data = LL_USART_ReadReg(usart->USARTx, DR); - if (cb->on_receive) cb->on_receive(data); }