zoukankan      html  css  js  c++  java
  • Qt串口通信

    受不了xxxx恶心人的行为,遂搬迁至博客园。
    始发:2018-03-02 15:42:00
    

    一、简介

    随着物联网、智能化的浪潮,加上嵌入式设备硬件资源的限制,越来越多的通信模块开始倾向于串口,比如WiFi模块、BT模块、ZigBee模块等等。 串口的特点:
    1、通用。由于串口的悠久历史,就连8位机51都必含串口。
    2、易用易调试。硬件上来说,Rx/Tx/GND搞定;软件上,读写串口同样相当简易。而且,由于串口的普及,我们可以极其方便的结合PC上的串口工具辅助调试。
    3、稳定。

    基于以上原因,在开发中经常需要调试串口通信,所以写了个小的串口通信demo。由于串口之上的协议各不相同,所以只提供基本的读写数据功能。

    二、编译

    如果使用qt-opensource-windows-x86-mingw491_opengl-5.4.0.exe,那么直接clone代码即可编译运行,UI如下:

    三、Qt串口编程注意事项

    在接收串口数据时:

    void PortSettingDialog::onDataRecv()
    {
        const qint64 bytesAvailable = mUartCom->bytesAvailable();
        if (bytesAvailable == 0)
            return;
     
        QByteArray readData = mUartCom->readAll();
        const char *rxBuffer = readData.data();
     
        updateRecvUI(rxBuffer, bytesAvailable);
    }
    

    bytesAvailable()方法的返回值bytesAvailable可能比readData.size()小,所以如果使用bytesAvailable进行数据处理的话(如上面代码段),无疑会遗漏数据,自然这是错误的。所以我们不能使用bytesAvailable()丈量数据长度,正确的串口数据接收方式:

    void PortSettingDialog::onDataRecv()
    {
        QByteArray readData = mUartCom->readAll();
        if (readData.size() == 0)
            return;
     
        const char *rxBuffer = readData.data();
        updateRecvUI(rxBuffer, readData.size());
    }
    

    GitHub地址

  • 相关阅读:
    86. Partition List
    2. Add Two Numbers
    55. Jump Game
    70. Climbing Stairs
    53. Maximum Subarray
    64. Minimum Path Sum
    122. Best Time to Buy and Sell Stock II
    以场景为中心的产品设计方法
    那些产品经理犯过最大的错
    Axure教程:如何使用动态面板?动态面板功能详解
  • 原文地址:https://www.cnblogs.com/rockyching2009/p/13139597.html
Copyright © 2011-2022 走看看