自学内容网 自学内容网

QT使用串口QSerialPort总结,及正确的读写方式

  我想挺简单,然而这么麻烦……

  • 列出所有串口
    QString portName;

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

这个简单。注意不要在线程中处理。

    serialPort = new QSerialPort();

    //设置COM口
    serialPort->setPortName(portName);

    //设置波特率和读写方向
    serialPort->setBaudRate(QSerialPort::Baud4800, QSerialPort::AllDirections);

    //数据位为8位
    serialPort->setDataBits(QSerialPort::Data8);

    //无流控制
    serialPort->setFlowControl(QSerialPort::NoFlowControl);
    //无校验位

    serialPort->setParity(QSerialPort::NoParity);

    //2位停止位
    serialPort->setStopBits(QSerialPort::TwoStop);

    //先关串口,再打开,可以保证串口不被其它函数占用。
    serialPort->close();

    //以可读写的方式打开串口
    if (serialPort->open(QIODevice::ReadWrite))
    {
        serialPort->setDataTerminalReady(true);
        connect(pLighter->serialPort, &QIODevice::readyRead, pLighter, &AlertLighter::do_com_readyRead);
        canWriteCmd = true;
    }
  • 写数据

因为要多次写入,所以加了个队列。

SendCmd(uint8_t* pCmd)
{
    QMutexLocker locker(&m_lock);

    if (canWriteCmd)
    {
        canWriteCmd = false;
        serialPort->write((const char*)pCmd, CMD_SIZE);
    }
    else
    {
        uint8_t* cmd = (uint8_t*)malloc(CMD_SIZE);
        memcpy(cmd, pCmd, CMD_SIZE);
        cmdList.append(cmd);
    }
}
  • 读数据

必须这样写。

do_com_readyRead()
{
    QByteArray all = serialPort->readAll();
    //check data

    QMutexLocker locker(&m_lock);
    if (cmdList.size() > 0)
    {
        canWriteCmd = false;
        uint8_t* cmd = cmdList.at(0);
        serialPort->write((const char*)cmd, CMD_SIZE);

        cmdList.remove(0);
        delete cmd;
    }
    else
    {
        canWriteCmd = true;
    }
}


原文地址:https://blog.csdn.net/quantum7/article/details/142462625

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!