Qt-串口

一次调试转台设备时,需要用到串口调试,便使用了Qt的serialport模块。这里记录下,

  • pro QT += serialport 
  • 关键,设备的结束符,eg:本次调试的设备为:"\r\n"
  • 常规初始化基本没问题
class SerPort:public QObject
{
    Q_OBJECT
public:
    SerPort(QString portName,QObject *parent = nullptr);
    ~SerPort();

signals:
    void sig_messageSend(QString str);

public:
    void initSerialPort();
    void portClose();

public slots:
    void slot_readData();
    void writeData(QString data);

private:
    QSerialPort *m_serialPort;
    QString m_portName;
};
void SerPort::writeData(QString data)
{
    qint64 writeLen = m_serialPort->write(data.toLocal8Bit());
    m_serialPort->flush();
    m_serialPort->waitForBytesWritten();
}

void SerPort::initSerialPort()
{
    m_serialPort = new QSerialPort(this);
    // 设置串口名
    m_serialPort->setPortName(m_portName);

    // 打开串口
    m_serialPort->open(QIODevice::ReadWrite);

    // 设置波特率
    m_serialPort->setBaudRate(QSerialPort::Baud9600);

    // 设置数据位,Data8与单字符刚好匹配,char
    m_serialPort->setDataBits(QSerialPort::Data8);

    // 设置校验位
    m_serialPort->setParity(QSerialPort::NoParity); 

    // 设置停止位
    m_serialPort->setStopBits(QSerialPort::OneStop);

    // 设置流控制
    m_serialPort->setFlowControl(QSerialPort::NoFlowControl);

    QObject::connect(m_serialPort,&QSerialPort::readyRead,this,&SerPort::slot_readData);
    connect(m_serialPort, &QSerialPort::errorOccurred,[this](QSerialPort::SerialPortError error){
        emit sig_messageSend("error");
    });

}

void SerPort::portClose()
{
    m_serialPort->close();
}

void SerPort::slot_readData()
{
    static QByteArray bytesAll;
    QByteArray bytes = m_serialPort->readAll();
    if(!bytes.isEmpty())
    {
        bytesAll.append(bytes);
        QString itemStr(bytes);
        // 接收到完整反馈
        if((itemStr.contains("\r"))||(itemStr.contains("\n")))
        {
            QString str(bytesAll);
            emit sig_messageSend(QString("%1").arg(str));
            bytesAll.clear();
        }
    }
}
    QString strCmd;
    // key 结束符
    m_portFirst->writeData(strCmd +"\r\n");

调试串口时,可以使用串口试助手和串口模拟工具。

你可能感兴趣的:(Qt)