Para responder realmente a tu pregunta, generalmente descarto todo lo recibido con un error. Esto puede incluir reiniciar el hardware de UART, dependiendo de qué error sea y de los detalles del hardware de UART.
La única excepción es si desea recibir deliberadamente descansos. Los que aparecen como errores de encuadre. En ese caso, se pasan los errores de encuadre a los niveles superiores como condiciones especiales. Sin embargo, eso requiere que la información fuera de banda se pase a niveles más altos y, por lo tanto, la interfaz del receptor UART no se puede ver como algo tan simple como obtener una corriente de bytes. Creo que he hecho esto exactamente una vez en muchos proyectos de microcontroladores porque tenía que ser compatible con un sistema antiguo donde se usaban deliberadamente los descansos.
Steven te ha dado algunas buenas ideas sobre qué hacer al respecto en el nivel superior. Cuando crees que hay una posibilidad real de errores y la integridad de los datos es importante, entonces normalmente encapsulas fragmentos de datos en paquetes con sumas de comprobación. El receptor envía un ACK por cada suma de comprobación recibida correctamente.
Sin embargo, la gran mayoría de las veces los errores UART son tan poco probables y no tan críticos que puedes ignorarlos en el nivel alto. El tipo de errores que el hardware de UART puede detectar se debe generalmente a la estupidez del operador, no al ruido de la línea. La mayor parte del ruido puede causar datos erróneos, que el UART no detectará. Por lo tanto, el controlador UART de bajo nivel arroja todo lo que se asocia inmediatamente con un error UART, pero por lo demás continúa pasando el flujo de bytes recibidos hasta el siguiente nivel. De hecho, lo hace incluso si está utilizando paquetes y sumas de comprobación, ya que se realiza a un nivel más alto que donde se reciben los bytes individuales.