diff --git a/targets/TARGET_STM/TARGET_STM32F0/serial_device.c b/targets/TARGET_STM/TARGET_STM32F0/serial_device.c index ca9f1239a1..cbaee8db2b 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/serial_device.c +++ b/targets/TARGET_STM/TARGET_STM32F0/serial_device.c @@ -472,7 +472,12 @@ int serial_readable(serial_t *obj) { struct serial_s *obj_s = SERIAL_S(obj); UART_HandleTypeDef *huart = &uart_handlers[obj_s->index]; - + /* To avoid a target blocking case, let's check for + * possible OVERRUN error and discard it + */ + if(__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE)) { + __HAL_UART_CLEAR_OREFLAG(huart); + } // Check if data is received return (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) ? 1 : 0; } diff --git a/targets/TARGET_STM/TARGET_STM32F1/serial_device.c b/targets/TARGET_STM/TARGET_STM32F1/serial_device.c index 938df98674..226d88cd60 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/serial_device.c +++ b/targets/TARGET_STM/TARGET_STM32F1/serial_device.c @@ -289,7 +289,12 @@ int serial_readable(serial_t *obj) { struct serial_s *obj_s = SERIAL_S(obj); UART_HandleTypeDef *huart = &uart_handlers[obj_s->index]; - + /* To avoid a target blocking case, let's check for + * possible OVERRUN error and discard it + */ + if(__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE)) { + __HAL_UART_CLEAR_OREFLAG(huart); + } // Check if data is received return (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) ? 1 : 0; } diff --git a/targets/TARGET_STM/TARGET_STM32F2/serial_device.c b/targets/TARGET_STM/TARGET_STM32F2/serial_device.c index 3d173e5917..a869fbc2ee 100644 --- a/targets/TARGET_STM/TARGET_STM32F2/serial_device.c +++ b/targets/TARGET_STM/TARGET_STM32F2/serial_device.c @@ -438,7 +438,12 @@ int serial_readable(serial_t *obj) { struct serial_s *obj_s = SERIAL_S(obj); UART_HandleTypeDef *huart = &uart_handlers[obj_s->index]; - + /* To avoid a target blocking case, let's check for + * possible OVERRUN error and discard it + */ + if(__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE)) { + __HAL_UART_CLEAR_OREFLAG(huart); + } // Check if data is received return (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) ? 1 : 0; } diff --git a/targets/TARGET_STM/TARGET_STM32F3/serial_device.c b/targets/TARGET_STM/TARGET_STM32F3/serial_device.c index 5e1ce117e5..4f377d385c 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/serial_device.c +++ b/targets/TARGET_STM/TARGET_STM32F3/serial_device.c @@ -373,7 +373,12 @@ int serial_readable(serial_t *obj) { struct serial_s *obj_s = SERIAL_S(obj); UART_HandleTypeDef *huart = &uart_handlers[obj_s->index]; - + /* To avoid a target blocking case, let's check for + * possible OVERRUN error and discard it + */ + if(__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE)) { + __HAL_UART_CLEAR_OREFLAG(huart); + } // Check if data is received return (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) ? 1 : 0; } diff --git a/targets/TARGET_STM/TARGET_STM32F4/serial_device.c b/targets/TARGET_STM/TARGET_STM32F4/serial_device.c index 0d5ad8c890..17c59618c9 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/serial_device.c +++ b/targets/TARGET_STM/TARGET_STM32F4/serial_device.c @@ -435,7 +435,12 @@ int serial_readable(serial_t *obj) { struct serial_s *obj_s = SERIAL_S(obj); UART_HandleTypeDef *huart = &uart_handlers[obj_s->index]; - + /* To avoid a target blocking case, let's check for + * possible OVERRUN error and discard it + */ + if(__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE)) { + __HAL_UART_CLEAR_OREFLAG(huart); + } // Check if data is received return (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) ? 1 : 0; } diff --git a/targets/TARGET_STM/TARGET_STM32F7/serial_device.c b/targets/TARGET_STM/TARGET_STM32F7/serial_device.c index f5b2f3da27..8530b867b9 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/serial_device.c +++ b/targets/TARGET_STM/TARGET_STM32F7/serial_device.c @@ -426,7 +426,12 @@ int serial_readable(serial_t *obj) { struct serial_s *obj_s = SERIAL_S(obj); UART_HandleTypeDef *huart = &uart_handlers[obj_s->index]; - + /* To avoid a target blocking case, let's check for + * possible OVERRUN error and discard it + */ + if(__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE)) { + __HAL_UART_CLEAR_OREFLAG(huart); + } // Check if data is received return (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) ? 1 : 0; } diff --git a/targets/TARGET_STM/TARGET_STM32L0/serial_device.c b/targets/TARGET_STM/TARGET_STM32L0/serial_device.c index 06ac4d31b6..f94457605b 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/serial_device.c +++ b/targets/TARGET_STM/TARGET_STM32L0/serial_device.c @@ -355,7 +355,12 @@ int serial_readable(serial_t *obj) { struct serial_s *obj_s = SERIAL_S(obj); UART_HandleTypeDef *huart = &uart_handlers[obj_s->index]; - + /* To avoid a target blocking case, let's check for + * possible OVERRUN error and discard it + */ + if(__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE)) { + __HAL_UART_CLEAR_OREFLAG(huart); + } // Check if data is received return (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) ? 1 : 0; } diff --git a/targets/TARGET_STM/TARGET_STM32L1/serial_device.c b/targets/TARGET_STM/TARGET_STM32L1/serial_device.c index 01cced3260..b86936aba6 100755 --- a/targets/TARGET_STM/TARGET_STM32L1/serial_device.c +++ b/targets/TARGET_STM/TARGET_STM32L1/serial_device.c @@ -345,7 +345,12 @@ int serial_readable(serial_t *obj) { struct serial_s *obj_s = SERIAL_S(obj); UART_HandleTypeDef *huart = &uart_handlers[obj_s->index]; - + /* To avoid a target blocking case, let's check for + * possible OVERRUN error and discard it + */ + if(__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE)) { + __HAL_UART_CLEAR_OREFLAG(huart); + } // Check if data is received return (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) ? 1 : 0; } diff --git a/targets/TARGET_STM/TARGET_STM32L4/serial_device.c b/targets/TARGET_STM/TARGET_STM32L4/serial_device.c index 61657cf1dc..970d1b770f 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/serial_device.c +++ b/targets/TARGET_STM/TARGET_STM32L4/serial_device.c @@ -391,7 +391,12 @@ int serial_readable(serial_t *obj) { struct serial_s *obj_s = SERIAL_S(obj); UART_HandleTypeDef *huart = &uart_handlers[obj_s->index]; - + /* To avoid a target blocking case, let's check for + * possible OVERRUN error and discard it + */ + if(__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE)) { + __HAL_UART_CLEAR_OREFLAG(huart); + } // Check if data is received return (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) ? 1 : 0; }