精华内容
下载资源
问答
  • Qt5 串口实例

    2016-05-03 14:38:29
    Qt5 串口通信
  • QT 5 串口设计

    2019-04-14 20:00:37
    1.QT 5 串口设计,代码内部含有部分BUG ,未调试完,大同小异。代码有备注分析,如有疑惑地方可以私信,一起学习进步; 2.加载运行代码,不可有中文路径。
  • SerialPort Qt5 串口工具

    2019-07-28 20:24:40
    1. 非常全面的Qt5串口开发例程,包含完整代码,直接编译运行; 2. 不是简单的数据发送和接收,而是包含了串口调试中用到的一系列高级功能,包含曲线显示等; 3. Qt C++开发和designer界面开发非常好的例程,基本的...
  • QT5 串口通信

    热门讨论 2013-08-27 23:37:57
    QT5 串口通信 使用qserialport 和qserialportinfo类
  • QT5串口接收发送

    2019-03-31 22:36:54
    综合很多博客,总结出来的QT5串口发送和接收的工程,包含接收发送清空,十六进制发送,十六进制接收,插入换行,刷新串口功能,波特率1200-115200,数据5-8位可选,停止位1-2位可选,界面清新!
  • QT5串口通信程序源码

    2020-04-25 14:21:29
    QT5串口通信编程源码,实现了包括基本发送接受以及循环发送功能,简单易看懂,欢迎大家下载学习 欢迎大家下载学习 欢迎大家下载学习
  • Qt5 串口编程 发送接收 简单入门资料 上手简单 代码清晰
  • Qt5 串口的读写

    2021-05-19 10:52:52
    Qt5 串口的读写 Qt之串口 文章目录Qt5 串口的读写一、添加pro二、使用步骤1.引入库2.文件.h3.文件.cpp总结 一、添加pro QT += core gui\ serialport 二、使用步骤 1.引入库 //导入库 //串口 #include <Qt...

    Qt5 串口的读写

    Qt之串口


    一、添加pro

    QT       += core gui\
                serialport
    

    二、使用步骤

    1.引入库

    //导入库
    //串口
    #include <QtSerialPort/QSerialPort>
    #include <QtSerialPort/QSerialPortInfo>
    #include <QMessageBox>//提示框,用于串口没打开提示
    

    2.文件.h

    //全局变量
    private: 
    	//串口
        QSerialPort *serial;
        QString comData;//接收数据
    
    //封装方法
    private:
        void chuankou();//串口
        void Read_Data();//接受数据处理
        void chuankoufasong(QByteArray byte);//串口发送
    

    提示:可以多串口使用

    3.文件.cpp

    //封装方法
    
    //串口设置
    void MainWindow::chuankou(){
    	//实例化串口
        serial = new QSerialPort;
        //设置串口名
        serial->setPortName(com);
        //打开串口
        serial->open(QIODevice::ReadWrite);
        //设置波特率
        serial->setBaudRate(9600);
        //设置数据位数
        serial->setDataBits(QSerialPort::Data8);
        //设置奇偶校验
        serial->setParity(QSerialPort::NoParity);
        //设置停止位
        serial->setStopBits(QSerialPort::OneStop);
        //设置流控制
        serial->setFlowControl(QSerialPort::NoFlowControl);
        //连接信号槽,接受数据绑定方法
        QObject::connect(serial, &QSerialPort::readyRead, this, &MainWindow::Read_Data);
    }
    
    //读取接收到的数据,执行播放
    void MainWindow::Read_Data(){
        QByteArray com = serial->readAll();
        comData = tr(com);
        if(comData == "a"){//接受数据判断
        	//执行操作 
        }
        comData.clear();
    }
    //串口发送
    void MainWindow::chuankoufasong(QByteArray byte){
        if(serial->isOpen()){
            serial->write(byte);
        }else {
            QMessageBox::information(this, tr("串口配置"), tr("串口没有打开!"));
        }
    }
    
    //串口发送方法
    	//普通字符发送
    	chuankoufasong(QString("a").toLatin1());
    	
    	//16进制发送
    	//一组16进制数据转换成串口发送
    	QString fasong = "02 03 00 00 00 10 44 35";
    	chuankoufasong(QString2Hex(fasong));
    //转换方法	
    QByteArray MainWindow::QString2Hex(QString str)
    {
        QByteArray senddata;
        int hexdata,lowhexdata;
        int hexdatalen = 0;
        int len = str.length();
        senddata.resize(len/2);
        char lstr,hstr;
        for(int i=0; i<len; )
        {
            hstr=str[i].toLatin1();
            if(hstr == ' ')
            {
                i++;
                continue;
            }
            i++;
            if(i >= len)
                break;
            lstr = str[i].toLatin1();
            hexdata = ConvertHexChar(hstr);
            lowhexdata = ConvertHexChar(lstr);
            if((hexdata == 16) || (lowhexdata == 16))
                break;
            else
                hexdata = hexdata*16+lowhexdata;
            i++;
            senddata[hexdatalen] = (char)hexdata;
            hexdatalen++;
        }
        senddata.resize(hexdatalen);
        return senddata;
    }
    
    char MainWindow::ConvertHexChar(char ch)
    {
        if((ch >= '0') && (ch <= '9'))
            return ch-0x30;
        else if((ch >= 'A') && (ch <= 'F'))
            return ch-'A'+10;
        else if((ch >= 'a') && (ch <= 'f'))
            return ch-'a'+10;
        else return (-1);
    }
    

    总结

    以上就是今天要讲的内容,本文仅仅简单介绍了Qt串口的使用。

    本文连接

    展开全文
  • Qt5 串口调试助手源代码.zip
  • Qt5串口调试助手(界面带命令)
  • QT5 串口设计

    2019-04-14 19:55:22
    QT5 串口设计 适合初学者,含有BUG,没有调试,主要通过代码可以学习到串口的搭建流程 一个不完善的界面,可以配合虚拟串口+SSCOM32进行测试 同时也非常感谢论坛各位大神的文章指导 如果有兴趣,留言整套代码附赠,...

    QT5 串口设计

    适合初学者,含有BUG,没有调试,主要通过代码可以学习到串口的搭建流程
    在这里插入图片描述
    一个不完善的界面,可以配合虚拟串口+SSCOM32进行测试
    同时也非常感谢论坛各位大神的文章指导
    如果有兴趣,留言整套代码附赠,一起学习进步

    展开全文
  • 编写简单的上位机(QT5串口编程)
  • Qt5 串口通信详解

    2020-07-09 18:16:58
    Qt5 串口通信详解 本文在最后一节主要详解如何高效读取串口数据,其余都是鹦鹉学舌 1. 相关类 相关库 1-1. 在.pro文件中添加: QT += serialport 1-2. 包含以下两个头文件: #include <QSerialPort> //提供访问...

    Qt5 串口通信详解

    本文在最后一节主要详解如何高效读取串口数据,其余都是鹦鹉学舌

    1. 相关类 相关库

    1-1. 在.pro文件中添加:

    QT       += serialport
    

    1-2. 包含以下两个头文件:

    #include <QSerialPort>        //提供访问串口的功能 
    #include <QSerialPortInfo>    //提供系统中存在的串口的信息
    

    2. 常用设置串口的函数

    //创建串口对象
    QSerialPort serial;
    //设置串口名 
    #ifdef __linux__ // 在Linux系统下
    serial.setPortName("ttyUSB0");
    #else //windows系统下
    serial.setPortName("COM3");
    #endif
    //设置波特率
    serial.setBaudRate(QSerialPort::Baud9600);
    //设置数据位数
    serial.setDataBits(QSerialPort::Data8);
    //设置奇偶校验
    serial.setParity(QSerialPort::NoParity); 
    //设置停止位
    serial.setStopBits(QSerialPort::OneStop);
    //设置流控制
    serial.setFlowControl(QSerialPort::NoFlowControl);
    

    在Linux系统下,可以通过 dmesg 命令 看系统打印找到串口名称.
    在windows系统中,可以通过设备管理找到串口名称.

    也可以通过以下代码段来自动找到串口名称

     QString SerialPortDevName;
    
        foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
            qDebug() << "Name : " << info.portName();
            qDebug() << "Description : " << info.description();
            qDebug() << "Manufacturer: " << info.manufacturer();
            qDebug() << "Serial Number: " << info.serialNumber();
            qDebug() << "System Location: " << info.systemLocation();
            SerialPortDevName = info.portName();
            break;
        }
    

    串口设置参数可以参考 Qt5 QSerialPort 类

    3 打开串口

    serial.open(QIODevice::ReadWrite);
    

    这里可能打开失败,是因为用户没有权限,到/dev目录中 使用chmod,赋予权限

    3 读取数据

    这里常规读取是读不完所有数据的,请看最后一节
    关联槽函数

    connect(&serial, SIGNAL(readyRead()), this, SLOT(serialPortDev_read()));
    

    在槽函数中添加,以下代码段

    QByteArray buffer = serial.readAll();
    

    4 写入数据

    serial.write(data);
    

    5关闭串口

    serial.close();
    

    6 实际问题

    这时,串口接收至多可以接收8位数据,如果是超过8位的字符串时,只能把每次接收下的字符串存起来,再拼成字符串,这样的处理流程极其麻烦,也丧失了Qt提供的神操作"信号槽"机制, Qt也为我们想好如何处理这么复杂的问题.

    关联信号与槽函数

    connect(&serial, SIGNAL(readyRead()), this, SLOT(serialPortDev_read()));
    

    槽函数实现

    void SerialPortDev::serialPortDev_read(void)
    {
        while (waitForReadyRead(5)) ; 
    
    
        QByteArray readData = serial.readAll();
        qDebug() << "SerialPortDev_read ba::" << readData;
    
    	/**
    	 *  TODO
         **/
    }
    

    bool QSerialPort::waitForReadyRead(int msecs)
    Reimplemented from QIODevice::waitForReadyRead().

    This function blocks until new data is available for reading and the
    readyRead() signal has been emitted. The function will timeout after
    msecs milliseconds.

    The function returns true if the readyRead() signal is emitted and
    there is new data available for reading; otherwise it returns false
    (if an error occurred or the operation timed out).

    while (waitForReadyRead(5)) ; 为了等待串口能够一次读取所有发送了的字符串,等待时间调试到一个自己合适的等待时间

    展开全文
  • QT5串口编程——编写简单的上位机

    万次阅读 多人点赞 2016-01-30 15:51:48
    注:更新自2018年12月13日(我回看了一年多前写的这篇...学习了前面部分,对QT有了大概的了解后,就开始在网上寻找串口编程的方法。通过好几天的学习,终于写出了一个用于串口通信的上位机。下面开始介绍串口类的...

    注:更新自2018年12月13日(我回看了一年多前写的这篇博客,觉得不是很好,故翻新了一遍。)

    最近在学习嵌入式,而上位机又是一个不可缺少的工具,于是就开始接触QT,学习编写上位机。刚开始的时候什么都不懂,发现《Qt 学习之路 2》有比较好的入门教程。学习了前面部分,对QT有了大概的了解后,就开始在网上寻找串口编程的方法。通过好几天的学习,终于写出了一个用于串口通信的上位机。下面开始介绍串口类的使用。

    首先,QT5是自带QSerialPort这个类的,使用时需要在pro文件里面添加一行:

    QT       += serialport

    然后直接引用头文件就可以了。

    #include <QSerialPort>        //提供访问串口的功能 
    #include <QSerialPortInfo>    //提供系统中存在的串口的信息

    在QT5中,串口通信是借助一个QSerialPort的对象来实现的,在设置QSerialPort对象对串口的名称、波特率、数据位、校验位、停止位等参数后,方能对串口进行读写。下面,我总结了一下借助QSerailPort对串口进行设置、打开、读、写和关闭的过程。


    一、设置和打开串口

    //创建串口对象
    QSerialPort serial;
    //设置串口名
    serial.setPortName("COM3");
    //设置波特率
    serial.setBaudRate(QSerialPort::Baud9600);
    //设置数据位数
    serial.setDataBits(QSerialPort::Data8);
    //设置奇偶校验
    serial.setParity(QSerialPort::NoParity); 
    //设置停止位
    serial.setStopBits(QSerialPort::OneStop);
    //设置流控制
    serial.setFlowControl(QSerialPort::NoFlowControl);
    //打开串口
    serial.open(QIODevice::ReadWrite);

    以上代码是QSerialPort对象的设置示例,作用是:

    • 设置串口名为 COM3 
    • 设置波特率为9600
    • 设置数据位为8位
    • 设置没有奇偶校验位
    • 设置停止位为1位
    • 设置没有流控制
    • 以可读写的方式打开串口

    设置完这些就能进行读写操作了。如果遇到不理解的地方,可以选择QT的类或函数,然后按F1查阅手册。举个例子,如果我们想查看QSerialPort的其它的属性,可以选择QSerialPort的类名成员函数,然后按F1。


    二、读取数据

    //从接收缓冲区中读取数据
    QByteArray buffer = serial.readAll();
    

    串口在收到数据后,会将数据存入接收缓冲区。此时,我们可以通过readAll()函数将接收缓冲区的数据读出来。当串口的接收缓冲区有数据时,QSerilaPort对象会发出一个readyRead()的信号。因此,我们可以编写一个槽函数来读数据,例如:

    //连接信号和槽
    QObject::connect(&serial, &QSerialPort::readyRead, this, &MainWindow::serialPort_readyRead);
    
    ……
    
    //编写的槽函数
    void MainWindow::serialPort_readyRead()
    {
        //从接收缓冲区中读取数据
        QByteArray buffer = serial.readAll();
        
        //处理数据
        //……
    }

    三、发送数据

    serial->write(data);

    使用write函数便可以把字节数组中的字节发送出去。

    四、关闭串口

    serial->close();

    串口不用时,可通过close()函数将其关闭。

     

    接下来是一个实例

    1、创建一个新的Widgets Appliaction工程

    2、使用QtCreator的ui文件来设计上位机的界面,设计如下:

    3、mainwindow.h文件内容如下:

    //mainwindow.h
    
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include <QSerialPort>
    #include <QSerialPortInfo>
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    private slots:
        void serialPort_readyRead();
    
        void on_searchButton_clicked();
    
        void on_openButton_clicked();
    
        void on_sendButton_clicked();
    
        void on_clearButton_clicked();
    
    private:
        Ui::MainWindow *ui;
        QSerialPort serial;
    };
    
    #endif // MAINWINDOW_H
    

    4、mainwindow.cpp文件内容如下:

    //mainwindow.cpp
    
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QMessageBox>
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        //连接信号和槽
        QObject::connect(&serial, &QSerialPort::readyRead, this, &MainWindow::serialPort_readyRead);
    
        //发送按键失能
        ui->sendButton->setEnabled(false);
        //波特率默认选择下拉第三项:9600
        ui->baudrateBox->setCurrentIndex(3);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::serialPort_readyRead()
    {
        //从接收缓冲区中读取数据
        QByteArray buffer = serial.readAll();
        //从界面中读取以前收到的数据
        QString recv = ui->recvTextEdit->toPlainText();
        recv += QString(buffer);
        //清空以前的显示
        ui->recvTextEdit->clear();
        //重新显示
        ui->recvTextEdit->append(recv);
    }
    
    
    void MainWindow::on_searchButton_clicked()
    {
        ui->portNameBox->clear();
        //通过QSerialPortInfo查找可用串口
        foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
        {
            ui->portNameBox->addItem(info.portName());
        }
    }
    
    void MainWindow::on_openButton_clicked()
    {
        if(ui->openButton->text()==QString("打开串口"))
        {
            //设置串口名
            serial.setPortName(ui->portNameBox->currentText());
            //设置波特率
            serial.setBaudRate(ui->baudrateBox->currentText().toInt());
            //设置数据位数
            switch(ui->dataBitsBox->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->stopBitsBox->currentIndex())
            {
            case 1: serial.setStopBits(QSerialPort::OneStop); break;
            case 2: serial.setStopBits(QSerialPort::TwoStop); break;
            default: break;
            }
            //设置流控制
            serial.setFlowControl(QSerialPort::NoFlowControl);
    
            //打开串口
            if(!serial.open(QIODevice::ReadWrite))
            {
                QMessageBox::about(NULL, "提示", "无法打开串口!");
                return;
            }
    
            //下拉菜单控件失能
            ui->portNameBox->setEnabled(false);
            ui->baudrateBox->setEnabled(false);
            ui->dataBitsBox->setEnabled(false);
            ui->ParityBox->setEnabled(false);
            ui->stopBitsBox->setEnabled(false);
    
            ui->openButton->setText(QString("关闭串口"));
            //发送按键使能
            ui->sendButton->setEnabled(true);
        }
        else
        {
            //关闭串口
            serial.close();
    
            //下拉菜单控件使能
            ui->portNameBox->setEnabled(true);
            ui->baudrateBox->setEnabled(true);
            ui->dataBitsBox->setEnabled(true);
            ui->ParityBox->setEnabled(true);
            ui->stopBitsBox->setEnabled(true);
    
            ui->openButton->setText(QString("打开串口"));
            //发送按键失能
            ui->sendButton->setEnabled(false);
        }
    }
    
    void MainWindow::on_sendButton_clicked()
    {
        //获取界面上的数据并转换成utf8格式的字节流
        QByteArray data = ui->sendTextEdit->toPlainText().toUtf8();
        serial.write(data);
    }
    
    void MainWindow::on_clearButton_clicked()
    {
        ui->recvTextEdit->clear();
    }
    

    5、main.cpp文件内容如下:

    #include "mainwindow.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
    
        return a.exec();
    }
    

    4、测试(将USB转TTL模块发送和接收引脚短接,自己发自己收)

     

    新的工程已经上传至:https://download.csdn.net/download/u014695839/10881180 (2018年12月27日更新)

    以前的工程在这里可以下载:http://download.csdn.net/detail/u014695839/9763670

    以上内容若有问题,大家务必提醒,我定会马上更正!

    希望能与大家多多交流。

    展开全文
  • QT5串口通信,通过上位机对下位机进行幅值、频率等参数的调制。
  • Qt5串口通信,自己编的。测试过可以用。上传资源。本想免费提供给小伙伴们,一起交流@我啊。发布时资源分数至少要1及以上...我并不想收费
  • qt5串口助手

    2018-06-28 10:50:33
    基于qt5开发的串口助手,可实现与下位机的串口通信,基本收发功能均已实现
  • QT5 串口调试助手 环境:WIN7/WIN8/WIN10, MinGW-64 bits,已测试完成,串口工具实现了自动刷新串口,16进制转换,显示发送,多项发送,自定义串口命令,暂停与开始串口数据接收等通用的功能,运作良好 QT5 TCP ...
  • Qt5串口通信

    2021-02-04 18:30:33
    简单的串口通信,实现了基本的功能:收发16进制,自动发送,清除接收框等 另附有串口助手与虚拟串口软件 简单的串口通信,实现了基本的功能:收发16进制,自动发送,清除接收框等 另附有串口助手与虚拟串口软件
  • QT5串口编程

    千次阅读 2016-04-29 18:10:53
    QT5串口编程,   官方概述: #include 提供使用串口的功能。 你可以使用QSerialPoartInfo帮助类获取可用串口资源,(将会列举出系统中所有的口 对获取正确的串口号是很有帮助的,   使用 setPort()or ...
  • Qt5串口助手

    2016-09-26 15:51:11
    Qt5自身的类库开发的串口助手
  • QT5 串口 收发 实例

    千次下载 热门讨论 2013-10-28 08:35:31
    这个小程序是自己用QT5开发的调试串口用的 在xp下收发正常 收发用的是一个独立线程
  • qt5串口示例程序

    2019-01-16 15:00:04
    基于QT5串口示例代码,包括发送数据和接受数据等功能.
  • QT5串口通信例程

    2018-07-05 16:49:45
    基于QT5串口通信例程,开发平台qtcreator,发布时间2018.07.05

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 818
精华内容 327
关键字:

qt5串口