论文首页哲学论文经济论文法学论文教育论文文学论文历史论文理学论文工学论文医学论文管理论文艺术论文 |
4.3串口功能设计
4.3.1 串口通信协议
串口通信协议采用CCESeries类实现,通过对此类的成员函数的调用,完成对串口的初始化、读写操作等,在不用串口的情况下,还可以关闭串口。
4.3.2 软件的实现
在Visual Studio的解决方案视图里添加类CCESeries,如图4-7所示。CCESeries类的成员函数如表4-2所示。
图4-7 在VS2005中建立CCESeries类
表4-2 串口操作类CCESeries的成员函数
表4-3 串口操作类CCESeries的成员变量
4.2.2.1 打开串口与配置串口
在Windows CE中,驱动程序分为本地设备驱动和流设备驱动两种[6]。本地设备如键盘、触摸屏等,一般在设备生产后是不会再更换的,相应的驱动这些设备的驱动程序也是必需的。而流接口设备驱动程序可以由第三方提供,支持另外添加到系统中的设备。而串口就属于流接口设备之一。
流设备驱动在系统中是以三位字符串后跟一位数字表示的,对于串口而言,这三位字符是“COM”(不包括引号)。当引用一个流接口驱动程序时,除了三位字符后跟一位数字以外,还要紧跟一个冒号“:”(英文半角冒号),冒号是必需的,是为了区别桌面Windows的设备驱动程序的命名规则。
该函数的流程图如图4-8所示:
图4-8 OpenPort函数流程图
(1)串口的打开所有的流驱动程序都将采用CreateFile函数打开串口设备。在Windows CE下,系统不支持设备的重叠I/O,所以不能在参数dwFlagsAndAttributes中传递FILE_FLAG_OVERLAPPED标志,返回的句柄要么是已打开的串口端口的句柄,或者是INVAILID_HANDLE_VALUE。CreateFile与大多数Windows函数不一样,打开失败时,不返回0。
CreateFile函数的原型如下:
HANDLE CreateFile(
LPCTSTR lpFileName, // 对象路径名
DWORD dwDesiredAccess, //控制模式
DWORD dwShareMode, // 共享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, //安全属性(也即销毁方式)
DWORD dwCreationDisposition, // 创建的方式
DWORD dwFlagsAndAttributes, // 对象属性
HANDLE hTemplateFile // 一个文件模板句柄
);
在CCESeries类中, HANDLE类型全局变量m_hComm存储CreateFile函数打开串口成功时的返回值,凭借此句柄可以控制打开的串口对象;以读写的方式打开串口。
(2)串口的设置
打开串口后,还必须对端口配置好正确的波特率、字符长度、停止位等等。在OpenPort函数中,使用两个函数GetCommState和SetCommState来配置串口。
函数原型如下:
BOOL SetCommState(HANDLE hRle, LPDCB lpDCB);
BOOL GetCommState(HANDLE hFile, LPDCB lpDCB);
这两个函数都包含了同样的参数,即已打开的串口的句柄和指向DCB结构的指针。DCB结构的设置如表4-4所示。
表4-4 OpenPort函数中的串口DCB配置
续表4-4 OpenPort函数中的串口DCB配置