使用win32api实现windows下异步串口通讯

使用win32api实现windows下异步串口通讯

ID:32405593

大小:92.00 KB

页数:25页

时间:2019-02-04

使用win32api实现windows下异步串口通讯_第1页
使用win32api实现windows下异步串口通讯_第2页
使用win32api实现windows下异步串口通讯_第3页
使用win32api实现windows下异步串口通讯_第4页
使用win32api实现windows下异步串口通讯_第5页
资源描述:

《使用win32api实现windows下异步串口通讯》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、使用Win32API实现Windows下异步串口通讯关键词:Win32API  串口通讯                                        使用Win32API实现Windows下异步串口通讯(上)--                                      目录:1.异步非阻塞串口通讯的优点2.异步非阻塞串口通讯的基本原理3.异步非阻塞串口通讯的基础知识4.异步非阻塞串口通讯的实现步骤2005.01.05一,异步非阻塞串口通讯的优点读写串行口时,既可以同

2、步执行,也可以重叠(异步)执行。在同步执行时,函数直到操作完成后才返回。这意味着在同步执行时线程会被阻塞,从而导致效率下降。在重叠执行时,即使操作还未完成,调用的函数也会立即返回。费时的I/O操作在后台进行,这样线程就可以干别的事情。例如,线程可以在不同的句柄上同时执行I/O操作,甚至可以在同一句柄上同时进行读写操作。"重叠"一词的含义就在于此。二,异步非阻塞串口通讯的基本原理首先,确定要打开的串口名、波特率、奇偶校验方式、数据位、停止位,传递给CreateFile()函数打开特定串口;其次,为了保护

3、系统对串口的初始设置,调用GetCommTimeouts()得到串口的原始超时设置;然后,初始化DCB对象,调用SetCommState()设置DCB,调用SetCommTimeouts()设置串口超时控制;再次,调用SetupComm()设置串口接收发送数据的缓冲区大小,串口的设置就基本完成,之后就可以启动读写线程了。三,异步非阻塞串口通讯的基础知识下面来介绍并举例说明一下编写异步非阻塞串口通讯的程序中将会使用到的几个关键函数CreateFile()功能:打开串口设备函数原型HANDLECreate

4、File(LPCTSTRlpFileName,//串口名称字符串;如:"COM1"或"COM2"DWORDdwDesiredAccess,//设置读写属性(访问模式);一般为GENERIC_READ

5、GENERIC_WRITE,DWORDdwShareMode,//共享模式;"必须"为0,即不能共享LPSECURITY_ATTRIBUTESlpSecurityAttributes,//安全属性;一般为NULLDWORDdwCreationDistribution,//创建方式,串口设置必须设置此值;在

6、这里"必须"为OPEN_EXISTINGDWORDdwFlagsAndAttributes,//文件属性和标志;在这里我们设置成FILE_FLAG_OVERLAPPED,实现异步I/OHANDLEhTemplateFile//临时文件的句柄,通常为NULL );说明:如果调用成功,那么该函数返回文件的句柄,如果调用失败,则函数返回INVALID_HANDLE_VALUE。Forexample:Handlem_hComm=CreateFile(com1,GENERIC_READ

7、

8、GENERIC_WRI

9、TE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);CloseHandle();功能:关闭串口BOOLCloseHandle(HANDLEhObject//handletoobjecttoclose)这个,我想就不多说了吧!GetCommState()功能:获得串口状态BOOLGetCommState(HANDLEhFile,//handleofcommunicationsdeviceLPDCBlpDCB//addressofdevice-controlbl

10、ockstructure);SetCommState()功能:设置串口状态 BOOLSetCommState(HANDLEhFile,//handleofcommunicationsdeviceLPDCBlpDCB//addressofdevice-controlblockstructure);说明:在打开通信设备句柄后,常常需要对串行口进行一些初始化工作。这需要通过一个DCB结构来进行。DCB结构包含了诸如波特率、每个字符的数据位数、奇偶校验和停止位数等信息。在查询或配置置串行口的属性时,都要用DC

11、B结构来作为缓冲区。调用GetCommState函数可以获得串口的配置,该函数把当前配置填充到一个DCB结构中。一般在用CreateFile打开串行口后,可以调用GetCommState函数来获取串行口的初始配置。要修改串行口的配置,应该先修改DCB结构,然后再调用SetCommState函数用指定的DCB结构来设置串行口Forexample:DCBdcb;memset(&dec,0,dizeof(dcb));if(!GetCommState(HComm

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。