Qt5串口多功能助手32位版本相关程序含源码

开发平台:Qt 5.9

编译环境:MinGW 5.3  32bit

Qt6.3-64位版本文章链接:(102条消息) Qt6串口多功能助手64位版本上位机源码_阿衰0110的博客-CSDN博客

免费安装包与源码文件在文末,部分程序已更新建议下载源码查看

        Qt creater平台为我们提供了串口类,直接调用现成的类方法就可以实现串口功能。我创建了一个继承QSerialPort的子类Serial,这样方便调用串口方法。

// 引入下面两个串口相关类
#include <QSerialPort>
#include <QSerialPortInfo>

class Serial : public QSerialPort
{
public:
    explicit Serial();
};

现将主要程序代码介绍一下。

1.串口扫描函数

QStringList Serial::serialScan(void)
{
    QStringList serialPortList;

    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
        this->setPort(info);
        // 若当前串口被打开则只添加到列表不关闭 防止已打开串口时被强制关闭
        if(this->open(QIODevice::NotOpen)) {
            serialPortList.append(this->portName());
            this->close();
        } else {
            serialPortList.append(this->portName());
        }
    }
    return serialPortList;
}

 细心的小伙伴可能发现了上面串口扫描函数中不含有判断当前串口是否可被读写的代码↓↓↓

if(this->open(QIODevice::ReadWrite)) { xxx; }

将这个判断删去是因为当我们要定时刷新串口的话,此判断会使界面卡顿,所以删去

2.串口打开函数

bool Serial::serialOpen(QString serialName, int baudRate)
{
    this->setPortName(serialName);
    if(this->open(QIODevice::ReadWrite)) {
        this->setBaudRate(baudRate);
        this->setDataBits(QSerialPort::Data8); //这里是默认了数据位为8位,可改为上面传参的方式
        this->setParity(QSerialPort::NoParity); //同上
        this->setStopBits(QSerialPort::OneStop); //同上
        this->setFlowControl(QSerialPort::NoFlowControl);
        // 下位机发送数据会响应这个槽函数
        connect(this, &QSerialPort::readyRead, this, &Serial::readData);
        // 下位机发送数据会触发这个信号 给主界面处理数据使用
        connect(this, &QSerialPort::readyRead, this, &Serial::readSignal);
        return true;
    }
    return false;
}

3.读数据/写数据/关闭串口函数

// 读数据
void Serial::readData()
{
    dataBuf = this->readAll(); // 将读到的数据放到数据缓存区
}
// 写数据
void Serial::sendData(QByteArray sendData)
{
    this->write(sendData);
}
// 关闭串口
void Serial::serialClose()
{
    this->clear();
    this->close();
}

4.串口数据接收显示函数

void Page_one::receiveDate(void)
{
    // ASCII显示是否选中
    if(receive_ASCII->checkState() == Qt::Checked) {
        // 停止显示是否选中
        if(receive_stop->checkState() == Qt::Unchecked) {
            // 日志模式是否选中
            if(receive_diary->checkState() == Qt::Checked) {
                // 数据缓存区是否为空
                if(serial_main->dataBuf.isNull() == false) {
                    // 获取当前时间
                    this->getCurrentTime();
                    dateBufTemp += currentTimer;
                    // QByteArray转QString
                    dateBufTemp += tc->toUnicode(serial_main->dataBuf) + "\n";  // 转中文
                    text_receive->setText(dateBufTemp);
                }
            } else {
                dateBufTemp += tc->toUnicode(serial_main->dataBuf);  // 转中文
                text_receive->setText(dateBufTemp);
            }
        }
    } else if(receive_HEX->checkState() == Qt::Checked) {
        if(receive_stop->checkState() == Qt::Unchecked) {
            if(receive_diary->checkState() == Qt::Checked) {
                if(serial_main->dataBuf.isNull() == false) {
                    // 获取当前时间
                    this->getCurrentTime();
                    dateBufTemp += currentTimer;
                    // 转大写16进制,空格隔开
                    dateBufTemp += QString(serial_main->dataBuf.toHex(' ')).toUpper() + "\n";
                    text_receive->setText(dateBufTemp);
                }
            } else {
                // 转大写16进制,空格隔开
                dateBufTemp += QString(serial_main->dataBuf.toHex(' ')).toUpper() + " ";
                text_receive->setText(dateBufTemp);
            }
        }
    }
}

5.发送数据函数

void Page_one::transmitDate(void)
{
    if(transmit_ASCII->checkState() == Qt::Checked) {
        QByteArray transmitDataTemp;
        if(transmit_newLine->checkState() == Qt::Checked) {
            // 将获取的文本内容转换为QByteArray类型
            transmitDataTemp = tc->fromUnicode(text_transmit->toPlainText() + "\n");
        } else {
            transmitDataTemp = tc->fromUnicode(text_transmit->toPlainText());
        }
        serial_main->sendData(transmitDataTemp);
    } else if(transmit_HEX->checkState() == Qt::Checked) {
        QByteArray transmitDataTemp;
        if(transmit_newLine->checkState() == Qt::Checked) {
            // 将获取的文本内容转换为QByteArray类型后再转换为16进制并大写
            transmitDataTemp = QByteArray::fromHex(tc->fromUnicode(text_transmit->toPlainText() + "\n")).toUpper();
        } else {
            transmitDataTemp = QByteArray::fromHex(tc->fromUnicode(text_transmit->toPlainText())).toUpper();
        }
        serial_main->sendData(transmitDataTemp);
    }
}

6.串口定时更新函数

// 串口定时扫描更新
    t2 = new QTimer();
    t2->start(1000);
    connect(t2, &QTimer::timeout, this, [=](){
        serialNameListOld = serialNameList;
        serialNameList = serial_main->serialScan();
        currentPortText = serial_port_C->currentText();
        // 如果上次列表和当前列表不一致则更新端口列表
        if(serialNameListOld != serialNameList) {
            serial_port_C->clear();
            serial_port_C->addItems(serialNameList);
            serial_port_C->setCurrentText(currentPortText);
        }
        // 打开串口时串口变化 如果处于打开状态的端口被拔出则重置串口状态
        if(!serial_ONOFF_P_flag) {
            if((serial_port_C->currentText() == "") || (serial_port_C->currentText() != currentPort)) {
                serial_ONOFF_P->setText("打开串口");
                serial_ONOFF_L->setPixmap(QPixmap(":/IMG/OFF.png"));
                serial_ONOFF_P_flag = true;
                QMessageBox::about(this, "错误提示", "当前串口已关闭");
                serial_main->close();
            }
        }
    });

最终的样子就是这样的,基本功能也已经实现,亲测可用

最后将串口助手的安装包和源码给大家使用和参考:

使用QtUI设计开发的串口助手源码文件_qt串口程序-C++文档类资源-CSDN下载

END

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux串口调试助手源码QT是基于QT框架开发的一个用于串口通信的工具,它提供了一套简洁易用的界面和丰富的功能,方便用户对串口进行调试和通信。 该调试助手源码主要包以下几个核心模块: 1. 串口设置模块:提供了设置串口参数的功能,例如波特率、数据位、停止位、奇偶校验位等,以便与外部设备进行正确的通信。 2. 数据接收模块:负责监听串口接收缓冲区,将接收到的数据显示在界面上,并提供保存数据、清除数据等操作功能,便于用户查看和分析数据。 3. 数据发送模块:支持以ASCII码或16进制发送数据,用户可以输入发送数据并通过串口发送,也可以通过文件发送数据。 4. 自动发送模块:用户可以设定发送间隔和发送次数,使调试助手自动发送数据,用于测试和验证通信稳定性等。 5. 快捷命令模块:用户可以预先设定好一些常用的令,通过点击按钮或快捷键快速发送令,节省调试时间。 6. 数据统计模块:提供了对接收数据个数、发送数据个数、错误数据个数等的统计功能,便于用户监测通信状态。 通过QT的跨平台性,该调试助手源码可以在Windows、Linux等多个操作系统上运行,方便用户根据自己的需求进行二次开发和定制。通过理解和修改该源码,用户可以获得一套适用于自己项目的串口调试助手,提高调试效率和便捷性。 综上所述,Linux串口调试助手源码QT是一个功能齐全、易于使用和可扩展性强的调试工具,可以满足用户对串口通信的各种需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿衰0110

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值