最近结合网上Qt教程,向多方大佬交流学习,完成了简易的串口数据收发和实时绘图功能。
现将学习心得同学习Qt的伙伴们分享,希望可以相互交流学习。
主要涉及以下几方面知识点:
-
串口配置
-
串口接收数据
-
引入第三方库QCustomPlot
-
动态绘图
串口配置
串口号 | 波特率 | 数据位 | 停止位 | 奇偶校验位 |
COMx | 9600 | 8 | 1 | 0 |
.pro文件中添加
QT += core gui serialport
.h文件中添加
#include <QSerialPort>
#include <QSerialPortInfo>
private:
QSerialPort *mySerialPort;
QString mPortName;
QString mBaudRate;
.cpp文件中添加
串口基本配置
bool Widget::getSerialPortConfig()
{
mPortName = ui->port->currentText(); //获取ComboBox的当前串口号
mBaudRate = ui->bit->currentText(); //获取ComboBos的当前波特率
mySerialPort->setPortName(mPortName); //配置串口号
if("9600" == mBaudRate)
{
mySerialPort->setBaudRate(QSerialPort::Baud9600); //配置波特率9600
}
else
{
mySerialPort->setBaudRate(QSerialPort::Baud115200); //配置波特率115200
}
mySerialPort->setParity(QSerialPort::NoParity); //配置奇偶校验位
mySerialPort->setDataBits(QSerialPort::Data8); //配置数据位
mySerialPort->setStopBits(QSerialPort::OneStop); //配置停止位
return mySerialPort->open(QSerialPort::ReadWrite); //返回串口配置打开True/False
}
打开串口
void Widget::on_open_clicked()
{
if(true == mIsOpen) //bool mIsOpen; 判断串口状态
{
mySerialPort->close();
ui->open->setText("打开串口"); //串口关闭状态时,按钮更新为打开
mIsOpen = false;
ui->port->setEnabled(true);
ui->bit->setEnabled(true);
ui->send->setEnabled(mIsOpen);
// killTimer(refreshTimer); //动态绘图时用到
}
else
{
if(true == getSerialPortConfig()) //判断串口是否打开成功
{
mIsOpen = true;
ui->open->setText("关闭串口"); //串口打开状态时,按钮更新为关闭
ui->port->setEnabled(false);
ui->bit->setEnabled(false);
ui->send->setEnabled(mIsOpen); //使能发送按钮
// refreshTimer = startTimer(30, Qt::CoarseTimer); //动态绘图时用到
}
}
}
由此,即可完成串口的简单配置和打开。读者可以根据需求,自行添加其他波特率,数据位,校验位等配置。下一节将介绍串口接收数据及十六进制转化显示等。
有问题可以直接留言,感谢大家的支持!
工程项目UI界面示例图
版权声明:本文为qq_41651894原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。