发送:
我发现发送单条消息给串口助手是正常的,如果一次发好几条数据,串口助手只能接收到最后一条消息,这是什么原因?
代码
int serialCommunication::sendSerialData(char *buffer, int length )
{
m_SerialPort->clear(QSerialPort::Input);
m_SerialPort->clear(QSerialPort::Output);
return m_SerialPort->write(buffer, length);
}
接收:
假如接收14个字节的数据,每来一个字节,接收函数都处理一次,会处理14次,前13次是无用的
代码
void serialCommunication::readSerialData()
{
//读取串口数据
//usleep(100000);
QByteArray readComData = m_SerialPort->readAll();
mData.append(readComData);
char *buf = NULL;
int len = mData.length();
qDebug()<<"mData length: "<<len <<endl;
buf = (char*)malloc(len * sizeof(char));
memcpy(buf, mData.data(), len);
unsigned short validDataLen = (uchar)buf[1];//len of data
unsigned char num;
for(int i =0; i<len; i++)
{
num = (unsigned char) buf[i];
qDebug() <<"num"<< num;
}
...
free(buf);
buf=NULL;
}
求指点
1、我习惯用PCOMM的库去写串口,这是我见过最容易上手的串口写法
2、推荐你用这个串口调试助手https://www.cr173.com/soft/61421.html 同样是我用了无数款之后 出毛病最少的,他的接收是在定时器里一直read,有数过来就显示
3、不知道你用的是虚拟串口还是真实串口,我在实践中发觉这个差别很大,比如虚拟串口两个串口参数配置不同时,不影响数据的对错,这对调试代码是个很大的弊端
mData.remove(0,len);
不是已经把数据删掉了吗?
是的,源程序不是这样的,提问时敲错了,已改正。 发送多条数据时,write都返回了正确的数字,表示都发送成功了。但串口助手只显示最后一条发送的数据,请问您有什么看法吗