• 4562阅读
  • 1回复

[讨论]Qt串口同样的代码在PC机和在Linux开发板上发出来的数据不同? [复制链接]

上一主题 下一主题
离线cloudcastle
 

只看楼主 倒序阅读 楼主  发表于: 2013-11-22
关键词: 串口通信
我用的是第三方类的qextserialbase,发送数据的代码片如下:

QString str;
QByteArray SendStr;
QList<QString> SerialSendlist;
SerialSendlist << ui->IDLine->text()<<","
<<ui->XLine->text()<<"," <<ui->YLine->text()<<","
<<ui->HLine->text()<<"," <<ui->FLine->text()<<","
<<ui->BLine->text()<<"," <<ui->ALine->text()<<","
<<ui->RPLine->text()<<"," <<ui->RLLine->text()<<"##";
unsigned char Test[64] = {0XAA, 0X1D, 0XFF, 0XFF, 0X03, 0X00, 0X00, 0X00, 0X00};//帧头 for(int i = 0; i < 18; i++){ //QString转char*
str.append(SerialSendlist.at(i));
}
for(int i = 0; i < str.length(); i++)
{ Test[i+9] = *qPrintable(str.mid(i,1));
}
Test[6] = str.length();
if(Add_Crc(Test)){
for(int i = 0; i < str.length() + 0X09; i++){
SendStr.append(Test);
}
myCom->write(SendStr);
程序对发送的数据做了一个处理,即加上了一个无线模块要求的帧头,并在Add_Crc函数中加入了CRC校验码,
最后将数组赋值给QByteArray进行发送。
现在的情况是,我将开发板和PC机直接用串口线连起来,
发现linux开发板对发送来的数据做了一个额外的处理。(两个系统下的程序相同)截图如下:
Written data下面是PC机发出的数据,这种帧是可以被无线模块识别并发送出去的。
而Read data下面的数据则是开发板发出来的数据,它在正常帧的数据前面加了一长串,
我仔细一看居然是将我的十六进制当做字符串转成的ASCii码!。。。。可是我并没有写这种转换的代码啊。
并且因此无线模块也就不能识别这帧数据了。。。
求解啊,百思不得其解。是因为linux与windows环境的差异导致Qt对QByteArray的解释不同吗?
或者不用QByteArray类发送数据,有没有更好的解决办法?
离线cloudcastle

只看该作者 1楼 发表于: 2013-11-22
自己顶一下。。
快速回复
限100 字节
 
上一个 下一个