Qt串口通信

Qt串口通信的打开串口:

//串口自动初始化并打开按钮槽函数
*bool MachineDescribe::AutoInitSerialAndOpen()
{
    //如果串口未打开则自动搜索,打开串口
    if(!(m_pSerialPort->isOpen()))
    {
        QStringList qlStrPortName;
        foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
        {
            qlStrPortName.append(info.portName());
        }
        if(!(qlStrPortName.count()))
        {
            QString strError = "Error:没有找到有效串口!";
            LogInfoWritten(strError);
            return false;
        }
        QString strSerialName = m_strSerialPortName;
        m_pSerialPort->setPortName(strSerialName);
        m_pSerialPort->setDataBits(QSerialPort::Data8);//数据位为8位
        m_pSerialPort->setFlowControl(QSerialPort::NoFlowControl);//无流控制
        m_pSerialPort->setParity(QSerialPort::NoParity); //无校验位
        m_pSerialPort->setStopBits(QSerialPort::OneStop); //一位停止位
        // //
        bool beIsConnect = connect(m_pSerialPort,SIGNAL(readyRead()),this,SLOT(slot_ReceiveInfo()));
        qDebug() << "beIsConnect=" << beIsConnect;
        if(!(m_pSerialPort->isOpen()))
        {
            bool bstat = m_pSerialPort->open(QIODevice::ReadWrite);
            if(!bstat)
            {
                QString strError = "Error:串口打开失败!" +  m_pSerialPort->errorString();
                LogInfoWritten(strError);
                return false;
            }

            m_pSerialPort->waitForReadyRead(250);
            // setDataTerminalReady(true)
            //            m_pSerialPort->setDataTerminalReady(true);
        }
        QString strMsg = "\n成功打开串口:"
         +strSerialName + " " 
         +QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz");
        //发送打开成功信号,用于写log记录
        emit signal_MainWindowInfo(strMsg);
    }//if_isClosed
    else
    {
        m_pSerialPort->waitForReadyRead(250);
        //         m_pSerialPort->setDataTerminalReady(true);
    }//else_isOpen
    return true;
}//AutoInitSerialAndOpen

发送数据:

*//向单片机发送数据
void MachineDescribe::sendInfo( QS*tring info){
    QByteArray bWrite = HexStringToByteArray(info);
    
    AutoInitSerialAndOpen();
    
    qint64 qicount = m_pSerialPort->write(bWrite);
    
    qDebug() << "写入数据量:" << qicount;
}//sendInfo()

数据接收:*

//真正的数据接收槽函数
*bool MachineDescribe::slot_ReceiveInfo()
{
    QByteArray info = m_pSerialPort->readAll();
    if("" == info)
    {
        return false;
    }
    m_pSerialPort->clear();
    QString strReceive = ByteArrayToHexString(info);
    qDebug()<< "收到数据:" << strReceive;
    
     m_qlstrReceive.append(strReceive);
    return true;
}//slot_ReceiveInfo
```*
注意:串口的所有初始化,串口名,数据位,校验位,控制流,停止位,波特率,以及信号发送与信号接收的槽连接,都可以初始化一次到位,唯有一句,就是串口在每次信号发送之前都要设值一次的,才是唯一最关键的.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值