在c#中从串口读取字符

本文关键字:读取 字符 串口 | 更新日期: 2023-09-27 18:05:05

你好,我正在使用Read()方法从串行端口读取10个字符,说0123456789。实际上字符是由PIC微控制器发送的。

下面是我的代码:
serialPort1.PortName = "com4";
serialPort1.BaudRate = 9600;
serialPort1.Open();
char[] result = new char[10];
serialPort1.Read(result, 0, result.Length);
string s = new string(result);
MessageBox.Show(s);
serialPort1.Close();

当我运行代码时,会出现一个消息框,并且只显示第一个字符。消息框中只显示"0"。

我哪里出错了??

在c#中从串口读取字符

您所做的错误是不注意Read()的返回值。它告诉您读取了多少字节。

串口是非常慢的设备,在典型的波特率设置为9600时,传输一个字节需要一毫秒。对于现代处理器来说,这是一段巨大的时间,它可以在一毫秒内轻松执行数百万条指令。Read()方法在一些字节可用时返回,如果您人为地使程序变慢,以便驱动程序有足够的时间接收所有这些字节,则只能获得全部10个字节。

一个简单的修复方法是一直调用Read(),直到你得到它们:

char[] result = new char[10];
for (int len = 0; len < result.Length; ) {
   len += serialPort1.Read(result, len, result.Length - len);
}

另一个常见的解决方案是发送一个唯一字符来指示数据的结束。换行(''n')是一个非常好的选择。现在就简单多了:

string result = serialPort.ReadLine();

现在也支持任意响应长度。只要确保数据不包含换行。