13.5.2 配置串口(1)
在打开通信设备句柄后,常常需要对串口进行一些初始化配置工作。配置串口的一些属性,如串口通信参数、通信超时设置、缓冲区申请及缓冲区清空操作等。
(1)设置串口参数。设置串口参数需要通过一个DCB结构来进行。DCB结构包含了诸如波特率、数据位数、奇偶校验和停止位数等信息。在查询或配置串口的属性时,都要通过一个DCB结构的缓冲区。
一般用CreateFile打开串口后,可以调用GetCommState()函数来获取串口的初始配置。要修改串口的配置,应该先修改DCB结构,然后再调用SetCommState()函数设置串口。DCB结构包含了串口的各项参数设置,下面介绍该结构5个常用的成员变量。
BaudRate:波特率,DWORD型变量,指定通信设备的传输速率。这个成员可以是实际波特率值或者是表13.2中的常量值之一。
fParity:指定奇偶校验使能,DWORD型变量。若此成员为1,允许奇偶校验检查。
ByteSize:通信字节位数,4—8,BYTE型变量。
Parity:指定奇偶校验方法,BYTE型变量。此成员的取值如表13.3所示。
StopBits:指定停止位的位数,BYTE型变量。此成员取值如表13.4所示。
表13.2 波特率常见常量
|
值< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> |
winbase.h中的定义 |
说 明 |
|
CBR_110 |
#define CBR_110 110 |
波特率为110 |
|
CBR_300 |
#define CBR_300 300 |
波特率为300 |
|
CBR_600 |
#define CBR_600 600 |
波特率为600 |
|
CBR_1200 |
#define CBR_1200 1200 |
波特率为1200 |
|
CBR_2400 |
#define CBR_2400 2400 |
波特率为2400 |
|
CBR_4800 |
#define CBR_4800 4800 |
波特率为4800 |
|
CBR_9600 |
#define CBR_9600 9600 |
波特率为9600 |
|
CBR_14400 |
#define CBR_14400 14400 |
波特率为14400 |
|
CBR_19200 |
#define CBR_19200 19200 |
波特率为19200 |
|
CBR_38400 |
#define CBR_38400 38400 |
波特率为38400 |
|
CBR_56000 |
#define CBR_56000 56000 |
波特率为56000 |
|
CBR_57600 |
#define CBR_57600 57600 |
波特率为57600 |
|
CBR_115200 |
#define CBR_115200 115200 |
波特率为115200 |
|
CBR_128000 |
#define CBR_128000 128000 |
波特率为128000 |
|
CBR_256000 |
#define CBR_256000 256000 |
波特率为256000 |
表13.3 奇偶校验常见常量
|
值 |
winbase.h中的定义 |
说 明 |
|
NOPARITY |
#define NOPARITY 0 |
采用无校验方式 |
|
ODDPARITY |
#define ODDPARITY 1 |
采用奇校验方式 |
|
EVENPARITY |
#define EVENPARITY 2 |
采用偶校验方式 |
|
MARKPARITY |
#define MARKPARITY 3 |
采用标记校验方式 |
表13.4 停止位常见常量
|
值 |
winbase.h中的定义 |
说 明 |
|
ONESTOPBIT |
#define ONESTOPBIT 0 |
1位停止位 |
|
ONE5STOPBITS |
#define ONE5STOPBITS 1 |
1.5位停止位 |
|
TWOSTOPBITS |
#define TWOSTOPBITS 2 |
2位停止位 |
通过GetCommState()函数可以获得COM口的设备控制块,从而获得DCB中相关的参数。函数原型如下:
- BOOL GetCommState(
- HANDLE hFile, //标识通信端口的句柄
- LPDCB lpDCB //指向一个设备控制块(DCB结构)的指针
- );
而通过SetCommState()函数则可以设置COM口的设备控制块,函数原型如下:- BOOL SetCommState(
- HANDLE hFile,
- LPDCB lpDCB
- );
函数参数同GetCommState()。