如何知道串口中哪个接收帧有错误?

问题描述 投票:0回答:1

我在学习通信协议时使用atmega32,我对uart中的奇偶校验标志有疑问,如果接收到的数据有奇偶校验问题,则设置该标志。现在我从数据表中知道atmega32有一个2个寄存器缓冲区来接收数据,所以如果我没有读取数据2次并且缓冲区有2个字节的数据,现在我如何知道哪个字节有奇偶校验错误在 atmega32 和其他微控制器中是否有针对这种情况的解决方案?

缓冲区的每个字节中是否应该有多个错误标志?

c embedded microcontroller uart parity
1个回答
0
投票

根据数据表[1],接收缓冲区中的每个帧都有一组错误标志。所以你可以在读取每一帧数据之前读取错误标志。

20.7.4 接收器错误标志

USART 接收器具有三个错误标志:帧错误 (FE)、数据溢出 (DOR) 和奇偶校验错误 (PE)。所有内容都可以通过阅读 UCSRA 来访问。错误标志的共同点是它们与指示错误状态的帧一起位于接收缓冲区中。由于错误标志的缓冲,必须在接收缓冲区 (UDR) 之前读取 UCSRA,因为读取 UDR I/O 位置会更改缓冲区读取位置。错误标志的另一个等式是它们不能被软件写入标志位置而改变。然而,为了未来 USART 实现的向上兼容性,在写入 UCSRA 时,所有标志必须设置为零。任何错误标志都不能产生中断。

[1] https://ww1.microchip.com/downloads/en/DeviceDoc/Atmega32A-DataSheet-Complete-DS40002072A.pdf

© www.soinside.com 2019 - 2024. All rights reserved.