
串口编程dcb结构体参数配置详细说明.doc
5页DWORD DCBlength; sizeof(DCB)DWORD BaudRate; current baud rate 指定当前的波特率DWORD fBinary: 1; binary mode, no EOF check 指定是否允许二进制模式WIN95 中须为 TRUEDWORD fParity: 1; enable parity checking 指定奇偶校验是否允许DWORD fOutxCtsFlow:1; CTS output flow control 指定 CTS 是否用于检测发送控制当为 TRUE 时 CTS 为 // OFF,发送将被挂起 (发送清楚)DWORD fOutxDsrFlow:1; DSR output flow control 指定 CTS 是否用于检测发送控制 (数据装备好)当为 TRUE 是 CTS 为 OFF,发送将被挂起DWORD fDtrControl:2; DTR flow control type//DTR_CONTROL_DISABLE 值将 DTR 置为 OFF,//DTR_CONTROL_ENABLE 值将 DTR 置为 ON, //DTR_CONTROL_HANDSHAKE 允许 DTR"握手DWORD fDsrSensitivity:1; DSR sensitivity 当该值为 TRUE 时 DSR 为 OFF 时接收的字节被忽略DWORD fTXContinueOnXoff:1;XOFF continues Tx指定当接收缓冲区已满,并且驱动程序已经发送出XoffChar 字符时发送是否停止。
TRUE 时,在接收缓冲区接收到缓冲区已满的字节XoffLim 且驱动程序已经发送出 XoffChar 字 符中止接收字节之后,发送继续进行FALSE 时,在接收缓冲区接收到代表缓冲区已空的字节 XonChar 且驱动程序已经发送出恢复发送的XonChar 之后,发送继续进行DWORD fOutX: 1; XON/XOFF out flow control //TRUE 时,接收到 XoffChar 之后便停止发送//FALSE 时,接收到 XonChar 之后将重新开始DWORD fInX: 1; // XON/XOFF in flow controlTRUE 时,接收缓冲区接收到代表缓冲区满的 XoffLim之后,XoffChar 发送出去接收缓冲区接收到代表缓冲区空的 XonLim 之后,XonChar 发送出去DWORD fErrorChar: 1; // enable error replacement该值为 TRUE 且 fParity 为 TRUE 时,用 ErrorChar 成员指定的字符代替奇偶校验错误的接收字符DWORD fNull: 1; // enable null stripping TRUE 时,接收时去掉空(0 值)字节DWORD fRtsControl:2; RTS flow controlDWORD fAbortOnError:1; abort reads/writes on error TRUE 时,有错误发生时中止读和写操作RTS_CONTROL_DISABLE 时,RTS 置为 OFFRTS_CONTROL_ENABLE 时, RTS 置为 ONRTS_CONTROL_HANDSHAKE 时,当接收缓冲区小于半满时 RTS 为 ON当接收缓冲区超过四分之三满时 RTS 为 OFFRTS_CONTROL_TOGGLE 时,当接收缓冲区仍有剩余字节时 RTS 为 ON ,否则缺省为OFFDWORD fDummy2:17; reserved 未使用WORD wReserved; not currently used 未使用,必须为 0WORD XonLim; // transmit XON threshold指定在 XON 字符发送这前接收缓冲区中可允许的最小字节数WORD XoffLim; // transmit XOFF threshold指定在 XOFF 字符发送这前接收缓冲区中可允许的最小字节数BYTE ByteSize; number of bits/byte, 4-8 指定端口当前使用的数据位BYTE Parity; // 0-4=no,odd,even,mark,space 指定端口当前使用的奇偶校验方法,可能为:EVENPARITY,MARKPARITY,NOPARITY,ODDPARITYBYTE StopBits; 0,1,2 = 1, 1.5, 2 指定端口当前使用的停止位数,可能为:ONESTOPBIT,ONE5STOPBITS,TWOSTOPBITSchar XonChar; // Tx and Rx XON character 指定用于发送和接收字符 XON 的值char XoffChar; Tx and Rx XOFF character 指定用于发送和接收字符 XOFF 值char ErrorChar; // error replacement character 本字符用来代替接收到的奇偶校验发生错误时的值char EofChar; // end of input character 当没有使用二进制模式时, 本字符可用来指示数据的结束char EvtChar; // received event character 当接收到此字符时,会产生一个事件WORD wReserved1; // reserved; do not use 未使用在这个结构中, 共有 28 个变量, 我把这些成员归类为几种. 1. 串口的基本设置1) DWORD BaudRate; 波特率设置。
2) BYTE ByteSize; 数据位设置3) DWORD fParity: 1; TRUE 时, 支持奇偶检验4) BYTE Parity; 奇偶检验位的设置5) BYTE StopBits; 停止位的设置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 软件流控制: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; 保留在 WIN32 API 编程中,除了 DCB 结构之外, 还需要了解 COMMTIMEOUTS 结构.这个结构是为了读写串口的超时而设置的. COMMTIMEOUTS 结构如下: typedef struct _COMMTIMEOUTS { DWORD ReadIntervalTimeout; //任意相邻连个字符之间的超时设置DWORD ReadTotalTimeoutMultiplier; //读操作总的超时时间的系数 DWORD ReadTotalTimeoutConstant; //读操作总的超时时间的修正常量 DWORD WriteTotalTimeoutMultiplier; //写操作总的超时时间的系数DWORD WriteTotalTimeoutConstant; //写操作总的超时时间的修正常量} COMMTIMEOUTS,*LPCOMMTIMEOUTS; ReadIntervalTimeout:两相邻字符之间最大的延时。
当读串口数据时,一旦两个字符传输的时间间隔超过该时间,读函数将返回现有的数据设置为 0 表示该参数不起作用ReadTotalTimeoutMultiplier:读操作总的超时事件的系数 这个变量是不能单独使用的 必须和 ReadTotalTimeoutConstant 一起使用才有效果 ReadTotalTimeoutConst。