___2017

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  328 随笔 :: 18 文章 :: 15 评论 :: 18万 阅读
1
2
受不了xxxx恶心人的行为,遂搬迁至博客园。
始发:2015-01-24 11:58:18

环境配置:

  • 主机:XP
  • QT:5.4.0

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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的枚举值:

1
2
3
4
5
enum BaudRateType
{
    ......
    BAUD921600
}

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

1
2
3
4
5
6
7
8
9
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文件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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板上接口尽量做到强的抗干扰性。

posted on   yin'xiang  阅读(3237)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2019-06-16 socket编程实战-bind端口占用问题
2019-06-16 socket编程实战-tcp_tw_recycle问题
2019-06-16 socket编程实战-connect超时问题
点击右上角即可分享
微信分享提示