Błędy w ramkach mogą być spowodowane tym, o czym wspomina @jippie - odbiornik wykrył bit startu i tam, gdzie oczekuje bitu stopu, dane są odwracane. Może to być również spowodowane uszkodzeniem danych spowodowanym zakłóceniami linii wpływającymi na bit stopu. Zawsze musisz to sprawdzić dla każdego odebranego bajtu.
Błędy parzystości występują, gdy parzystość jest zaimplementowana w łączu danych i występuje uszkodzenie, które powoduje niezgodność parzystości w odebranych danych. Zawsze musisz to sprawdzić dla każdego odebranego bajtu.
Przerwa w odbiorze jest również traktowana jako błąd, chociaż w rzeczywistości oznacza, że przychodzące dane spadły do logicznego zera na dłużej niż 1 bajt danych. Zwykle logiczne 1 to stan „otoczenia” pomiędzy kolejnymi bajtami danych i taki pozostaje. Myślę, że to powrót do starych systemów telegraficznych. Nie zawracałbym sobie głowy sprawdzaniem tego, chyba że używasz tej "funkcji" do wskazania (powiedzmy) polecenia resetowania odbiornikowi.
Błąd przepełnienia występuje, gdy nowy bajt jest odebrany przed odczytaniem poprzedniego bajtu przez procesor. Nieco inaczej, gdy w grę wchodzi FIFO, ale prowadzi do tego samego - prawidłowe odebrane dane są tracone z powodu spowolnienia procesora. Zawsze sprawdzaj to przed odczytaniem bajtu, a jeśli bajt jest częścią dłuższej wiadomości (lub polecenia), wyrzuć całą wiadomość / polecenie i w jakiś sposób zażądaj od nadajnika ponownego wysłania całej wiadomości / polecenia.
Under run nie jest tak naprawdę błędem, ale wskazuje wysyłającemu UART, że jego bufor transmisji jest pusty, tj. żąda nowego bajtu do transmisji. Nie musisz tego sprawdzać.