QT5.6串口通讯初步调试2018.8.28
程序员文章站
2024-02-22 10:25:58
...
通过虚拟串口的调试,可以模拟检验串口程序的正确性。
参考网上的串口案例进行学习,好多案例中都强调在.Pro工程文件中添加
QT += serialport,由于自己一直使用VS结合QT,所以一开始不清楚工程文件在哪里,最后才知道工程文件是利用QTCreator创建的。
- 首先通过QTCreator创建串口项目,同时在.Pro文件中添加
QT += serialport
QT += serialport,主要作用是将QtSerialPort类的相关文件和库函数连接到程序中
2. 在头文件中增加
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
private slots:
void on_OpenSerialButton_clicked();
void ReadData();
void on_SendButton_clicked();
和串口类的全局变量
QSerialPort *serial;
3. 接下来进行.cpp文件的编写,首先要进行循环遍历查找串口 ,之后进行串口初始化设置,和读写函数
foreach (const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
{
QSerialPort serial;
serial.setPort(info);
if(serial.open(QIODevice::ReadWrite))
{
ui->PortBox->addItem(serial.portName());
serial.close();
}
}
void MainWindow::on_OpenSerialButton_clicked()
{
if(ui->OpenSerialButton->text() == tr("打开串口"))
{
serial = new QSerialPort;
//设置串口名
serial->setPortName(ui->PortBox->currentText());
//打开串口
serial->open(QIODevice::ReadWrite);
//设置波特率
serial->setBaudRate(QSerialPort::Baud115200);//设置波特率为115200
//设置数据位数
switch (ui->BitBox->currentIndex())
{
case 8:
serial->setDataBits(QSerialPort::Data8);//设置数据位8
break;
default:
break;
}
//设置校验位
switch (ui->ParityBox->currentIndex())
{
case 0:
serial->setParity(QSerialPort::NoParity);
break;
default:
break;
}
//设置停止位
switch (ui->BitBox->currentIndex())
{
case 1:
serial->setStopBits(QSerialPort::OneStop);//停止位设置为1
break;
case 2:
serial->setStopBits(QSerialPort::TwoStop);
default:
break;
}
//设置流控制
serial->setFlowControl(QSerialPort::NoFlowControl);//设置为无流控制
//关闭设置菜单使能
ui->PortBox->setEnabled(false);
ui->BaudBox->setEnabled(false);
ui->BitBox->setEnabled(false);
ui->ParityBox->setEnabled(false);
ui->StopBox->setEnabled(false);
ui->OpenSerialButton->setText(tr("关闭串口"));
//连接信号槽
QObject::connect(serial,&QSerialPort::readyRead,this,&MainWindow::ReadData);
}
else
{
//关闭串口
serial->clear();
serial->close();
serial->deleteLater();
//恢复设置使能
ui->PortBox->setEnabled(true);
ui->BaudBox->setEnabled(true);
ui->BitBox->setEnabled(true);
ui->ParityBox->setEnabled(true);
ui->StopBox->setEnabled(true);
ui->OpenSerialButton->setText(tr("打开串口"));
}
}
//读取接收到的信息
void MainWindow::ReadData()
{
QByteArray buf;
buf = serial->readAll();
if(!buf.isEmpty())
{
QString str = ui->textEdit->toPlainText();
str+=tr(buf);
ui->textEdit->clear();
ui->textEdit->append(str);
}
buf.clear();
}
//发送按钮槽函数
void MainWindow::on_SendButton_clicked()
{
serial->write(ui->textEdit_2->toPlainText().toLatin1());
}
- 进行UI界面的设计
- 之后通过VS中的QT工具打开刚才保存好的.Pro文件,运行后出现串口对话框
- 通过之前学习的虚拟串口可以打开两个COM口进行串口验证
- 同时打开串口调试软件进行互相通讯 ,结果发现不能发送命令,原来是程序中缺少了发送函数的信号和槽的连接
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_SendButton_clicked()));
- 之后就可以正常通讯了
初步完成了QT的串口界面,之后学习如何实现MODBU协议的通讯