zoukankan      html  css  js  c++  java
  • Qt串口实现921600波特率的方法

    受不了xxxx恶心人的行为,遂搬迁至博客园。
    始发:2015-01-24 11:58:18

    环境配置:

    • 主机:XP
    • QT:5.4.0

    1、在Qt中使用串口,我们需要一个第三方的串口类:qextserialport。在其qextserialbase.h文件中,提供了如下常用的波特率:

    enum BaudRateType 
    {
        BAUD50,                //POSIX ONLY
        BAUD75,                //POSIX ONLY
        BAUD110,
        BAUD134,               //POSIX ONLY
        BAUD150,               //POSIX ONLY
        BAUD200,               //POSIX ONLY
        BAUD300,
        BAUD600,
        BAUD1200,
        BAUD1800,              //POSIX ONLY
        BAUD2400,
        BAUD4800,
        BAUD9600,
        BAUD14400,             //WINDOWS ONLY
        BAUD19200,
        BAUD38400,
        BAUD56000,             //WINDOWS ONLY
        BAUD57600,
        BAUD76800,             //POSIX ONLY
        BAUD115200,
        BAUD128000,            //WINDOWS ONLY
        BAUD256000             //WINDOWS ONLY
    };
    

    2、其实要做的简单来说就是添加一种我们需要的波特率,不需要特别的知识,考虑下从应用层到OS层再到硬件寄存器层串口的实现流程,我们只要按照这个流程,添加相应的数据—宏定义/枚举值即可。

    3、那么,动手吧。以921600bps为例。

    1)在Qt编程时,设置串口波特率调用BaudRateType里的枚举值,那么就在BaudRateType中添加921600的枚举值:

    enum BaudRateType
    {
    	......
    	BAUD921600
    }
    

    2)BAUD921600底层的调用在win_qextserialport.cpp文件的void Win_QextSerialPort::setBaudRate(BaudRateType baudRate)中,那么我们就添加其对应的case语句:

    void Win_QextSerialPort::setBaudRate(BaudRateType baudRate)
    {
          ......
          /* 921600 baud */
          case BAUD921600:
               TTY_PORTABILITY_WARNING("Win_QextSerialPort Portability Warning: POSIX does not support 921600 baud operation.");
               Win_CommConfig.dcb.BaudRate=CBR_921600;
               break;
    }
    

    3)现在,我们需要找到CBR_921600的底层调用,它在Qt安装目录C:QtQt5.4.0Toolsmingw491_32i686-w64-mingw32include下面的winbase.h文件中:

    C:QtQt5.4.0Toolsmingw491_32i686-w64-mingw32includewinbase.h:
    #define CBR_110 110
    #define CBR_300 300
    #define CBR_600 600
    #define CBR_1200 1200
    #define CBR_2400 2400
    #define CBR_4800 4800
    #define CBR_9600 9600
    #define CBR_14400 14400
    #define CBR_19200 19200
    #define CBR_38400 38400
    #define CBR_56000 56000
    #define CBR_57600 57600
    #define CBR_115200 115200
    #define CBR_128000 128000
    #define CBR_256000 256000
    #define CBR_460800 460800
    #define CBR_921600 921600
    

    我们只需要添加自己需要的波特率对应的CBR_921600即可。

    4)大功告成

    但是还未完。速率越高,电磁干扰越大,所以这么高的波特率下需要高质量的线材、硬件支撑,而且越短越好,而且PCB板上接口尽量做到强的抗干扰性。

  • 相关阅读:
    Vmware
    Centos8
    Jmeter系列(37)- 详解 ForEach控制器
    【解决】k8s 1.15.2 镜像下载方案
    【解决】MacOS下 Python3.7 使用 pyinstaller 打包后执行报错 Failed to execute script pyi_rth__tkinter
    【解决】venv 的名字在 zsh prompt 中不显示
    【解决】could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network
    《Linux 性能优化实战—倪朋飞 》学习笔记 CPU 篇
    【解决】MongoDB 线上业务处理,数据去重脚本实现
    【解决】docker 容器中 consul集群问题处理
  • 原文地址:https://www.cnblogs.com/rockyching2009/p/13139892.html
Copyright © 2011-2022 走看看