受不了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板上接口盡量做到強的抗干擾性。
