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:\Qt\Qt5.4.0\Tools\mingw491_32\i686-w64-mingw32\include下面的winbase.h文件中:

C:\Qt\Qt5.4.0\Tools\mingw491_32\i686-w64-mingw32\include\winbase.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板上接口盡量做到強的抗干擾性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM