本章将介绍Windows Embedded CE 7.0的串口通信。一些基于Windows CE的设备可以与其他计算机、打印机、调制解调器,或全球定位系统(GPS)卫星通信由串行连接方式。
串行I / O是Windows CE支持的最简单的通信方式。两个设备之间建立一个直接的、一对一的连接。串行I / O可以通过多种方式的硬件连接,但是,大多数基于Windows CE的设备使用串行电缆或PC卡设备,如调制解调器或红外(IR)收发器。串行电缆之间的数据交换类似于文件的读取或写入。
Windows CE支持基于标准的基于Windows桌面的串行通讯函数。这些函数可用于打开、关闭、并操纵串行端口、发送和接收数据,并管理连接。
虽然目前很多设备都没有外置串口,因为有更快更稳定的接口代替了串口。但是基于Windows CE的设备仍然保留着串口,因为目前常用的基于Windows CE的设备都具体导航、电话等功能,而GPS、GSM/GPRS的模块都是外置串口的终端设备。因此,串口仍会作为Windows CE设备中不可缺少的部分。
9.1 设计说明
在Windows CE下的串口编程不同于MS-DOS下的编程。每个Windows CE设备都拥有各自不同的物理内存映射表。即使能够查找到串口设备对应的基地址,也不能直接对寄存器进行编程。因为串行硬件与串口端口不能保证完全兼容,程序对寄存器的操作并不一定能够成功或正确写入到相应的串行硬件中。
一个与串口进行交互的应用程序,涉及到打开串行设备驱动程序以及与其通信。与大部分的现代操作系统一样,Windows CE通过文件系统的一系列API来访问设备驱动程序。串口通信中常用的API既包括了设备基本通信函数,如CreateFile, ReadFile, WriteFile, CloseHandle函数分别用于串口的建立、,数据传输以及关闭,也包括了设备控制函数,如GetCommState/SetCommState,GetCommTimeouts/SetCommTimeouts,GetCommMask/SetCommMask,以及WatiCommEvent函数分别用于串口状态、参数以及事件条件等的查询和设定。
9.2 开启序列通信端口
开启序列通信端口通过调用CreateFile函数来打开。因为硬件供应商和设备驱动程序开发者可以给端口指定任意的名字,应用程序应该列出可用的端口,并允许用户指定需要打开的端口。如果指定的端口不存在,CreateFile函数返回ERROR_FILE_NOT_FOUND,并应通知用户端口不可用。
CreateFile函数的功能在于创建、打开或截断文件、通信资源,磁盘设备或控制台。它返回一个可以用来访问对象的句柄,也可以打开并返回目录的句柄。
CreateFile函数的原型如下:
HANDLE CreateFile(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDispostion ,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile);
参数lpFileName是一个指向空结束字符串的指针,这个字符串描述了需要创建或打开的对象的名称(文件,控制台,磁盘设备,通信资源,或目录)。如果参数lpFileName的值是文件路径,那么默认的字符串长度限制为MAX_PATH;如果参数lpFileName指向了通信资源的对象,那么在名称的末尾必须加上“:”,如“COM1:”。
参数dwDesiredAccess指定访问对象的类型。应用程序可以获取读访问,写访问,读写访问,或设备查询的访问
转载于:https://blog.51cto.com/8382359/1342054