以下是一个简单的串口收发类,使用Qt的QSerialPort类。

Header文件:

#ifndef SERIALPORT_H
#define SERIALPORT_H

#include <QObject>
#include <QSerialPort>

class SerialPort : public QObject
{
    Q_OBJECT

public:
    explicit SerialPort(QObject *parent = nullptr);
    ~SerialPort();

    bool open(QString portName, int baudRate);
    void close();

    bool send(const QByteArray &data);
    QByteArray receive();

private slots:
    void onReadyRead();

private:
    QSerialPort *serialPort;
    QByteArray buffer;
};

#endif // SERIALPORT_H

源文件:

#include "serialport.h"

SerialPort::SerialPort(QObject *parent) : QObject(parent)
{
    serialPort = new QSerialPort(this);
    connect(serialPort, &QSerialPort::readyRead, this, &SerialPort::onReadyRead);
}

SerialPort::~SerialPort()
{
    close();
}

bool SerialPort::open(QString portName, int baudRate)
{
    if (serialPort->isOpen())
        close();

    serialPort->setPortName(portName);
    serialPort->setBaudRate(baudRate);
    serialPort->setDataBits(QSerialPort::Data8);
    serialPort->setParity(QSerialPort::NoParity);
    serialPort->setStopBits(QSerialPort::OneStop);
    serialPort->setFlowControl(QSerialPort::NoFlowControl);

    return serialPort->open(QIODevice::ReadWrite);
}

void SerialPort::close()
{
    if (serialPort->isOpen())
        serialPort->close();
}

bool SerialPort::send(const QByteArray &data)
{
    if (!serialPort->isOpen())
        return false;

    return serialPort->write(data) == data.size();
}

QByteArray SerialPort::receive()
{
    QByteArray data = buffer;
    buffer.clear();
    return data;
}

void SerialPort::onReadyRead()
{
    buffer.append(serialPort->readAll());
}

使用示例:

SerialPort serialPort;
if (serialPort.open("COM1", 9600))
{
    QByteArray data = "Hello, world!";
    if (serialPort.send(data))
        qDebug() << "Sent:" << data;

    QThread::msleep(100);

    data = serialPort.receive();
    qDebug() << "Received:" << data;
}

serialPort.close();
用qt写一个串口收发类

原文地址: https://www.cveoy.top/t/topic/q9S 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录