qt4的网上一大堆,qt5的在网上好像没有,自己摸索出来了。这是原文链接! http://blog.csdn.net/qq363692146/article/details/10366713 希望转发者保留,多谢。 QT5的有一大好处就是 【串口正确初始化!!!】qt4的初始化常常要借助其他软件。 正文开始,因为用到信号和槽,所以就直接用GUI程序,建立QMainWindow吧 首先,pro文件,你懂的 [cpp] view plaincopyprint? QT += serialport 接着,在mainwindow.h文件中修改: 1.增加头文件 [cpp] view plaincopyprint? #include <QDebug> //可由可无,看你是否用qdebug或qCritical等输出 #include <QSerialPort> 2.增加下面的后三行,增加串口成员 和 读取槽 [cpp] view plaincopyprint? private: Ui::MainWindow *ui; QSerialPort *serial; private slots: void serialRead(); 最后,进入mainwindow.cpp这篇可以直接复制 我连ui->setupUi(this);都删了,因为根本没用到界面【直接在应用程序输出那里显示,界面只是为了connect方法】,不懂的请细看注释,再不懂就问我吧 提示:我在我的单片机或arm设置发送的最后一位数据是‘~’,即“123456~”的形式,用~符号识别是否真的结束【因为串口常常只接受一半数据,就触发serialRead函数了,例如常常先发送"123"再发送"456~",然后读取就出错了,这是个秘密!!】 [cpp] view plaincopyprint? #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { serial = new QSerialPort("COM4"); //串口号,一定要对应好,大写!!!下面这些设置都是针对单片机11.0592的晶振的,但是串口号就要修改,假如不是这种情况,那么波特率之类很可能也要改!! serial->open(QIODevice::ReadWrite); //读写打开 serial->setBaudRate(QSerialPort::Baud9600); //波特率 serial->setDataBits(QSerialPort::Data8); //数据位 serial->setParity(QSerialPort::NoParity); //无奇偶校验 serial->setStopBits(QSerialPort::OneStop); //无停止位 serial->setFlowControl(QSerialPort::NoFlowControl); //无控制 connect(serial,SIGNAL(readyRead()),this,SLOT(serialRead())); //连接槽 } MainWindow::~MainWindow() { delete ui; //下面两行不能忘了哦 serial->close(); delete serial; } void MainWindow::serialRead() { static QByteArray allData; //静态变量!!在串口只发送一半的时候用来累加数据 QByteArray dataTemp; //每次读到的数据,可能只是部分的,大多数情况下是正确的,大约1/5会出错 while (!serial->atEnd()) { QByteArray dataTemp = serial->readAll(); //因为串口是不稳定的,也许读到的是部分数据而已,但也可能是全部数据 if( dataTemp.data()[dataTemp.length() - 1] == '~'){ //当临时数据最后一位是'~',代表一条数据读完了 allData += dataTemp; //总数据加上临时数据 allData.resize(allData.size() - 1); //删除结尾的~符号 qCritical() << allData; //这时候allData将是你要的数据 allData.clear(); //清除数据!!!!! } else{ //当最后一位数据不是'~',即未读完 allData += dataTemp; //每次累加这部分数据,因为可能没发完 } } }
QT5 串口应用
最新推荐文章于 2023-05-12 15:46:45 发布