C# 更改串行端口时丢失当前数据-波特率

C# 更改串行端口时丢失当前数据-波特率,c#,serial-port,C#,Serial Port,我尝试使用ReadExisting()接收方法通过串行端口从设备获取数据 在第一点,我以波特率300向设备发送请求。然后,设备以相同的波特率应答。在将波特率更改为9600(发送确认命令后设置serialport.baudrate=9600)之前,我确认了这个答案 我的问题是更改波特率后会丢失缓冲区中的数据(ReadExisting()方法无法读取此数据?)。但波特率为9600的下一个命令仍然从设备接收应答。 我们如何解决这个问题?非常感谢 例如: PC:请求握手(300bps) 设备:应答(30

我尝试使用ReadExisting()接收方法通过串行端口从设备获取数据

在第一点,我以波特率300向设备发送请求。然后,设备以相同的波特率应答。在将波特率更改为9600(发送确认命令后设置serialport.baudrate=9600)之前,我确认了这个答案

我的问题是更改波特率后会丢失缓冲区中的数据(ReadExisting()方法无法读取此数据?)。但波特率为9600的下一个命令仍然从设备接收应答。 我们如何解决这个问题?非常感谢

例如:

PC:请求握手(300bps)

设备:应答(300bps)

PC:确认设备的答案(300bps)

设备:数据丢失(我尝试在此处接收)

----------将波特率更改为9600--------------

设备:数据丢失(我也尝试在这里接收)

PC:发送下一个命令(9600bps)

设备:应答(9600bps)

PC:发送下一个命令(9600bps)


设备:应答(9600bps)

您必须检查UART的状态位,清除所有错误并忽略与坏数据相关的数据。如果设备自动发送连续数据,则在更改速率后,接收缓冲区中的数据不好,必须清除。理论上,数据将以波特率9600接收。但是我一点也不能接受。我的receive事件可能太慢,无法获取此数据?对于前面提到的,我如何检查状态位并避免删除?如果您使用事件(而不是计时器),您将能够接收所有数据。有关错误,请参阅msdn: