串口DCB定义,配置例程

在应用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口的设备控制块
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值