Чтобы действительно ответить на ваш вопрос, я обычно отбрасываю все, что получено с ошибкой. Это может включать в себя повторную инициализацию оборудования UART, в зависимости от того, какая это ошибка, и деталей оборудования UART.
Единственное исключение - если вы хотите умышленно получать перерывы. Те появляются как ошибки в обрамлении. В этом случае вы передаете ошибки кадрирования на более высокие уровни в качестве особых условий. Однако для этого требуется, чтобы внешняя информация передавалась на более высокие уровни, и поэтому интерфейс приемника UART нельзя рассматривать как нечто настолько простое, как получение потока байтов. Я думаю, что я делал это ровно один раз во многих проектах микроконтроллеров, потому что это должно было быть совместимо со старой системой, где разрывы использовались преднамеренно.
Стивен дал вам несколько хороших идей, что с этим делать на более высоком уровне. Когда вы думаете, что существует реальная вероятность ошибок и важна целостность данных, вы обычно инкапсулируете порции данных в пакеты с контрольными суммами. Получатель отправляет ACK для каждой правильно полученной контрольной суммы.
Однако в большинстве случаев ошибки UART настолько маловероятны и не абсолютно критичны, что их можно просто игнорировать на высоком уровне. Тип ошибок, которые может обнаружить аппаратное обеспечение UART, обычно связан с глупостью оператора, а не с помехами в линии. Наиболее похожий на шум вызовет плохие данные, которые UART не обнаружит. Таким образом, драйвер UART низкого уровня выбрасывает все, что непосредственно связано с ошибкой UART, но в противном случае продолжает передавать поток полученных байтов на следующий уровень. На самом деле это происходит, даже если вы используете пакеты и контрольные суммы, поскольку это делается на более высоком уровне, чем при получении отдельных байтов.