C#编写与单片机的串口通讯,总是收不到数据,经过调试,执行接受数据事件之前的程序都正常。。。
private void btnReceive_Click(object sender, EventArgs e){
if(IsOpen )
{
try
{
txtReceive.Text += sp.ReadLine();
}
catch(Exception)
{
lblStatus.Text = "读取串口时发僧错误!";
return;
}
}
else
{
MessageBox.Show("串口未打开!","错误提示");
return;
}
}
IsOpen是串口打开标志位,调试程序时用单步跟踪,串口检测,发数据都很正常,点击“接收”按钮后出现异常,要么显示串口未打开,要么接受框中为空,现在调试时执行完txtReceive.Text += sp.ReadLine();后就弹出Form,但是上面的字体看不清楚,不知道是怎么回事?有没有高手解答一下,串口程序已经困扰我好久了,我是新手,望高手多多提携!
C# --------------------编程问答-------------------- 这种没头没尾的问题, 只有神能回答 --------------------编程问答-------------------- sp.ReadLine();
这个方法没用过,我知道的是,串口里有个委托,当串口接收到数据里,就会触发这个委托,我都是一个从这个委托中取数据的,没发现过问题 --------------------编程问答-------------------- 建议你不要用ReadLine()这个方法,因为他读取的时候是按照2进制还是16进制读取的,所以说这个方法读取的时候是直接从串口读取单片机发送的数据,而不是你Label或者textbox想要的数据类型。
你可以这样试一试
byes[] s = new byes[16];
sp.read(s,0,s.length);
最后把s转换成String型就可以了!
我以前也遇到过这样的问题。 --------------------编程问答-------------------- 串口未打开的问题,这个完全可以自己避免的,只要先打开串口再按这个按钮就可以了。再者,串口未打开的话,也收不到来自下位机的数据。
sp.ReadLine();ReadLine方法是读到一行的末尾,如果下位机没有发送换行符,那你就会读不到数据。
如果下位机发送的数据是已经进行编码的,可以 用txtReceive.Text += sp.ReadExisting();
还有就是可以通过读取字节的方式读取下位机的方式
int len=sp.BytesToRead;
byte[]buffer=new byte[len];
sp.Read(buffer,0,len);
txtReceive.Text+=BitConverter.ToString(buffer);
补充:.NET技术 , C#