1、API叙述 在WIN32API中,串口用于文件方式展开采访,其操作者的API基本上与文件操作者的API完全一致。 关上串口 Win32中用作关上串口的API函数为CreateFile,其原型为:HANDLECreateFile( LPCTSTRlpFileName,//即将关上的串口逻辑名,如COM1或COM2 DWORDdwAccess,//登录串口采访的类型,可以是加载、载入或两者三大 DWORDdwShareMode,//登录分享属性,由于串口无法分享,该参数必需置为0 LPSECURITY_ATTRIBUTESlpsa,//提到安全性属性结构,缺省值为NULL DWORDdwCreate,//创立标志,对串口操作者该参数必需置为OPENEXISTING DWORDdwAttrsAndFlags,//属性叙述,用作登录该串口否可展开异步操作者, //FILE_FLAG_OVERLAPPED:可用于异步的I/O HANDLEhTemplateFile//指向模板文件的句柄,对串口而言该参数必需置为NULL); 例如,以下程序用作以实时读取方式关上串口COM1:HANDLEhCom;DWORDdwError;hCon=CreateFile(COM1,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);if(hCom==(HANDLE)0xFFFFFFFF){ dwError=GetLastError(); MessageBox(dwError);} 对于dwAttrsAndFlags参数及FILE_FLAG_OVERLAPPED标志的由来,可说明如下:Windows文件操作者分成实时I/O和重合I/O(OverlappedI/O)两种方式,在实时I/O方式中,API不会堵塞直到操作者已完成以后才能回到(在多线程方式中,虽然会堵塞主线程,但是依然不会堵塞监听线程);而在重合I/O方式中,API不会立刻回到,操作者在后台展开,防止线程的堵塞。重合I/O非常灵活,它也可以构建堵塞(例如我们可以设置一定要加载到一个数据才能展开到下一步操作者)。如果展开I/O操作者的API在没已完成操作者的情况下回到,我们可以通过调用GetOverLappedResult()函数堵塞到I/O操作者已完成后回到。
配备串口 配备串口是通过转变设备掌控块DCB(DeviceControlBlock)的成员变量值来构建的,接收缓冲区和发送缓冲区的大小可通过SetupComm函数来设置。 DCB结构体定义为:typedefstruct_DCB{//dcb DWORDDCBlength;//sizeof(DCB) DWORDBaudRate;//currentbaudrate DWORDfBinary:1;//binarymode,noEOFcheck DWORDfParity:1;//enableparitychecking DWORDfOutxCtsFlow:1;//CTSoutputflowcontrol DWORDfOutxDsrFlow:1;//DSRoutputflowcontrol DWORDfDtrControl:2;//DTRflowcontroltype DWORDfDsrSensitivity:1;//DSRsensitivity DWORDfTXContinueOnXoff:1;//XOFFcontinuesTx DWORDfOutX:1;//XON/XOFFoutflowcontrol DWORDfInX:1;//XON/XOFFinflowcontrol DWORDfErrorChar:1;//enableerrorreplacement DWORDfNull:1;//enablenullstripping DWORDfRtsControl:2;//RTSflowcontrol DWORDfAbortOnError:1;//abortreads/writesonerror DWORDfDummy2:17;//reserved WORDwReserved;//notcurrentlyused WORDXonLim;//transmitXONthreshold WORDXoffLim;//transmitXOFFthreshold BYTEByteSize;//numberofbits/byte,4-8 BYTEParity;//0-4=no,odd,even,mark,space BYTEStopBits;//0,1,2=1,1.5,2 charXonChar;//TxandRxXONcharacter charXoffChar;//TxandRxXOFFcharacter charErrorChar;//errorreplacementcharacter charEofChar;//endofinputcharacter charEvtChar;//receivedeventcharacter WORDwReserved1;//reserved;donotuse}DCB;而SetupComm函数的原型则为:BOOLSetupComm( HANDLEhFile,//handletocommunicationsdevice DWORDdwInQueue,//sizeofinputbuffer DWORDdwOutQueue//sizeofoutputbuffer); 以下程序将串口设置为:波特率为9600,数据位数为7位,暂停位为2位,极校验,接收缓冲区和发送缓冲区大小皆为1024个字节,最后用PurgeComm函数中止所有的后台读写操作并清空接收缓冲区和发送缓冲区:DCBdcb;dcb.BaudRate=9600;//波特率为9600dcb.ByteSize=7;//数据位数为7位dcb.Parity=EVENPARITY;//极校验dcb.StopBits=2;//两个暂停位dcb.fBinary=TRUE;dcb.fParity=TRUE;if(!SetCommState(hCom,dcb)){ MessageBox(串口设置错误!。
本文关键词:皇冠,crown,官网,深入浅出,VC++,串口,编程,之,、,皇冠crown官网
本文来源:皇冠crown官网-www.jmbnewsonline.com