前几篇串口编程大致讲述了Windows下串口的大致操作,接下来分析流行的SerialPort类,它把Windows API封装好,方便开发利用
1、Win32下串口大致操作流程
(1)打开串口:CreateFile函数
(2)建立串口通信事件:CreateEvent函数
(3)初始化串口:SetCommState函数
(4)建立监视线程,即读写数据线程,因为我们不知道什么时候数据会到来,这里是一个异步事件
(5)写数据:WriteFile
(6)结束:关闭线程->停止WaitCommEvent->CloseHandle
2.SerialPort类的数据结构
大致了解操作流程后,先看一下SerialPort类,均在代码注释了
数据成员:
函数成员:
3.串口操作
(1)初始化串口
流程:检查参数-->检测线程-->创建事件(监视线程)-->打开端口-->设置异步IO结构参数,详细见代码:
(2)监视线程的控制
先看比较简单的线程控制吧,主要有开启线程,复位和停止
(3)监视线程
我们把读写串口的操作全部交给监视线程,现在简单看一下监视线程的大致流程:
检查串口-->进入循环{WaitCommEvent(不阻塞询问)询问事件-->如果有事件来到-->到相应处理(关闭/读/写)}
详细代码如下:
(4)读取数据操作
读取数据是一个异步操作,当有数据发来时,会触发读事件m_ov.hEvent,监视线程捕捉到事件后并获知是读事件,进入相关读处理,这里调用函数ReceiveChar
,ReceiveChar中调用ReadFile函数将串口数据读到Buffer缓冲中,相关代码如下:
(5)写数据
也是由监视线程操作,不过触发事件交给主线程来触发,函数是WriteToPort
线程调用的函数WriteChar,把缓冲里的数据写到串口中,期间调用WriteFile
详细代码:
(6)其他操作
其他比如获取DCB,关闭等,比较简单,不做分析
代码如下:
好了,SerialPort代码分析到此为止,我水平有限,分析可能有不少问题,欢迎大家指
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/benny_cen/archive/2009/03/29/4033517.aspx