Skip to content

Commit 6653e31

Browse files
committed
Fix UART error callback (clear flags and restart receive IT)
1 parent 4d955c2 commit 6653e31

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

Diff for: cores/arduino/stm32/uart.c

+12-5
Original file line numberDiff line numberDiff line change
@@ -801,16 +801,23 @@ void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
801801
}
802802
#else
803803
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_PE) != RESET) {
804-
tmpval = huart->Instance->RDR; /* Clear PE flag */
804+
__HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_PEF); /* Clear PE flag */
805805
} else if (__HAL_UART_GET_FLAG(huart, UART_FLAG_FE) != RESET) {
806-
tmpval = huart->Instance->RDR; /* Clear FE flag */
806+
__HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF); /* Clear FE flag */
807807
} else if (__HAL_UART_GET_FLAG(huart, UART_FLAG_NE) != RESET) {
808-
tmpval = huart->Instance->RDR; /* Clear NE flag */
808+
__HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_NEF); /* Clear NE flag */
809809
} else if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
810-
tmpval = huart->Instance->RDR; /* Clear ORE flag */
810+
__HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF); /* Clear ORE flag */
811811
}
812812
#endif
813-
813+
/* Restart receive interrupt after any error */
814+
uint8_t index = uart_index(huart);
815+
if(index < UART_NUM) {
816+
serial_t *obj = rx_callback_obj[index];
817+
if (!serial_rx_active(obj)) {
818+
HAL_UART_Receive_IT(uart_handlers[obj->index], &(obj->recv), 1);
819+
}
820+
}
814821
UNUSED(tmpval);
815822
}
816823

0 commit comments

Comments
 (0)