时间过得快
2018-07-06 03:52
采纳率: 50%
浏览 4.9k
已采纳

Qt的串口接收和发送问题

发送:
我发现发送单条消息给串口助手是正常的,如果一次发好几条数据,串口助手只能接收到最后一条消息,这是什么原因?
代码

 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;
}

求指点

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • _肆 2018-07-06 07:08
    已采纳

    1、我习惯用PCOMM的库去写串口,这是我见过最容易上手的串口写法

    2、推荐你用这个串口调试助手https://www.cr173.com/soft/61421.html 同样是我用了无数款之后 出毛病最少的,他的接收是在定时器里一直read,有数过来就显示

    3、不知道你用的是虚拟串口还是真实串口,我在实践中发觉这个差别很大,比如虚拟串口两个串口参数配置不同时,不影响数据的对错,这对调试代码是个很大的弊端

    点赞 打赏 评论
  • qq_38714365 2018-07-06 05:27

    mData.remove(0,len);
    不是已经把数据删掉了吗?

    点赞 打赏 评论
  • 时间过得快 2018-07-06 06:01

    是的,源程序不是这样的,提问时敲错了,已改正。 发送多条数据时,write都返回了正确的数字,表示都发送成功了。但串口助手只显示最后一条发送的数据,请问您有什么看法吗

    点赞 打赏 评论

相关推荐