如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
HYPERLINK"http://blog.csdn.net/realduke2000/article/details/1897776"\o"win32api串口编程"win32api串口编程分类:HYPERLINK"http://blog.csdn.net/realduke2000/article/category/344932"C/C++2007-11-2214:191158人阅读HYPERLINK"http://blog.csdn.net/realduke2000/article/details/1897776"\l"comments"评论(0)HYPERLINK"javascript:void(0);"\o"收藏"收藏HYPERLINK"http://blog.csdn.net/realduke2000/article/details/1897776"\l"report"\o"举报"举报一、基本知识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))//ErrorgettingcurrentDCBsettingselse//DCBisreadyforuse.(2)用BuildCommDCB()函数初始化DCB结构,该函数填充DCB的波特率、奇偶校验类型、数据位、停止位。对于流控成员函数设置了缺省值。其用法是:DCBdcb;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;FillMemory(&dcb,sizeof(dcb),0);if(!GetCommState(hComm,&dcb))//getcurrentDCB//ErrorinGetCommStatereturnFALSE;//UpdateDCBrate.dcb.BaudRate=CBR_9600;//Setnewstate.if(!SetCommState(hComm,&dcb))//ErrorinSetCommState.Possiblyaproblemwiththecommunications//porthandleoraproblemwiththeDCBstructureitself.手动设置DCB值时,DCB的结构的各成员的含义,可以参看MSDN帮助。2.流控设置硬件流控:串口通信中的硬件流控有两种,DTE/DSR方式和RTS/CTS方式,这与DCB结构的初始化有关系,DCB结构中的OutxCtsFlow、fOutxDsrFlow、fDsrSensitivity、fRtsControl、fDtrControl几个成员的初始值很关键,不同的值代表不同流控,也可以自己设置流控,但建议采用标准流行的流控方式。采用硬件流控时,DTE、DSR、RTS、CTS的逻辑位直接影响到数据的读写及收发数据的缓冲区控制。软件流控:串口通信中采用特殊字符XON和XOFF作为控