资源描述:
《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