日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于QSerialPort的使用说明(Qt实现串口工具)

發布時間:2024/10/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于QSerialPort的使用说明(Qt实现串口工具) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Qt提供了對串口設備的簡單操作功能接口,包括串口配置、收/發數據。將串口設備插入到電腦USB接口后,可在電腦的設備管理里查看端口,會多了個COM之類的端口。一般的USB串行設備驅動在window里都已經安裝好了,不需要再單獨安裝驅動,若是設備管理器查看到端口出現了嘆號,可以從網上查找對應的驅動,并下載安裝。

1.在使用QSerialPort類的文件里,需要包含以下頭文件

#include <QtSerialPort/QtSerialPort> #include <QtSerialPort/QSerialPortInfo>

2.在.pro文件里添加

QT += serialport

3.獲取/查看電腦里所有的串口設備?

QList<QSerialPortInfo> list;list = QSerialPortInfo::availablePorts();for (int i = 0; i < list.size(); i++){qDebug() << list.at(i).portName() ;//串口名字qDebug() << list.at(i).description();//串口描述qDebug() << "#########";}

執行后輸出:

可看當前我電腦有COM1/COM3/COM4,三個串口設備。?

?4.打開和配置串口設備

QSerialPort *port;port = new QSerialPort("COM4");//通過名字打開,可通過上面的list里查找/*根據需求對串口進行進行配置*/port->setBaudRate(QSerialPort::Baud115200);//配置波特率位115200port->setDataBits(QSerialPort::Data8);//配置數據格式為8bitport->setParity(QSerialPort::NoParity);//無校驗位port->setStopBits(QSerialPort::OneStop);//一個停止位port->setFlowControl(QSerialPort::NoFlowControl);//不使用流控制/*打開設備*/if (!port->open(QIODevice::ReadWrite)){qDebug() << "serial open failed";return ;}else{qDebug() << "serial open success";}/*設置接收緩沖區大小*/port->setReadBufferSize(500);/*綁定接受槽函數,但收到信息是將調用MainSerialRecvMsgEvent函數*/QObject::connect(port, &QSerialPort::readyRead, this, &MainWindow::MainSerialRecvMsgEvent);

?如果打開串口失敗,可能是因為該串口已經被其他進程占用,綁定槽函數之后,當串口有數據的時候就會回調該槽函數,值得注意的是,假如要接收連串的10個字節的數據,可能進入多次槽函數,每一次接收部分字節;也有可能進入一次槽函數就已接收完10個字節。

5.接收、發送串口數據

/*數據接收*/ void MainWindow::MainSerialRecvMsgEvent(void) {QByteArray MainSerialRecvData;//保存串口數據的數組if(port->bytesAvailable()>0)//判斷等到讀取的數據大小{MainSerialRecvData = port->readAll();//讀取所有的接收數據if(!MainSerialRecvData.isEmpty()){qDebug() <<MainSerialRecvData.size();//打印數據大小for(int i = 0; i < MainSerialRecvData.size();i++){qDebug() <<MainSerialRecvData.at(i);}ui->textBrowser->append(MainSerialRecvData);//將數據顯示到textBrowser}else{qDebug()<<"接受數據出錯";}} }/*數據發送*/ void MainWindow::on_pushButton_2_clicked() {QByteArray txdata;if(port!=NULL&&port->isOpen()){txdata = ui->lineEdit->text().toLatin1();port->write(txdata);ui->lineEdit->clear();}else{qDebug() <<"串口未打開!";} }

調用write發送數據是將數據寫入了內部發送數據緩沖區,并不等于馬上從底層串行端口發出,真正發出去的時間受電腦當前性能的影響。這一點在我們一般的使用過程中不會受到太大影響。使用flush()可盡可能的將發送緩沖區的數據從端口發出,在大多數的情況下,不需要使用它。

附上一個簡單的例程:點擊下載。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的关于QSerialPort的使用说明(Qt实现串口工具)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。