Windows串口编程

Windows串口编程

ID:37899464

大小:25.00 KB

页数:4页

时间:2019-06-02

Windows串口编程_第1页
Windows串口编程_第2页
Windows串口编程_第3页
Windows串口编程_第4页
资源描述:

《Windows串口编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Windows串口编程2008-03-1213:36一、基本知识  Win32下串口通信与16位串口通信有很大的区别。在Win32下,可以使用两种编程方式实现串口通信,其一是调用的Windows的API函数,其二是使用ActiveX控件。使用API调用,可以清楚地掌握串口通信的机制,熟悉各种配置和自由灵活采用不同的流控进行串口通信。下面介绍串口操作的基本知识。  打开串口:使用CreateFile()函数,可以打开串口。有两种方法可以打开串口,一种是同步方式(NonOverlapped),另外一种异步方

2、式(Overlapped)。使用Overlapped打开时,适当的方法是:HANDLEhComm;hComm=CreateFile(gszPort,GENERIC_READ

3、GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);if(hComm==INVALID_HANDLE_VALUE)//erroropeningport;abort  配置串口:  1.DCB配置  DCB(DeviceControlBlock)结构定义了串口通信设备的控制设

4、置。许多重要设置都是在DCB结构中设置的,有三种方式可以初始化DCB。  (1)通过GetCommState()函数得DCB的初始值,其使用方式为:DCBdcb={0};if(!GetCommState(hComm,&dcb))//ErrorgettingcurrentDCBsettingselse//DCBisreadyforuse.  (2)用BuildCommDCB()函数初始化DCB结构,该函数填充DCB的波特率、奇偶校验类型、数据位、停止位。对于流控成员函数设置了缺省值。其用法是:DCBdcb

5、;FillMemory(&dcb,sizeof(dcb),0);dcb.DCBlength=sizeof(dcb);if(!BuildCommDCB(“9600,n,8,1",&dcb)){//Couldn'tbuildtheDCB.Usuallyaproblem//withthecommunicationsspecificationstring.returnFALSE;}else//DCBisreadyforuse.  (3)用SetCommState()函数手动设置DCB初值。用法如下:DCBdcb

6、;FillMemory(&dcb,sizeof(dcb),0);if(!GetCommState(hComm,&dcb))//getcurrentDCB//ErrorinGetCommStatereturnFALSE;//UpdateDCBrate.dcb.BaudRate=CBR_9600;//Setnewstate.if(!SetCommState(hComm,&dcb))//ErrorinSetCommState.Possiblyaproblemwiththecommunications//por

7、thandleoraproblemwiththeDCBstructureitself.  手动设置DCB值时,DCB的结构的各成员的含义,可以参看MSDN帮助。  2.流控设置  硬件流控:串口通信中的硬件流控有两种,DTE/DSR方式和RTS/CTS方式,这与DCB结构的初始化有关系,DCB结构中的OutxCtsFlow、fOutxDsrFlow、fDsrSensitivity、fRtsControl、fDtrControl几个成员的初始值很关键,不同的值代表不同流控,也可以自己设置流控,但建议采用标

8、准流行的流控方式。采用硬件流控时,DTE、DSR、RTS、CTS的逻辑位直接影响到数据的读写及收发数据的缓冲区控制。  软件流控:串口通信中采用特殊字符XON和XOFF作为控制串口数据的收发。与此相关的DCB成员是:fOut、fInX、XoffChar、XonChar、XoffLim和XonLim。具体含义参见MSDN帮助。  串口读写操作:串口读写有两种方式:同步方式(NonOverlapped)和异步方式(Overlapped)。同步方式是指必须完成了读写操作,函数才返回,这可能造成程序死掉,因为如

9、果在读写时发生了错误,永远不返回就会出错,可能线程将永远等待在那儿。而异步方式则灵活得多,一旦读写不成功,就将读写挂起,函数直接返回,可以通过GetLastError函数得知读写未成功的原因,所以常常采用异步方式操作。  读操作:ReadFile()函数用于完成读操作。异步方式的读操作为:DWORDdwRead;BOOLfWaitingOnRead=FALSE;OVERLAPPEDosReader={0};//Createtheoverla

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。