资源描述:
《调用Windows的API函数串口编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、API串口通信部分1.串口的操作可以有两种操作方式:同步操作方式和重叠操作方式(又称为异步操作方式)。同步操作时,API函数会阻塞直到操作完成以后才能返回(在多线程方式中,虽然不会阻塞主线程,但是仍然会阻塞监听线程);而重叠操作方式,API函数会立即返回,操作在后台进行,避免线程的阻塞。2.一般都通过四个步骤来完成:打开串口,配置串口,读写串口,关闭串(1)打开串口11.CreateFile来打开或创建的。该函数的原型为:HANDLECreateFile(LPCTSTRlpFileName,//将要打开的串口逻辑名,如“COM1”;
2、DWORDdwDesiredAccess,//指定串口访问的类型,可以是读取写入或二者并列;DWORDdwShareMode,//指定共享属性,由于串口不能共享,该参数必须置为0; LPSECURITY_ATTRIBUTESlpSecurityAttributes,//引用安全性属性结构,缺省值为NULL; DWORDdwCreationDistribution,//创建标志,对串口操作该参数必须置为OPEN_EXISTING;DWORDdwFlagsAndAttributes,//属性描述,用于指定该串口是否进行异步
3、操作,该值为FILE_FLAG_OVERLAPPED,//表示使用异步的I/O;该值为0,表示同步I/O操作;HANDLEhTemplateFile);//对串口而言该参数必须置为NULL;12.同步I/O方式打开串口的示例代码:HANDLEhCom; //全局变量,串口句柄 hCom=CreateFile("COM1",//COM1口 GENERIC_READ
4、GENERIC_WRITE,//允许读和写 0,//独占方式 NULL, OPEN_EXISTING,//打开而不是创建 0,//同步方式 NULL); if(hCom==(HAN
5、DLE)-1) { AfxMessageBox("打开COM失败!"); returnFALSE; } returnTRUE;13.异步I/O方式打开串口的示例代码:HANDLEhCom; //全局变量,串口句柄 hCom=CreateFile("COM1", //COM1口 GENERIC_READ
6、GENERIC_WRITE,//允许读和写 0, //独占方式 NULL, OPEN_EXISTING, //打开而不是创建 FILE_AT
7、TRIBUTE_NORMAL
8、FILE_FLAG_OVERLAPPED,//重叠方式 NULL); if(hCom==INVALID_HANDLE_VALUE) { AfxMessageBox("打开COM失败!"); returnFALSE; } returnTRUE;(2)配置串口21.需要一个DCB结构。DCB结构包含了诸如波特率、数据位数、奇偶校验和停止位数等信息。在查询或配置串口的属性时,都要用DCB结构来作为缓冲区。(结构详见后)22.一般用CreateFile打开串口后,可以调用GetCommState函数来
9、获取串口的初始配置。GetCommState函数可以获得COM口的设备控制块,从而获得相关参数:BOOLGetCommState( HANDLEhFile,//标识通讯端口的句柄 LPDCBlpDCB//指向一个设备控制块(DCB结构)的指针 );23.要修改串口的配置,应该先修改DCB结构,然后再调用SetCommState函数设置串口。SetCommState函数设置COM口的设备控制块:BOOLSetCommState( HANDLEhFile, LPDCBlpDCB );24.程序一般还需要设置I/O缓冲区的大小和超时。Windows用
10、I/O缓冲区来暂存串口输入和输出的数据。如果通信的速率较高,则应该设置较大的缓冲区。调用SetupComm函数可以设置串行口的输入和输出缓冲区的大小。BOOLSetupComm( HANDLEhFile, //通信设备的句柄 DWORDdwInQueue, //输入缓冲区的大小(字节数) DWORDdwOutQueue //输出缓冲区的大小(字节数) );25.在读写串口之前,要用PurgeComm()函数清空缓冲区,该函数原型:BOOLPurgeComm(HANDLEhFile, //串口句柄 DWORDdwFlags //需要完成
11、的操作:PURGE_TXABORT 中断所有写操作并立即返回,即使写操作还没有完成。PURG