Skip to content

Commit 896d988

Browse files
ppescherbenwaffle
authored andcommitted
Fix UART error callback (clear flags and restart receive IT)
1 parent 7ef9fa9 commit 896d988

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

cores/arduino/stm32/uart.c

+12-5
Original file line numberDiff line numberDiff line change
@@ -797,16 +797,23 @@ void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
797797
}
798798
#else
799799
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_PE) != RESET) {
800-
tmpval = huart->Instance->RDR; /* Clear PE flag */
800+
__HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_PEF); /* Clear PE flag */
801801
} else if (__HAL_UART_GET_FLAG(huart, UART_FLAG_FE) != RESET) {
802-
tmpval = huart->Instance->RDR; /* Clear FE flag */
802+
__HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF); /* Clear FE flag */
803803
} else if (__HAL_UART_GET_FLAG(huart, UART_FLAG_NE) != RESET) {
804-
tmpval = huart->Instance->RDR; /* Clear NE flag */
804+
__HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_NEF); /* Clear NE flag */
805805
} else if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
806-
tmpval = huart->Instance->RDR; /* Clear ORE flag */
806+
__HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF); /* Clear ORE flag */
807807
}
808808
#endif
809-
809+
/* Restart receive interrupt after any error */
810+
uint8_t index = uart_index(huart);
811+
if (index < UART_NUM) {
812+
serial_t *obj = rx_callback_obj[index];
813+
if (!serial_rx_active(obj)) {
814+
HAL_UART_Receive_IT(uart_handlers[obj->index], &(obj->recv), 1);
815+
}
816+
}
810817
UNUSED(tmpval);
811818
}
812819

0 commit comments

Comments
 (0)