QT串口的使用
- 1. 添加头文件
- 2.串口通信的7个步骤
- 3. 发送接收数据
1. 添加头文件
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
在工程文件中添加串口组件
QT += serialport
然后定义一个串口对象
QSerialPort *serial;
2.串口通信的7个步骤
- 设置串口名(如COM1)
serial = new QSerialPort;
serial->setPortName(ui->PortBox->currentText());
使用自动寻找可用串口方法,加自动设置
foreach (const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
{
QSerialPort serial;
serial.setPort(info);
if(serial.open(QIODevice::ReadWrite))
{
ui->PortBox->addItem(serial.portName());
serial.close();
}
}
- 打开串口
serial->open(QIODevice::ReadWrite);
- 设置波特率(如115200)
serial->setBaudRate(QSerialPort::Baud115200);
- 设置数据位(如8)
serial->setDataBits(QSerialPort::Data8);
- 设置校验位(如0)
serial->setParity(QSerialPort::NoParity);
- 设置停止位(如1)
serial->setStopBits(QSerialPort::OneStop);
- 设置流控制
serial->setFlowControl(QSerialPort::NoFlowControl);
3. 发送接收数据
- 连接数据接收槽函数,下位机中一有数据发送过来的时候就会响应这个槽函数
QObject::connect(serial,&QSerialPort::readyRead,this,&MainWindow::ReadData);
- 从上位机发送数据到下位机
serial->write(ui->textEdit_2->toPlainText().toLatin1());
例:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
foreach (const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
{
QSerialPort serial;
serial.setPort(info);
if(serial.open(QIODevice::ReadWrite))
{
ui->PortBox->addItem(serial.portName());
serial.close();
}
}
ui->BaudBox->setCurrentIndex(0);
}
MainWindow::~MainWindow()
{
delete ui;
}
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);
switch (ui->BitBox->currentIndex())
{
case 8:
serial->setDataBits(QSerialPort::Data8);
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);
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("关闭串口"));
}
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());
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)