• 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板上接口尽量做到强的抗干扰性。

  • 相关阅读:
    四种数据库随机获取10条数据的方法
    古诗词
    一份 Spring Boot 项目搭建模板
    2020年只剩两个月,今年你是怎么过的?
    关于使用LocalDateTime进行存储,时间相差比较多的问题。
    项目中常用的19条MySQL优化
    SpringBoot注解大全
    JDK8的LocalDateTime用法
    linux代理上网5分钟搞定
    SQL简单语句作用
  • 原文地址:https://www.cnblogs.com/rockyching2009/p/13139892.html
Copyright © 2020-2023  润新知