Win32串口编程 Win32下串口通信与16位串口通信有相当大的区别。在Win32下,可以用于两种编程方式构建串口通信,其一是调用的Windows的API函数,其二是用于ActiveX控件。
用于API调用,可以确切地掌控串口通信的机制,熟知各种配备和权利灵活性使用有所不同的流控展开串口通信。下面讲解串口操作者的基本知识。 关上串口:用于CreateFile()函数,可以关上串口。
有两种方法可以关上串口,一种是实时方式(NonOverlapped),另外一种异步方式(Overlapped)。用于Overlapped关上时,必要的方法是: HANDLEhComm; hComm=CreateFile(gszPort,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0); if(hComm==INVALID_HANDLE_VALUE) //erroropeningport;abort 配备串口: 1.DCB配备 DCB(DeviceControlBlock)结构定义了串口通信设备的掌控设置。许多最重要设置都是在DCB结构中设置的,有三种方式可以初始化DCB。
(1)通过GetCommState()函数得DCB的初始值,其用于方式为: DCBdcb={0}; if(!GetCommState(hComm,&dcb)) //ErrorgettingcurrentDCBsettings else //DCBisreadyforuse. (2)用BuildCommDCB()函数初始化DCB结构,该函数填满DCB的波特率、奇偶校验类型、数据位、暂停位。对于流控成员函数设置了缺省值。其用法是: DCBdcb; FillMemory(&dcb,sizeof(dcb),0); dcb.DCBlength=sizeof(dcb); if(!BuildCommDCB(9600,n,8,1,&dcb)){ //CouldntbuildtheDCB.Usuallyaproblem //withthecommunicationsspecificationstring. returnFALSE; } else //DCBisreadyforuse. (3)用SetCommState()函数手动设置DCB初值。
用法如下: DCBdcb; FillMemory(&dcb,sizeof(dcb),0); if(!GetCommState(hComm,&dcb))//getcurrentDCB //ErrorinGetCommState returnFALSE; //UpdateDCBrate. dcb.BaudRate=CBR_9600; //Setnewstate. if(!SetCommState(hComm,&dcb)) //ErrorinSetCommState. Possiblyaproblemwiththecommunications //porthandleoraproblemwiththeDCBstructureitself. 手动设置DCB值时,DCB的结构的各成员的含义,可以参见MSDN协助。
本文来源:易币付官方网站-www.etiwari.com