Para realmente responder à sua pergunta, geralmente descarto qualquer coisa recebida com erro. Isso pode incluir a reinicialização do hardware UART, dependendo do erro e dos detalhes do hardware UART.
A única exceção é se você deseja receber deliberadamente pausas. Aqueles aparecem como erros de enquadramento. Nesse caso, você passa erros de enquadramento para os níveis mais altos como condições especiais. No entanto, isso exige que informações fora da banda sejam passadas para os níveis mais altos e, portanto, a interface do receptor UART não pode ser vista como algo tão simples quanto obter um fluxo de bytes. Acho que já fiz isso exatamente uma vez em muitos projetos de microcontroladores, porque tinha que ser compatível com um sistema antigo, onde as pausas eram usadas deliberadamente.
Steven deu a você algumas boas idéias sobre o que fazer sobre isso no nível mais alto. Quando você acha que há uma chance real de erros e a integridade dos dados é importante, geralmente você encapsula pedaços de dados em pacotes com somas de verificação. O receptor envia um ACK para cada soma de verificação recebida corretamente.
No entanto, a grande maioria das vezes os erros UART são tão improváveis e não são absolutamente críticos que você pode ignorá-los em alto nível. O tipo de erro que o hardware UART pode detectar geralmente é devido à estupidez do operador, não ao ruído da linha. A maioria dos ruídos causará dados ruins, que o UART não detectará. Portanto, o driver UART de baixo nível lança qualquer coisa imediatamente associada a um erro UART, mas, caso contrário, continua a transmitir o fluxo de bytes recebidos até o próximo nível. De fato, isso é feito mesmo se você estiver usando pacotes e somas de verificação, pois isso é feito em um nível mais alto do que onde bytes individuais são recebidos.