上位机接收数据格式如下:
0x53 0x50 0x01 0x01 0x00 0x00 0x00 0x00 0x57 0x23 0x7F 0x3F 0xA6 0xFC 0xBF 0x3A 0x11 0x07 0x17 0x11 0x13 0x39
其中 53 50是包头,后面是有效数据,我现在想把0x00 0x00 0x00 0x00 0x57 0x23 0x7F 0x3F 0xA6 0xFC 0xBF 0x3A 这几个字节分别转化为三个浮点数,但是问题是,我现在无法判断数据是否接收完毕,及完整的一个数据包。
注:通过按下一次单片机上的“确定键”,单片机给上位机发送一次数据,数据格式如上描述。请大家指点下,谢谢!
我是通过绑定串口接收事件实现的,但这样会多次触发串口接收事件,主要卡在数据接收和数据以浮点数显示环节,代码如下:
private void sp_DataReceived(object sender,SerialDataReceivedEventArgs e)
{
if (isHex==true)
{
string str;
uint i=0;
int bufferlen = sp.BytesToRead;
byte[] bytes = new byte[bufferlen];
sp.Read(bytes, 0, bufferlen);
for(i=0;i<bytes.Length;i++)
{
str= Convert.ToString((byte)bytes[i], 16).ToUpper();
tbxRecvData.AppendText("0x" + (str.Length == 1 ? "0" + str : str) + " ");
}
}
else
{
int bufferlen = sp.BytesToRead;
byte[] bytes = new byte[bufferlen];
sp.Read(bytes, 0, bufferlen);
string gb = System.Text.Encoding.Default.GetString(bytes);
tbxRecvData.AppendText(gb);
}
}