温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在Qt中使用QSerialPort模块实现串口通信开发

发布时间:2021-03-17 16:06:55 来源:亿速云 阅读:331 作者:Leah 栏目:编程语言

怎么在Qt中使用QSerialPort模块实现串口通信开发?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

首先,一定要在.pro文件中添加:QT += serialport

串口初始化如下:

/****************************串口初始化*****************************/  void MainWindow::initPort()  {   //读取串口信息   foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())   {    qDebug()<<"Name:"<<info.portName();    qDebug()<<"Description:"<<info.description();    qDebug()<<"Manufacturer:"<<info.manufacturer();      //这里相当于自动识别串口号之后添加到了cmb,如果要手动选择可以用下面列表的方式添加进去    QSerialPort serial;    serial.setPort(info);    if(serial.open(QIODevice::ReadWrite))    {     //将串口号添加到cmb     ui->cmbPortName->addItem(info.portName());     //关闭串口等待人为(打开串口按钮)打开     serial.close();    }   }     QStringList baudList;//波特率   QStringList parityList;//校验位   QStringList dataBitsList;//数据位   QStringList stopBitsList;//停止位     baudList<<"50"<<"75"<<"100"<<"134"<<"150"<<"200"<<"300"     <<"600"<<"1200"<<"1800"<<"2400"<<"4800"<<"9600"     <<"14400"<<"19200"<<"38400"<<"56000"<<"57600"     <<"76800"<<"115200"<<"128000"<<"256000";     ui->cmbBaudRate->addItems(baudList);   ui->cmbBaudRate->setCurrentIndex(12);     parityList<<"无"<<"奇"<<"偶";   parityList<<"标志";   parityList<<"空格";     ui->cmbParity->addItems(parityList);   ui->cmbParity->setCurrentIndex(0);     dataBitsList<<"5"<<"6"<<"7"<<"8";   ui->cmbDataBits->addItems(dataBitsList);   ui->cmbDataBits->setCurrentIndex(3);     stopBitsList<<"1";   stopBitsList<<"1.5";   stopBitsList<<"2";     ui->cmbStopBits->addItems(stopBitsList);   ui->cmbStopBits->setCurrentIndex(0);     //设置按钮可以被按下   ui->btnOpen->setCheckable(true);  }

这里通过遍历所有串口将我们需要使用的串口添加到了combox中,如果想要手动选择可以将串口名称通过列表的方式添加到combox中,到使用的时候再选择。

串口设置如下:

/****************************串口设置******************************/  void MainWindow::on_btnOpen_clicked()  {   if(ui->btnOpen->text() == "打开串口")   {    my_serialport = new QSerialPort(this);      //设置串口号    my_serialport->setPortName(ui->cmbPortName->currentText());    //以读写方式打开串口    if(my_serialport->open(QIODevice::ReadWrite))    {     //设置波特率     my_serialport->setBaudRate(ui->cmbBaudRate->currentText().toInt());     //设置数据位     my_serialport->setDataBits(QSerialPort::Data8);     //设置校验位     my_serialport->setParity(QSerialPort::NoParity);     //设置流控制     my_serialport->setFlowControl(QSerialPort::NoFlowControl);     //设置停止位     my_serialport->setStopBits(QSerialPort::OneStop);       //每秒读一次     timer = new QTimer(this);     connect(timer, SIGNAL(timeout()), this, SLOT(readComDataSlot()));     timer->start(1000);       setNonSelectable();    }    else    {     QMessageBox::about(NULL, "提示", "串口没有打开!");     return;    }   }   else   {    timer->stop();    setSelectable();    my_serialport->close();   }  }

这里是对串口的设置,需要先打开串口才能设置串口参数。参数设置好之后就可以通过read()和write()函数进行数据的读写,我这里用的是1秒的定时器来读缓冲区的数据。

数据收发如下:

/****************************数据传输******************************/  void MainWindow::readComDataSlot()  {   //读取串口数据   QByteArray readComData = my_serialport->readAll();     //将读到的数据显示到数据接收区的te中   if(readComData != NULL)   {    ui->teReceiveData->append(readComData);   }     //清除缓冲区   readComData.clear();  }    void MainWindow::on_btnSend_clicked()  {   //获取发送区的数据   QString sendData = ui->teSendData->toPlainText();   QByteArray sendData_2 = sendData.toLatin1();     //写入缓冲区   my_serialport->write(sendData_2);  }

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI