Qt 編寫串口調試助手


一、成品圖展示

成品圖如下所示:


二、串口通訊步驟

1、在工程文件(.pro)中添加串口通信相關運行庫:QT += serialport


2、在頭文件中添加:

#include <QSerialPort>
#include <QSerialPortInfo>

3、在頭文件中定義全局的串口對象:QSerialPort *m_serialPort;


4、掃描可用串口:

// 掃描可用串口
QStringList Serial::scanSerial()
{
    QStringList serialStrList;

    // 讀取串口信息
    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        m_serialPort->setPort(info);
        // 判斷端口能否以讀寫方式打開
        if(m_serialPort->open(QIODevice::ReadWrite))
        {
            serialStrList.append(m_serialPort->portName());
            m_serialPort->close(); // 然后自動關閉等待人為開啟(通過"打開串口按鈕")
        }
    }

    return serialStrList;
}

5、打開串口:

// 打開串口
bool Serial::open(QString serialName, int baudRate)
{
    // 設置串口名
    m_serialPort->setPortName(serialName);
    // 打開串口(以讀寫方式)
    if(m_serialPort->open(QIODevice::ReadWrite))
    {
        m_serialPort->setBaudRate(baudRate); // 設置波特率(默認為115200)
        m_serialPort->setDataBits( QSerialPort::Data8 ); // 設置數據位(數據位為8位)
        m_serialPort->setParity( QSerialPort::NoParity ); // 設置校驗位(無校驗位)
        m_serialPort->setStopBits( QSerialPort::OneStop ); // 設置停止位(停止位為1)
        m_serialPort->setFlowControl( QSerialPort::NoFlowControl ); // 設置流控制(無數據流控制)

        // 當下位機中有數據發送過來時就會響應這個槽函數
        connect(m_serialPort, SIGNAL(readyRead()), this, SLOT(readData()));
        // 當下位機中有數據發送過來時就會觸發這個信號,以提示其它類對象
        connect(m_serialPort, SIGNAL(readyRead()), this, SIGNAL(readSignal()));

        return true;
    }

    return false;
}

6、關閉串口:

// 關閉串口
void Serial::close()
{
    m_serialPort->clear();
    m_serialPort->close();
}

7、 發送數據給下位機:

// 發送數據給下位機
void Serial::sendData(QByteArray &sendData)
{
    // 發送數據幀
    m_serialPort->write(sendData);
}

8、讀取下位機發來數據:

// 讀取下位機發來數據
void Serial::readData()
{
    // 將下位機發來數據存儲在數據緩沖區
    m_readBuf = m_serialPort->readAll();
}

上述代碼都進行了封裝,單獨構建了一個 Serial 類,沒有和 Widget 類混雜在一起。

注:測試串口時,若沒有硬件條件,可以使用 VSPD 工具生成虛擬串口,具體請參考:【實用教程】VSPD虛擬串口工具——從此告別硬件串口調試


三、UI展示


四、源碼下載:

GitHub


參考:

QT5串口通信(Hex格式傳輸)

QT 制作串口調試小助手----(小白篇)

Qt 16進制字符串跟QByteArray互轉



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM