………
//波特率,指定通信设备的传输速率.这个成员可以是实际波特率值或者下面的常量值之一:
DWORD BaudRate;
//CBR_110,CBR_300,CBR_600,CBR_1200,CBR_2400,CBR_4800,CBR_9600,CBR_19200, //CBR_38400,
//CBR_56000,CBR_57600,CBR_115200,CBR_128000,CBR_256000,CBR_14400 DWORD fParity;//指定奇偶校验使能.若此成员为1,允许奇偶校验检查 …
BYTE ByteSize;//通信字节位数,4—8
BYTE Parity;//指定奇偶校验方法.此成员可以有下列值: //EVENPARITY 偶校验 NOPARITY 无校验 //MARKPARITY 标记校验 ODDPARITY 奇校验 BYTE StopBits;//指定停止位的位数.此成员可以有下列值: //ONESTOPBIT 1位停止位 TWOSTOPBITS 2位停止位 //ONE5STOPBITS 1.5位停止位 ……… } DCB;
在winbase.h文件中定义了以上用到的常量.如下所示:
#define NOPARITY 0 #define ODDPARITY 1 #define EVENPARITY 2 #define ONESTOPBIT 0 #define ONE5STOPBITS 1 #define TWOSTOPBITS 2 #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
GetCommState函数可以获得COM口的设备控制块,从而获得相关参数: BOOL GetCommState(
HANDLE hFile, //标识通讯端口的句柄
LPDCB lpDCB //指向一个设备控制块(DCB结构的指针 ;
SetCommState函数设置COM口的设备控制块: BOOL SetCommState( HANDLE hFile, LPDCB lpDCB ;
除了在BCD中的设置外,程序一般还需要设置I/O缓冲区的大小和超
时.Windows 用I/O缓冲区来暂存串口输入和输出的数据.如果通信的速率较高,则应该设置较大的缓冲区.调用SetupComm函数可以设置串行口的输入和输出缓冲区的大小.
BOOL SetupComm(
HANDLE hFile, // 通信设备的句柄
DWORD dwInQueue, // 输入缓冲区的大小(字节数 DWORD dwOutQueue // 输出缓冲区的大小(字节数
;
在用ReadFile和WriteFile读写串行口时,需要考虑超时问题.超时的作用是在指定的时间内没有读入或发送指定数量的字符,ReadFile或WriteFile的操作仍然会结束.
要查询当前的超时设置应调用GetCommTimeouts函数,该函数会填充一个COMMTIMEOUTS结构.调用SetCommTimeouts可以用某一个COMMTIMEOUTS结构的内容来设置超时.
读写串口的超时有两种:间隔超时和总超时.间隔超时是指在接收时两个字符之间的最大时延.总超时是指读写操作总共花费的最大时间.写操作只支持总超时,而读操作两种超时均支持.用COMMTIMEOUTS结构可以规定读写操作的超时.
COMMTIMEOUTS结构的定义为: typedef struct _COMMTIMEOUTS { DWORD ReadIntervalTimeout;//读间隔超时 DWORD ReadTotalTimeoutMultiplier;//读时间系数 DWORD ReadTotalTimeoutConstant;//读时间常量 DWORD WriteTotalTimeoutMultiplier;//写时间系数 DWORD WriteTotalTimeoutConstant;//写时间常量 } COMMTIMEOUTS,*LPCOMMTIMEOUTS;
COMMTIMEOUTS结构的成员都以毫秒为单位.总超时的计算公式是: 总超时=时间系数×要求读/写的字符数+时间常量
例如要读入10个字符,那么读操作的总超时的计算公式为:
相关推荐: