繁体   English   中英

在c#中从串口读取字符

[英]Read characters from serial port in c#

您好,我正在使用 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”。

我哪里错了??

你做错的是没有注意 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();

现在还支持任意响应长度。 只需确保数据不包含换行符即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM