QT串口通信中数据控制

QT串口通信中数据控制

(2012-03-30 11:42:47)
标签:

杂谈

 

一、关于数据接收。
我们想在程序中对接收的数据进行控制,但是readyRead() 信号是一旦有数据到来就发射的,
不过我们可以使用bytesAvailable() 函数来检查已经获得的字节数,从而对数据接收进行控
制。
(1)我们在widget.cpp 中添加头文件包含:#include  <QDebug> 
  然后在读串口函数中添加一行代码,如下:
void Widget::readMyCom() //读取串口数据并显示出来
{
    qDebug() << "read: "<<myCom->bytesAvailable()<<"bytes";
    //我们输出每次获得的字节数
    QByteArray temp = myCom->readAll();
    ui->textBrowser->insertPlainText(temp);
}

程序运行如下:

  QT串口通信中数据控制

可以看到,我们获得的数据并不是一次获得的。
(2)利用上面的结论,我们可以让串口缓冲区拥有了一定的数据后再读取。
void Widget::readMyCom() 
{
if(myCom->bytesAvailable() >=8 ) 
//如果可用数据大于或等于8字节再读取 
    {
        qDebug() << "read: "<<myCom->bytesAvailable()<<"bytes";
        QByteArray temp = myCom->readAll();
        ui->textBrowser->insertPlainText(temp);
   }
}

QT串口通信中数据控制

我们发送了两次数据,可以看到,这样实现了每 8 个字节读取一次,而最后剩余的不够 8个字节的数据将会和后面的数据一起读出。

QT串口通信中数据控制

QT串口通信中数据控制

重要结论:我们发送一次数据,应该获得 37字节的数据,然后我们对比上面的结果,发现
了什么?是的,其实串口每次读取 8 字节的数据放到缓冲区,只有数据总数小于 8 字节时,
才会读取小于8 字节的数据。为了再次验证我们的结论,我们可以将上面程序中的“>=”
改为“==”,那么只有 8 的倍数才能读取数据(当然这里 37也可以),你可以测试一下。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值