首页资源分类电源技术 > Windows CE下GPS与PDA串行通信的实现.pdf

Windows CE下GPS与PDA串行通信的实现.pdf

已有 454993个资源

下载专区

文档信息举报收藏

标    签: WindowsCE下GPS与PDA串行通信的实现

分    享:

文档简介

Windows CE下GPS与PDA串行通信的实现.pdf

文档预览

电子科技 2006 年第 3 期(总第 198 期) Windows CE 下 GPS 与 PDA 串行通信的实现 熊文峰,张永瑞,齐 云 (西安电子科技大学 机电工程学院,陕西 西安 710071) 摘 要 论述了在 Windows CE 嵌入式系统中,利用串口实现 GPS 和 PDA 通信的方法;简要介绍了 Windows CE 串行通信基础知识以及 PDA 与 GPS 接收机的串行连接方法;详细说明在 eVC4.0 环境下开发串口通信程序,并给 出了具体步骤和部分实现函数;阐述了对所接收到的 GPS 数据的处理。 关键词 PDA;GPS;串行通信;Windows CE 操作系统 中图分类号 TP316.2 The Realization of Serial Communication Between GPS and PDA Based on Windows CE Xiong Wenfeng, Zhang Yongrui, Qi Yun (School of Electro-Mechanical Engineering, Xidian University, Xi′ an 710071, China) Abstract In this paper the technique of serial communication between GPS and PDA under the embedded operating system of Window CE is introduced. First, it presents the basic knowledge about serial communication of Windows CE and the method of serial connection PDA with GPS receivers. Then it discusses in detail the steps of realization and part of functions of developing the serial port communication program under eMbedded Visual C++4.0. Finally it gives the processing of received GPS data. Keywords PDA; GPS; serial port communication; Windows CE operating system GPS(Global Positioning System)是一个高精 度、全天候、全球性的卫星导航定位系统,通过接 收卫星信号解算出自身的位置、速度和其他信息, 以实现定位导航和授时功能,对于人们的生活起着 越来越重要的作用。它已被广泛应用于军事、航海、 工业等各个领域中。如何更加方便实时地得到 GPS 的数据逐渐成为较受关注的问题。 近年来大多数是利用计算机(如笔记本电脑) 与 GPS 的串行通信来读取 GPS 定位信息,但由于 收稿日期:2005-08-31 作者简介:熊文峰(1975—),男,西安电子科技大学机电 工程学院硕士研究生。研究方向:信号检测与处理。张永瑞, 男,西安电子科技大学机电工程学院教授。研究方向:电路 与系统,信号检测与处理。齐 云(1982—),女,西安电 子科技大学机电工程学院硕士研究生。研究方向:信号检测 与处理。 计算机的体积较大、携带不方便以及难于在野外使 用,而 PDA(Personal Digital Assistant)具有体积 小、功能强大、便于携带等优点,因此利用 PDA 完成与 GPS 接收机的串行通信来读取 GPS 数据就 体现出了它的优势。 Windows CE 是微软公司开发的一种面向 32 位 移动智能设备的模块化、抢先式、多任务的实时嵌 入式系统,适用于快速构建新一代内存少、体积小 的智能设备,例如工业控制器、手持式设备、机顶 盒等。但是 Windows CE 使用的是 Unicode 编码而 非 ASCII 编码,不含 16 位子系统,它所提供的 API 是 Win32 API 的一个变体,仅支持部分 Win32 API, 对 MFC 的支持也比较有限。Windows CE 给串口编 程带来的最大不便有两点,第一是目前 PDA 上的 51 Windows CE 下 GPS 与 PDA 串行通信的实现 Windows CE 版本不支持 ActiveX 控件,因此在串 口通信方面具有强大功能的 MSComm 控件在此也 无能为力,第二是 Windows CE 不支持重叠的 I/O 操作,这就向 Windows CE 与 GPS 通信的开发提出 了挑战。因此,研究如何实现 GPS 与 PDA 的串行 通信具有十分重要意义。本文即是考虑到这两种困 难,笔者针对 Windows CE 系统下 PDA 的串口通信 做了一些研究开发工作。 1 GPS 与 PDA 的串行连接 一般GPS OEM板输出的电平为CMOS电平, 而PDA的串口要求是TTL电平,所以它们之间不 能 直 接 相 连 , 因 此 GPS 与 PDA 之 间 需 要 采 用 MAX3232芯片进行电平转换。其连接电路如图1 所示。 1 C1+ C1 VCC DC3P3V 16 C3 0.1μF 3 PDA 接口 1 6 2 7 3 8 4 9 5 C5 330pF 4 C2 0.1μF 5 14 13 7 C6 8 330pF DB9 C1- V+ C2+ V- C2- T1OUT R1IN T2OUT R2IN GND T1IN R1OUT T2IN R2OUT MAX3232 2 0.1μF 6 C4 15 0.1μF GPS 接口 11 TXD 1 12 GND 2 10 RXD 3 9 4 5 6 7 8 3V 图 1 连接电路图 2 GPS 与 PDA 的串行通信的实现 在 Windows CE.net 以前,微软提供了 eMbedded Visual Basic(简称 eVB)和 eMbedded Visual C++ (简称 eVC)两种开发工具来进行 Windows CE 平 台上的二次开发。在 Windows CE.net 出现之后,微 软又推出了 Visual Studio.NET(简称 VS.NET)开 发工具集。虽然可供选择的开发工具更多,但是由 于 Windows CE.net 的特点和 eVC 所具有的优点, 使得 eVC 仍然是广大软件开发者的首选。下面介绍 在 eVC4.0 环境下,利用面向对象的思想,多线程 的程序设计方法来实现 Windows CE 和 GPS 的串行 通信。 串行端口在 Windows CE 下属于流接口设备, 它是串行设备接口的常规 I/O 驱动程序调用和与通 信相关的具体函数的结合。串行设备被视为用于打 开、关闭、读写串行端口的常规、可安装的流设备。 Windows CE 的通信函数和其它大多数 Windows 的 通信函数相同。特别要注意的是,Windows CE 不 支持直接对串行端口的寄存器进行编程。Windows CE 打开与关闭串口设备与打开与关闭文件的操作 相同,所以串口编程使用与文件 I/O 操作完全相同 的函数,即使用文件 I/O 函数 CreateFile、ReadFile、 WriteFile、CloseHandle 访问串口。用 CreateFile 打 开串口,一旦串口被打开和配置后就可以用 WriteFile 向串口发送数据,也可以用 ReadFile 从串 口读出数据。由于 Windows CE 下只支持同步文件 访问,不支持异步重叠 I/O。但采用多线程技术管 理串口通信可以执行同样类型的重叠操作。 2.1 打开串行端口 PDA 为了节电,串口通常是关闭的。所以在使 52 IT Age/Mar. 15, 2006 Windows CE 下 GPS 与 PDA 串行通信的实现 用串口之前,首先要打开串口,返回一个标志该资 源的句柄。使用 CreateFile 函数打开串口。 m_hComm = CreateFile( _T("COM1:"), //打开串口 1 GENERIC_READ | GENERIC_WRITE, //允许读和写(访问模式) 0, //独占方式(共享模式) NULL, OPEN_EXISTING, //打开而不是创建(创建方式) 0, NULL ); 注意:由于 Windows CE 使用的是 Unicode 字 符集,所以在指定端口名称时要加_T 或 TEXT 宏, 强制将字符串转换成 Unicode;另外串口设备名称 后要加冒号,例如"COM1:",这是它区别与其他 Windows 的标志。此函数的第 3 个参数必须为 0, 通信端口不能像文件一样被共享;串口总是存在 的 , 此 函 数 中 的 第 5 个 参 数 必 须 置 为 OPEN_ EXISTING;第 6 个参数也必须为 0,因为 Windows CE 只支持非重叠 I/O。 m_hComm(HANDLE 类型)存放返回的串口 句 柄 , 如 不 成 功 , m_hComm 将 被 赋 为 INVALID_HANDLE_VALUE。 2.2 设置串行端口 打开串口后,就需要对串口进行一些初始化工 作,主要是通过 DCB 结构来配置串行端口参数, 包括波特率、停止位、数据位、校验位等。首先打 开串口,用 GetCommState 函数来获得当前打开串 口的初始配置值,然后根据实际情况来修改 DCB 成员变量,最后再调用 SetCommState 函数来修改 新的串口配置,这样可以免去对 DCB 结构中其他 参数的设定。 下面是设定 DCB 部分程序代码。 DCB commParam; //声明一个 DCB 结构 CommParam.DCBlength = sizeof (DCB); //初始化 DCBlength //得到串口的初始设置信息 GetCommState (m_hComm, & commParam); //改变 DCB 结构设置 commParam.BaudRate = 9600; //设置波特 率为 9600bps commParam.fBinary = TRUE; //二进制串 行传输模式,对 Win32API 必须为 TRUE commParam.fParity = FALSE; //不支持奇 偶校验 commParam.ByteSize = 8; //发送接收数 据位数为 8 位数据 commParam.Parity = NOPARITY; //规定无 奇偶校验 commParam.StopBits = ONESTOPBIT; //设 置一个停止位 …… SetCommState(m_hComm, &commParam); //设置新的串口配置 除了在 DCB 中设置外,程序一般还需要设置 I/O 缓冲区的大小和超时。超时是读写串口函数自 动返回前 Windows CE 等待读或写的时间。为了避 免程序陷入到一个循环来等待来自于串口的字符, 超时值的配置是必须的,可以将其设为一个合适的 值,如果没有字符输入,ReadFile()将会指定的 时间内返回。通常,配置超时值和配置串口类似。 首先用 GetCommTimeouts 函数获得当前串口的超 时值。然后可以修改 COMMTIMEOUT 成员,最后 用 SetCommTimeouts 函数设定超时值。 COMMTIMEOUTS CommTimeOuts; //定 义 COMMTIMEOUTS 的结构 电子科技/2006 年 3 月 15 日 53 Windows CE 下 GPS 与 PDA 串行通信的实现 GetCommTimeouts (m_hComm, &CommTimeOuts);//获得当前的超时值 //修改 COMMTIMEOUT 成员 CommTimeOuts.ReadIntervalTimeout = MAXDWORD; CommTimeOuts.ReadTotalTimeoutMultipli er = 0; CommTimeOuts.ReadTotalTimeoutConstant = 0; CommTimeOuts.WriteTotalTimeoutMultipli er = 10; CommTimeOuts.WriteTotalTimeoutConstan t = 1000; SetCommTimeouts( m_hComm, &CommTimeOuts );//设置读写操作所允许的超时 SetCommMask (m_hComm, EV_RXCHAR);//设置事件驱动类型 SetupComm(m_hComm,512,512); //设置输 入、输出缓冲区 //初始化缓冲区中的信息 PurgeComm(m_hComm,PURGE_TXCLEA R|PURGE_RXCLEAR); //清干净输入、输出缓冲区 2.3 读写串行端口 在成功的打开并设置通讯口后,就可以进行读 写串口的操作。Windows CE 不支持重叠 I/O,所以 使用多线程可以充分利用 CPU 资源,提高传输速 度,笔者使用了两个单独的线程来进行读写串行端 口的。首先创建读写线程,然后在串口读线程函数 和串口写线程函数中对数据进行读写。 //创建读串口线程 m_hReadThread= CreateThread(NULL,0,ReadThreadFunc,this,0,&m_d wReadThreadID); //创建写串口线程 m_hWriteThread = CreateThread(NULL,0,WriteThreadFunc,this,0,&m_d wWriteThreadID); 程序如何知道有数据到达串行口呢?这需要 用到 Windows CE 的通信事件,它类似于 Windows 的消息,当指定的事件发生时,由 Windows CE 发 送消息给应用程序,触发 WaitCommEvent()函数 返回,执行相应的操作。下面代码就是在串口读线 程函数中以事件驱动方式进行读串口数据的部分 代码。 …… SetCommMask (ceSeries->m_hComm, EV_RXCHAR | EV_CTS | EV_DSR );//确定一组事 件 while (m_hComm != INVALID_HANDLE_VALUE) { WaitCommEvent(ceSeries->m_hComm,&evtMask,0) ;//等待事件 //得到一个字符并放入输入缓冲 区 if (evtMask & EV_RXCHAR) { …… readBuf = new BYTE[willReadLen]; ReadFile(ceSeries->m_hComm,readBuf,wil lReadLen,&actualReadLen,0); …………//处理定位数据 } } 如果只是读 GPS 的数据,而不做写操作,就可 以只应用 ReadFile();当需要进行写操作时,对 WriteFile()的使用也是类似的。 2.4 关闭串口 通信结束,就需关闭串口。由于是使用多线程 来处理串口的,所以首先关闭线程,然后调用 CloseHandle函数关闭串口,以便释放独占的资源。 //关闭读线程 CloseReadThread(); 54 IT Age/Mar. 15, 2006 Windows CE 下 GPS 与 PDA 串行通信的实现 //关闭写线程 CloseWriteThread(); //关闭串口 if (!CloseHandle (m_hComm)) { m_hComm = INVALID_HANDLE_VALUE; return ; } 3 PDA 对 GPS 数据的处理 前面从串口接收到的数据在没有进一步处理 之前,缓存的是一长串字节流,这些信息在没有经 过分类提取是无法加以利用的。因此,必须通过程 序将各个字段的信息从缓存字节流中提取出来,将 其转化为有实际意义的,可供高层决策使用的定位 信 息 数 据 。 软 件 接 口 GPS 的 通 信 协 议 采 用 NMEA0183 ASCII 码协议,此协议是 GPS 导航设 备的统一标准。利用串口通信获取 GPS 信息,我们 希望能够 2 秒钟更新一次经纬度和时间数据,频繁 的数据更新会白白浪费 PDA 设备有限的电池能量。 GPS 每秒钟发送 10 条数据,则每 10 秒钟就是 100 条。在实际导航中,不必了解 GPS 通信协议的全部 信息,只需要从中挑选需要的那部分定位数据信 息,其余的信息可以忽略。 GPS 发送到 PDA 的数据帧有"$GPGGA"、 "$GPGSA"、"$GPGSV"以及"$GPRMC"等,对于通 常的情况,我们所关心的定位数据如经纬度、速度、 时间等均可以从"$GPRMC"帧中获取得到,该帧的 结构及各字段释义如下: $GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9> ,<10>,<11>*hh[CR][LF] $GPRMC 接收 GPS 语句的起始符,GPS 推荐的 最短数据格式: <1> 当前位置的格林尼治时间,格式为 hhmmss。 <2> 状态, A 为有效位置, V 为非有效接收警告, 即当前天线视野上方的卫星个数少于 3 颗。 <3> 纬度, 格式为 ddmm.mmmm。 <4> 标明南北半球, N 为北半球、S 为南半球。 <5> 径度,格式为 dddmm.mmmm。 <6> 标明东西半球,E 为东半球、W 为西半球。 <7> 地面上的速度,范围为 0.0 到 999.9。 <8> 方位角,范围为 000.0 到 359.9 度。 <9> 日期, 格式为 ddmmyy。 <10> 地磁变化,从 000.0 到 180.0 度。 <11> 地磁变化方向,为 E 或 W。 *hh 校验和,即接收字符串的校验和。 [CR][LF] 回车换行,终止位。 此外,GPS 接收机中获得的时间信息为格林尼 治时间,还需在获取时间上加 8 小时才为我国标准 时间。GPS 使用的 WGS84 坐标系也与我国采用的 BJ54 大地坐标系不同,需要对此也加以变换。 4 结束语 GPS 与 PDA 之 间 的 串 行 通 讯 的 成 功 实 现 , 为 GPS接收机的二次开发打下了很好的基础。WINCE 具有很强的图形处理能力,将它与当今很热门的嵌 入式地理信息系统相集成,能够开发出功能强大, 便携式的定位设备。在各种野外条件下的实际应用 中,小巧玲珑的PDA也体现出了它的优势。当然上 述方法不只限于读取GPS接收机,它也可以适用于 PDA与其他设备进行串口通信。 参考文献 1 Microsoft Corporation. Microsoft Windows CE. NET Help [Z]. 2003. 2 周毓林, 宁 杨, 陆贵强, 等. Windows CE.Net内核定制 及应用开发[M]. 北京: 电子工业出版社, 2005. 电子科技/2006 年 3 月 15 日 55

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。