原创 串口编程之一: WIN32 API 中串口DCB 结构的介绍

2013-5-9 14:49 6259 21 22 分类: 消费电子

在应用WIN32  API 对串口进行编程时, 必定会使用到DCB 结构. 下面的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;                             停止位的设置
2. 流控制(Flow Control) 的设置
     流控制分为硬件流控制和软件流控制。 而硬件流控制又分为RTS/CTS和DTR/DSR两种。而软件流控制, 则是Xon/Xoff。 
     DTR/DSR 硬件流控制:
     1) DWORD fOutxDsrFlow:1;            TRUE时,支持DSR流控制。 当DSR为OFF时,停止发送。
     2) DWORD fDtrControl:2;                DTR设置。 (置高/置低...)    

fDTRControl DTR_CONTROL_Disable :  使DTR为 off.
DTR_CONTROL_Enable :  使DTR 为 on. 
DTR_CONTROL_HANDSHAKE : DTR 硬件流控.

     3) DWORD fDsrSensitivity:1;           TRUE时,当DSR为OFF,则接收端忽略所有字符。  

     RTS/CTS 硬件流控制:
     4) DWORD fOutxCtsFlow:1;            TRUE时,支持CTS流控制。 当CTS为OFF时,停止发送。
     5) DWORD fRtsControl:2;               RTS设置。 (置高/置低...)                                                                  

fRTSControl RTS_CONTROL_DISABLE : 使RTS保持 off
RTS_CONTROL_ENABLE : 使RTS保持on
RTS_CONTROL_HANDSHAKE :  RTS 硬件流控
RTS_CONTROL_TOGGLE : 485通讯RTS自动流控

     
     Xon/Xoff 软件流控制:
     6) DWORD fOutX: 1;                       发送端支持Xon/Xoff。收到Xoff停止发送,收到Xon重新开始
     7) DWORD fInX: 1;                         接收端支持Xon/Xoff。当FIFO中字节超过XoffLim时发送Xoff, 当FIFO中少于XonLim时发送Xon. 
     8) WORD XonLim;                          当接收Buffer中的字符减少到XonLim规定的字符数, 就发送Xon字符,让对方继续发送。
     9) WORD XoffLim;                          接收Buffer达到XoffLim规定的字符数, 就发送Xoff字符, 让对方停止发送。
     10)char XonChar;                          Xon 字符。 
     11)char XoffChar;                          Xoff 字符。
     12)DWORD fTXContinueOnXoff:1TRUE时,不管接收端是否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;                 保留


下一篇:

 

文章评论1条评论)

登录后参与讨论

用户1277994 2010-4-13 11:10

看到了,在这里。

用户1277994 2010-4-6 13:03

人生就是一首歌,但哥却要享受寂寞!

用户1536784 2010-4-6 11:39

人啊,人!这是一本书冷酷

相关推荐阅读
用户1398176 2013-05-09 17:23
串口编程之五:常用函数
在进行串口通信时,经常需要用到下列一些API函数: CreateFile():用于打开一个文件访问串口; GetCommState():获取串口的当前配置,放入DCB中; SetCom...
用户1398176 2013-05-09 16:55
串口编程之三:COMSTAT 结构
COMSTAT结构 COMSTAT结构包含串口的信息,结构定义如下: typedef struct _COMSTAT { // cst     DWORD fCtsHold : 1;   /...
用户1398176 2013-05-09 15:47
转载至MSDN: CE_OVERRUN
  CE_OVERRUN Errors with Serial Communications   *******> The communications driver (...
用户1398176 2012-04-05 18:37
6西格玛
今天碰到一些缩写, 不清楚什么意思, 上网查了查,是6西格玛的。 记录下来, 免得以后忘了。 OOB: out of box,  开箱检查.             在产线完工后,出货前,作...
用户1398176 2010-11-07 19:32
签入(check in) 与 签出(check out)
        在一个团队共同合作完成一个项目时, 很多文件是大家共享, 且具有修改权限的。 而一般如果你在修改某一个文件的时候, 在没有修改完成之前, 你是不希望别人也在这个时候修改这个文件的.  ...
我要评论
1
21
关闭 站长推荐上一条 /2 下一条