近短时间在网上买了一个GPS模块,正好正在学习MSP430单片机,于是决心将GPS模块与MSP430结合起来,同时将代码贴出来,发现网上搜到好多资料都要注册才能下载,有些还要钱。自己动脑,才能自娱自乐。

一、测试篇   

刚拿到ATK-NEO-6M这个型号的GPS模块,有点不大相信,近100块的东西居然只有3cm那么大一点。之前在网上下载了相关的资料,第一次快速测试肯定是借助电脑,正好msp430开发板上有max232模块,直接将GPS模块的TX接max232的TX,RX同样。PC端安装u-center,u-center 是由ublox 公司提供的GPS 评估软件,功能十分强大,可以对我们的ATK-NEO-6M GPS 模块进行全面的测试。安装好后,点击连接/断开按钮,选择你的串口号,一般测试都是选择自动配置按钮,也就是那个魔法样式的按钮,单击后会自己配置波特率,如果正常通讯的话,在最右下角的状态栏会显示黄色,当GPS模块已经定位成功的话,会在界面上显示当前的基本信息,如经度,纬度等。想查看接收到的原本信息,按F8键即可显示。我测试后工作正常,在屋里基本能搜到9颗卫星信号。

 

二、开发篇

刚拿到GPS模块,感觉要是开发起来会很麻烦,后来经过实验,其实很简单,因为卖家提供的资料已经足够开发。句段的分析函数都已提供,我们只需将接口写好即可。接下来先看看我的硬件环境。

硬件环境:MPS430开发板,FYD12864LCD显示屏,USB转串口线,ATK-NEO-6M GPS模块

软件环境:IAR集成开发环境,串口调试工具,Secure CRT

实现目标:MSP430通过串口2接收到GPS信息,显示在LCD上,同时通过串口1发送接收到的数据到PC。

 

1. 先把msp430的句段分析部分调通。

思路:将厂商提过的GPS语句分析部分代码移植过来,串口手动发送GPS数据,分析完后在LCD上显示。

将厂商提供的GPS语句分析代码贴出,(在此仅作为参考学习只用)

gps.h

gps.c

以上为GPS相关代码,下面为MSP430相关代码

uart..h
uart.c

该串口操作为配置串口1和串口2波特率都为9600(之前看了GPS模块的应用手册,发现默认的波特率为38400

image
,但我将430的波特率设为38400发现接收到的数据为乱码,于是干脆直接将GPS的波特率设为9600,我直接将模块上的R5电阻取了,终于接收到正常的数据.)

main.c

其中,有关LCD显示部分在其他博文中会详细说到.

将程序烧到430后,上电,打开串口调试工具,发送文本如下:

$GPGGA,023543.00,2308.28715,N,11322.09875,E,1,06,1.49,41.6,M,-5.3,M,,*7D

就会收到发回来的数据跟发送的一样,同时LCD上显示海拔为41.6m.

说明能对数据接受并进行正确处理了。

 

后面要做的便是将串口0的接收中断代码复制到串口1接收中断代码即可。

同样上电,这时LCD可显示信息,但显示的数据都为0,说明GPS还没有定位成功。等2~3分钟左右,GPS模块上的指示灯开始闪烁时,这时从LCD上可看到当前的经度、纬度、高度、UTC时间,同时用ScuetCRT连接,可看到430发回来接受到的原始数据。

下图为实验的结果,时间显示稍微有点问题,因为没有转换还是其他。不过忙了几天终于将GPS弄好了,下一步将编写linux驱动。。。下面晒一下成果^-^.

IMG_20131121_225930

 

补充:

之前忙于工作,现在回头看看,发现对收到的数据进行分析显示后结果不对,很有可能是数据溢出导致,通过串口1发送到PC的数据可以看到,收到GPS模块的数据是正确的。唯一可能的是在数据进行分析时出错。果然,追踪到gps.c中可以看到,对数据处理的数据超大,而msp430的int只为16位,最大值为65536,所以在对数据进行装载时肯定会溢出。这也是今天上班偶尔看看才发现的。回去后将所用的int类型替换为long型,应该就正确了,期待回去后验证。。。。

昨天回去修改一下代码,将以前的uint类型替换为ulong,烧写后结果显示正确。同时在以前的基础上修改显示部分,按按键后显示另外的信息。

修改后的main.cpp如下:

main.c

显示的结果如下:(因为是在市内的窗口,信号不是很好)

C360_2013-11-25-21-18-53-971C360_2013-11-25-21-19-38-950C360_2013-11-25-21-19-57-439

PC串口接收到的数据如下:

gpsmsg.log



   

posted on 2013-11-22 17:35  程序马  阅读(2766)  评论(2编辑  收藏  举报