最近自己调试了以下GPS模块,代码实现经纬度显示、UTC日期及时间、高度、速度、卫星数,这些数据均由串口打印出来。下面是部分参考代码:- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "lcd.h"
- #include "usmart.h"
- #include "usart2.h"
- #include "string.h"
- #include "gps.h"
-
- u8 USART5_TX_BUF[USART2_MAX_RECV_LEN]; //串口1,发送缓存区
- nmea_msg gpsx; //GPS信息
- __align(4) u8 dtbuf[50]; //打印缓存器
- const u8*fixmode_tbl[4]={"Fail","Fail"," 2D "," 3D "}; //fix mode字符串
-
- //显示GPS定位信息
- void Gps_Msg_Show(void)
- {
- float tp;
- tp=gpsx.longitude;
- printf("Longitude:%.5f %1c \r\n ",tp/=100000,gpsx.ewhemi); //得到经度字符串
-
- tp=gpsx.latitude;
- printf("Latitude:%.5f %1c \r\n ",tp/=100000,gpsx.nshemi); //得到纬度字符串
-
- tp=gpsx.altitude;
- printf("Altitude:%.1fm \r\n ",tp/=10); //得到高度字符串
-
- tp=gpsx.speed;
- printf("Speed:%.3fkm/h \r\n ",tp/=1000); //得到速度字符串
-
- if(gpsx.fixmode<=3) //定位状态
- {
- printf("Fix Mode:%s \r\n",fixmode_tbl[gpsx.fixmode]);
-
- }
- printf("Valid satellite:%02d \r\n",gpsx.posslnum); //用于定位的卫星数
-
- printf("Visible satellite:%02d \r\n",gpsx.svnum%100); //可见卫星数
-
- printf("UTC Date:%04d/%02d/%02d \r\n ",gpsx.utc.year,gpsx.utc.month,gpsx.utc.date); //显示UTC日期
- //printf("year2:%d\r\n",gpsx.utc.year);
-
- printf("UTC Time:%02d:%02d:%02d \r\n ",gpsx.utc.hour,gpsx.utc.min,gpsx.utc.sec); //显示UTC时间
-
- }
- int main(void)
- {
- u16 i,rxlen;
- u16 lenx;
- u8 upload=0;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
- delay_init(168); //初始化延时函数
- uart5_init(115200); //初始化串口波特率为115200
-
- usart2_init(9600); //初始化串口3波特率为9600
- usmart_dev.init(84); //初始化USMART
- usmart_dev.init(72); //初始化USMART
-
- if(Ublox_Cfg_Rate(1000,1)!=0) //设置定位信息更新速度为1000ms,顺便判断GPS模块是否在位.
- {
- printf("NEO-6M Setting...\r\n");
- while((Ublox_Cfg_Rate(1000,1)!=0)) //持续判断,直到可以检查到NEO-6M,且数据保存成功
- {
- usart2_init(9600); //初始化串口3波特率为9600(EEPROM没有保存数据的时候,波特率为9600.)
- Ublox_Cfg_Prt(38400); //重新设置模块的波特率为38400
- Ublox_Cfg_Tp(1000000,100000,1); //设置PPS为1秒钟输出1次,脉冲宽度为100ms
- Ublox_Cfg_Cfg_Save(); //保存配置
- printf("检测设备\r\n");
- }
-
- }
- while(1)
- {
- delay_ms(1);
- if(USART2_RX_STA&0X8000) //接收到一次数据了
- {
- printf("GPS_Res_sucess...\r\n");
- rxlen=USART2_RX_STA&0X7FFF; //得到数据长度
- for(i=0;i<rxlen;i++)USART5_TX_BUF[i]=USART2_RX_BUF[i];
- USART2_RX_STA=0; //启动下一次接收
- USART5_TX_BUF[i]=0; //自动添加结束符
- GPS_Analysis(&gpsx,(u8*)USART5_TX_BUF);//分析字符串
- Gps_Msg_Show(); //显示信息
- if(upload)printf("\r\n%s\r\n",USART5_TX_BUF);//发送接收到的数据到串口1
- }
- upload=!upload;
- if(upload)printf("NMEA Data Upload:ON ");
- else printf("NMEA Data Upload:OFF");
- delay_ms(1000);
- if((lenx%500)==0)
- lenx++;
- }
- }
复制代码
GPS.7z
(343.7 KB, 下载次数: 82)
|