在应用WIN32 API 对串口进行编程时, 必定使用到 DCB 结构体.
转载链接
一、首先是DCB 结构
typedef struct _DCB {
DWORD DCBlength;
DWORD BaudRate;
DWORD fBinary: 1;
DWORD fParity: 1;
DWORD fOutxCtsFlow:1;
DWORD fOutxDsrFlow:1;
DWORD fDtrControl:2;
DWORD fDsrSensitivity:1;
DWORD fTXContinueOnXoff:1;
DWORD fOutX: 1;
DWORD fInX: 1;
DWORD fErrorChar: 1;
DWORD fNull: 1;
DWORD fRtsControl:2;
DWORD fAbortOnError:1;
DWORD fDummy2:17;
WORD wReserved;
WORD XonLim;
WORD XoffLim;
BYTE ByteSize;
BYTE Parity;
BYTE StopBits;
char XonChar;
char XoffChar;
char ErrorChar;
char EofChar;
char EvtChar;
WORD wReserved1;
} DCB;
二、在这个结构中,共有28个变量, 这些成员归类为几种.
1.串口的基本设置
(1)DWORD BaudRate; 波特率设置。
(2)BYTE ByteSize; 数据位设置。
(3)DWORD fParity: 1; TRUE时, 支持奇偶检验。
(4)BYTE Parity; 奇偶检验位的设置
(5)BYTE StopBits; 停止位的设置
StopBits指定端口当前使用的停止位数,可取值:
取值 意义
ONESTOPBIT 1停止位
ONE5STOPBITS 1.5停止位
TWOSTOPBITS 2停止位
RS232的停止位为什么可以为1,1.5或2;搞不懂1.5是什么意思?
解释:1.5停止位,是指停止位的“1”电平宽度的保持为1.5个单位时间长,一个单位时间就是波特率的倒数,例如波特率为9600bps,则一个单位时间长为1/9600s,1.5个停止位,即停止位电平保持1.5/9600s
2.流控制(Flow Control) 的设置
流控制分为硬件流控制和软件流控制。 而硬件流控制又分为RTS/CTS和DTR/DSR两种。而软件流控制, 则是Xon/Xoff。
DTR/DSR 硬件流控制:
(1)DWORD fOutxDsrFlow:1; TRUE时,支持DSR流控制。 当DSR为OFF时,停止发送。
(2)DWORD fDtrControl:2; DTR设置。 (置高/置低…)
(3)DWORD fDsrSensitivity:1; TRUE时,当DSR为OFF,则接收端忽略所有字符。
RTS/CTS 硬件流控制:
(4)DWORD fOutxCtsFlow:1; TRUE时,支持CTS流控制。 当CTS为OFF时,停止发送。
(5)DWORD fRtsControl:2; RTS设置。 (置高/置低…)
Xon/Xoff 软件&emsp&emsp流控制:
(6)DWORD fOutX: 1; 发送端支持Xon/Xoff。
(7)DWORD fInX: 1; 接收端支持Xon/Xoff。
(8)WORD XonLim; 当接收Buffer中的字符减少小XonLim规定的字符数, 就发送Xon字符,让对方继续发送。
(9)WORD XoffLim; 接收Buffer达到XoffLim规定的字符数, 就发送Xoff字符, 让对方停止发送。
(10)char XonChar; Xon 字符。
(11)char XoffChar; Xoff 字符。
(12)DWORD fTXContinueOnXoff:1; TRUE时,不管接收端是否Xoff, 本方发送端持续发送。 (也就是本方的发送端, 与本方接收端Xon/Xoff是相互独立的)。若为False 时,则当接收端buffer 达到XoffLim时,发送端发送完Xoff字符后,就停止发送。
3. Error 情况处理
(1)DWORD fErrorChar: 1; TRUE时,若fParity为TRUE, 则用ErrorChar替换Parity Check错误的字符。
(2)DWORD fAbortOnError:1; TRUE时,发生错误时停止读写操作。
(3)char ErrorChar; Parity Check 错误时,替换的字符。
4. 其他参数
(1)DWORD DCBlength; DCB结构的长度(以字节为单位)
(2)DWORD fBinary: 1; 二进制模式。(必须为1 )
(3)DWORD fNull: 1; TRUE时,接收时去掉空字节(0x0)
(4)char EofChar; EOF替代字符
(5)char EvtChar; 事件触发字符
(6)DWORD fDummy2:17; 保留
(7)WORD wReserved; 保留
(8)WORD wReserved1; 保留
三、配置例程
DCB dcb; //串口DCB结构体
GetCommState(hCom,&dcb); //读取串口设置(波特率,校验,停止位,数据位等).
dcb.BaudRate=9600; //设置波动率9600
dcb.ByteSize=8; //数据长度8位
dcb.Parity=NOPARITY; //无校验位
dcb.StopBits=TWOSTOPBITS; //2停止位
SetCommState(hCom,&dcb); //设置COM口的设备控制块