Um Ihre Frage tatsächlich zu beantworten, verwerfe ich normalerweise alles, was fehlerhaft empfangen wurde. Dies kann eine Neuinitialisierung der UART-Hardware umfassen, je nachdem, um welchen Fehler es sich handelt und welche Details die UART-Hardware enthält.
Die einzige Ausnahme ist, wenn Sie absichtlich Pausen erhalten möchten. Diese werden als Rahmenfehler angezeigt. In diesem Fall übergeben Sie Rahmenfehler als Sonderbedingungen an die höheren Ebenen. Dies erfordert jedoch, dass Out-of-Band-Informationen an die höheren Ebenen weitergeleitet werden, und daher kann die UART-Empfängerschnittstelle nicht als so einfach angesehen werden wie das Abrufen eines Bytestroms. Ich glaube, ich habe dies in vielen Mikrocontroller-Projekten genau einmal gemacht, weil es mit einem alten System kompatibel sein musste, bei dem Pausen absichtlich verwendet wurden.
Steven hat Ihnen einige gute Ideen gegeben, was Sie auf der höheren Ebene dagegen tun können. Wenn Sie der Meinung sind, dass eine echte Fehlerwahrscheinlichkeit besteht und die Datenintegrität wichtig ist, kapseln Sie normalerweise Datenblöcke in Pakete mit Prüfsummen. Der Empfänger sendet eine Bestätigung für jede korrekt empfangene Prüfsumme.
Die überwiegende Mehrheit der Zeit, in der UART-Fehler auftreten, ist jedoch so unwahrscheinlich und nicht unbedingt kritisch, dass Sie sie auf hoher Ebene einfach ignorieren können. Die Art von Fehlern, die die UART-Hardware abfangen kann, ist normalerweise auf die Dummheit des Bedieners zurückzuführen, nicht auf Leitungsrauschen. Am ähnlichsten verursachen Rauschen schlechte Daten, die der UART nicht erkennt. Der UART-Treiber auf niedriger Ebene gibt also alles aus, was unmittelbar mit einem UART-Fehler verbunden ist, leitet den Strom der empfangenen Bytes jedoch weiterhin an die nächste Ebene weiter. Dies geschieht sogar dann, wenn Sie Pakete und Prüfsummen verwenden, da dies auf einer höheren Ebene erfolgt als dort, wo einzelne Bytes empfangen werden.