Linux下接收处理GPS数据
开发板平台:FL2440
Linux内核版本: 3.0
话不多少,开始干活,对于linux下接收并处理gps数据,那么对于新手的我来讲,一开始把这个项目分成两块,这个也是这个项目的整体方向,第一,接收数据;第二处理数据,下面咱们一块一块的进行。
1,接收数据
这个名字有点笼统,确切讲是串口接收gps模块的原始数据,在fl2440开发板左侧大家可以看到有两个母头串口(如图1)
在开发板上 ls /dev 你会发现
ttyS0(这个是连接到电脑的串口,也是图一中上面的那个串口),
ttyS1(这个就是图一中下面的串口,也是连接gps模块,我们需要监听的串口)
由于gps模块也是母头,所以需要自己制作一个公头线,首先进行硬件上的联通,下面看一下RS_232的db9线每一个引脚的作用
--------------下图为引脚顺序图------------
Db9中有效的通信引脚2(RXD),3(TXD),5(GND)。在公头和母头进行连接时,公头2连接母头3,公头3连接母头2。5接5。这样硬件实现了连接。如下,
gps模块接上电,此时可以监听串口了,
监听串口命令 microcom -s 4800 /dev/ttyS1
有了上述结果。说明接收数据是可以实现的。看到这里不知道有没有人有疑问,这样就可以直接收到数据么,gps,串口都是设备,不需要对gps和串口进行驱动使能么?是这样的,在一开始内核中就已经对串口驱动进行了使能,而gps模块中有gps模块的驱动,这个模块通过自身的串口不断的发送数据开发板需要做的就是读取然后处理就够了,
以上步骤成功,说明硬件上的连通性没的问题,可以说只是准备工作,接下来的才是重点,
串口编程!!!
数据分析!!!
重要的事情要说三个感叹号
其实编写GPS数据解析程序就是ARM+linux串口编程,串口编程是嵌入式应用程序开发中最基础也是最重要的部分,如何从一个串口设备获取数据并将这些数据做一定的解析呢?OK,串口编程大致可以分为以下几个步骤:
至于串口编程的详细介绍,如何设置波特率,如何设置停止位等等,以下给出两个linux串口编程的博客链接,讲的很详细
http://www.cnblogs.com/wblyuyang/archive/2011/11/21/2257544.html
http://blog.youkuaiyun.com/mtv0312/article/details/6599162
其中串口设置其实就相当于串口通信的协议,
波特率:是为了两者信号流能同步,
数据位:是指又几位数据封装成一帧
结束位:是指以帧传输数据时,协定好结束位,便于提取有效数据
奇偶校验:检验数据的一种手段
四者的设置又通信双方协定。
数据分析!!!
$GPRMC,最常用的字符串,包含了时间,日期,定位,和航速航向信息。一般应用,只要有这些信息就可以了。
$GPGGA,包含了定位信息相关的详细信息。如定位时用到的星数,定位的方式,天线的海拔高度,精度等等。
$GPGSA,包含了定位,水平,海拔三种DOP信息,即精度信息,包含了定位所用到的卫星ID。
$GPGSV,包含了GPS模块可以看到的星数(注意,只是能看到的星数,实际使用到的星数在GPGGA中),以及这些卫星的ID号,仰角,方位角,信噪比。关于这种字符串要特别说明的是,它可能会由几条GPGSV字符串组成,因此,每个字符串都包含了共几条字符串,本字串是第几条这样的信息。一般的GPS最多是三条。也有的GPS模块会超过3条。
$GPVTG,包含了更详细的航向航速的信息,航向信息分为以真北为参考和以地磁北为参考(真北和地磁北是不一样的,两者相差几度),航速信息则给出了以节为单