串口发送数据与下位机stm32进行通讯。
一、串口通讯
主要参数有:波特率、校验位、数据位、停止位、控制流
主要操作有:串口的打开和关闭、刷新设备串口、接发数据、开关显示灯等。
二、实现串口通讯
1.在头文件中引入 QtSerialPort 类的两个头文件(必须引入)
// 引入串口通信的两个头文件(第一步)
#include <QtSerialPort/QSerialPort> // 提供访问串口的功能
#include <QtSerialPort/QSerialPortInfo> // 提供系统中存在的串口信息
2.在工程文件中添加以下代码
# 引入串口工程类型(第二步)pro文件添加
QT += serialport
3.在头文件中定义全局的串口对象
QSerialPort *serialPort;
4.相关配置
QStringList serialNamePort;
serialPort = new QSerialPort(this);//新建一个对象去获取串口数据
connect(serialPort,SIGNAL(readyRead()),this,SLOT(serialPortReadyBead_Slot()));//发送串口数据关联
foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts()){
serialNamePort<<info.portName();//获取串口的串口号
}
ui->serialBox->addItems(serialNamePort);//下拉列表框QComboBox
5.通过一个按键按键实现串口的开和关
我的ui设计界面如下
1、关联打开串口按钮的点击事件
2、在按键中实现:
void Widget::on_openBt_clicked()//打开和关闭串口
{
open_flag=!open_flag;//判断串口是否打开的标志位
if(open_flag==0)//已经打开--则关闭
{
serialPort->clear();
serialPort->close();
ui->openBt->setText("打开串口");
QMessageBox::information(this,"提示","串口关闭成功 ");
}
if(open_flag==1)//未打开---需要打开
{
QSerialPort::BaudRate baudBite;//波特率
QSerialPort::DataBits dataBite;//数据位
QSerialPort::StopBits stopBite;//停止位
QSerialPort::Parity checkBite;//校验位
baudBite = QSerialPort::Baud115200;
dataBite = QSerialPort::Data8;
stopBite = QSerialPort::OneStop;
checkBite = QSerialPort::NoParity;
serialPort->setPortName(ui->serialBox->currentText());//设置串口配置
serialPort->setBaudRate(baudBite);
serialPort->setDataBits(dataBite);
serialPort->setStopBits(stopBite);
serialPort->setParity(checkBite);
if(serialPort->open(QIODevice::ReadWrite) == true){
ui->openBt->setText("关闭串口");
QMessageBox::information(this,"提示","串口打开成功 ");//提示框提示
}
else {
QMessageBox::critical(this,"提示","串口打开失败 ");
}
}
}
3、刷新串口
如果在打开软件后才插上串口设备的话,下拉列表不会显示,需要重新搜索串口
点击刷新串口按钮,刷新串口号,并显示出来
void Widget::on_refreshBt_clicked()//刷新串口号
{
qDebug() << "刷新串口";
ui->serialBox->clear();
/* 读取可以使用的串口*/
this->avaiPortsList = QSerialPortInfo::availablePorts();
/* 提取串口个数*/
int avaiPortNum = avaiPortsList.length();
/*逐个显示*/
for(int i = 0; i < avaiPortNum; i++)
{
ui->serialBox->addItem(this->avaiPortsList[i].portName());//下拉框显示
}
}
6.串口发送数据
直接发送字符串:
serialPort->write("R1");
将输入框内容发送:
QString data = QString("W:%1:0").arg(ui->t5cardEdit->text());
QByteArray dataArray = data.toUtf8(); // 将字符串转换成字节数组
serialPort->write(dataArray); // 发送数据到串口
7.串口接收数据
串口接收数据需要关联相关的槽函数
connect(serialPort,SIGNAL(readyRead()),this,SLOT(serialPortReadyBead_Slot()));//接收串口数据关联
串口接收槽函数
void Widget::serialPortReadyBead_Slot()//分割数据得到串口的数据
{
QString buf;
buf = QString(serialPort->readAll());//buf就是接收到的数据
}
总结
例如:以上就是今天要讲的内容,本文仅仅简单介绍了qt-5串口通讯的使用。