• 6461阅读
  • 8回复

[提问]qt 串口通信使用环境的问题(附上源码和网上例子对比)高手指点下。急啊! [复制链接]

上一主题 下一主题
离线aishang
 
只看楼主 倒序阅读 楼主  发表于: 2011-03-07
           用qt写了个串口通信的小程序。不知道为什么在笔记本上用usb转串口线是就用不起串口。看了网上的例子和源码。别人的能用,我的不行。。。
    自己觉得可能是串口线比特率不稳定的原因,可是别人的程序哪里都可以用,真是找不到有什么区别。
    附上自己的和别人的代码,搞什么给点意见!
    谢谢!
[ 此帖被aishang在2011-03-11 11:03重新编辑 ]
描述:网上的例子
附件: mainwindow.cpp (13 K) 下载次数:31
描述:自己的
附件: mainwindow.cpp (9 K) 下载次数:15
离线aishang
只看该作者 1楼 发表于: 2011-03-07
源代码
离线flybabys

只看该作者 2楼 发表于: 2011-03-07
2个疑问,
第一,没看到代码
第二,你的调用的设备号对了没有
离线zhangjie
只看该作者 3楼 发表于: 2011-03-08
http://apps.hi.baidu.com/share/detail/22996526  可以看看这个  希望对你有用
离线aishang
只看该作者 4楼 发表于: 2011-03-10
源代码传了两次都没上来?不知道什么原因。。。我再发一次看看
离线aishang
只看该作者 5楼 发表于: 2011-03-10
回 2楼(flybabys) 的帖子
首先谢谢你能给回复,我的目前的问题是在台式机上能很好的使用,没什么问题。但是在笔记本上涌usb转串口线进行通信的时候就会出现收不到数据的问题。我想过可能是串口线的问题,但是用了网上给的例子后发现例子可以使用(例子就是3楼说到的那个)
离线flybabys

只看该作者 6楼 发表于: 2011-03-10
回 5楼(aishang) 的帖子
myCom->setTimeout(10);
这个设置大点试过没有?
再有一个问题就是readyRead()这个信号是否正常?反正我的台式电脑用这个函数无法读取数据,只能采用timeout的方式查询!
要不试着改改这两个,先收到数据再说!
其他原因解决问题了回复一下,大家一同提高!
离线aishang
只看该作者 7楼 发表于: 2011-03-11
回 6楼(flybabys) 的帖子
你的是什么系统下作的串口?linux好像只能用timeout这种模式的。我也是用的这个模式。要是解决了一定告诉大家,谢谢大家顶贴!
离线aishang
只看该作者 8楼 发表于: 2011-03-11
回 6楼(flybabys) 的帖子
我改成了这样
void MainWindow::OpenCom()
{
    xx++;
    if(xx%2 > 0)
    {
        QString portname;
        portname = ComBox->currentText();
        myCom = new Win_QextSerialPort(portname,QextSerialBase::Polling);
        myCom->open(QIODevice::ReadWrite);
       // myCom->setBaudRate((BaudRateType)fpBox->currentIndex());
        myCom->setBaudRate(BAUD115200);
        myCom->setDataBits(DATA_8);
        //数据位设置,我们设置为8位数据位
        myCom->setParity(PAR_NONE);
        //奇偶校验设置,我们设置为无校验
        myCom->setStopBits(STOP_1);
        //停止位设置,我们设置为1位停止位
        myCom->setFlowControl(FLOW_OFF);
        //数据流控制设置,我们设置为硬件数据流控制
        myCom->setTimeout(500);
        if(myCom->isOpen())
        {
            Open->setText(tr("关闭串口"));
            Status_temp->showMessage(tr("串口已打开"),20000);
            Open->setStyleSheet("background-color:green;");
            connect(myCom,SIGNAL(timeout()),this,SLOT(readMyCom()));
        }
    }
    else
    {
        Open->setText(tr("打开串口"));
        Open->setStyleSheet("background-color:red;");
        Status_temp->showMessage(tr("串口已关闭"),20000);
        myCom->close();
    }
}一样的还是不行啊!。。。
快速回复
限100 字节
 
上一个 下一个