win32 api 串口编程.doc
《win32 api 串口编程.doc》由会员分享,可在线阅读,更多相关《win32 api 串口编程.doc(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、win32 api 串口编程分类:C/C+2007-11-22 14:191158人阅读评论(0)收藏举报一、基本知识 Win32下串口通信与16位串口通信有很大的区别。在Win32下,可以使用两种编程方式实现串口通信,其一是调用的Windows的API函数,其二 是使用ActiveX控件。使用API 调用,可以清楚地掌握串口通信的机制,熟悉各种配置和自由灵活采用不同的流控进行串口通信。下面介绍串口操作的基本知识。打开串口:使用CreateFile()函数,可以打开串口。有两种方法可以打开串口,一种是同步方式(NonOverlapped),另外一种异步方式(Overlapped)。使用Over
2、lapped打开时,适当的方法是: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(Device Control Block)结构定义了串口通信设备的控制设置。许多重要设置都是在DCB结构中设置的,有三种方式可以初始化DCB。(1)通过GetCommState()函数得DCB的初始值,其使用方式为
3、: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)/CouldntbuildtheDCB.Usuallyaproblem/
4、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)/Er
5、rorinSetCommState.Possiblyaproblemwiththecommunications/porthandleoraproblemwiththeDCBstructureitself.手动设置DCB值时,DCB的结构的各成员的含义,可以参看MSDN帮助。 2.流控设置 硬件流控:串口通信中的硬件流控有两种,DTE/DSR方式和RTS/CTS方式,这与DCB结构的初始化有关系,DCB结构中的 OutxCtsFlow、 fOutxDsrFlow、fDsrSensitivity、fRtsControl、fDtrControl几个成员的初始值很关键,不同的值代表不同 流控,也可以自
6、己设置流控,但建议采用标准流行的流控方式。采用硬件流控时,DTE、DSR、RTS、CTS的逻辑位直接影响到数据的读写及收发数据的缓 冲区控制。 软件流控:串口通信中采用特殊字符XON和XOFF作为控制串口数据的收发。与此相关的DCB成员是:fOut、fInX、XoffChar、 XonChar、 XoffLim和XonLim。具体含义参见MSDN帮助。 串口读写操作:串口读写有两种方式:同步方式(NonOverlapped)和异步方式(Overlapped)。同步方式是指必须完成了读写操作,函数 才返回,这可能造成程序死掉,因为如果在读写时发生了错误,永远不返回就会出错,可能线程将永远等待在那
7、儿。而异步方式则灵活得多,一旦读写不成功,就将 读写挂起,函数直接返回,可以通过GetLastError函数得知读写未成功的原因,所以常常采用异步方式操作。 读操作:ReadFile()函数用于完成读操作。异步方式的读操作为:DWORDdwRead;BOOLfWaitingOnRead=FALSE;OVERLAPPEDosReader=0;/Createtheoverlappedevent.Mustbeclosedbeforeexiting/toavoidahandleleak.osReader.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);if(osRea
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- win32 api 串口编程 串口 编程
限制150内