- /**
- * @brief nmea_decode_test 解码GPS模块信息
- * @param 无
- * @retval 无
- */
- int nmea_decode_test(void)
- {
- double deg_lat;//转换成[degree].[degree]格式的纬度
- double deg_lon;//转换成[degree].[degree]格式的经度
-
- nmeaINFO info; //GPS解码后得到的信息
- nmeaPARSER parser; //解码时使用的数据结构
- uint8_t new_parse=0; //是否有新的解码数据标志
-
- nmeaTIME beiJingTime; //北京时间
- uint8 str_buff[50];
-
- /* 设置用于输出调试信息的函数 */
- nmea_property()->trace_func = &trace;
- nmea_property()->error_func = &error;
- nmea_property()->info_func = &gps_info;
- /* 初始化GPS数据结构 */
- nmea_zero_INFO(&info);
- nmea_parser_init(&parser);
- while(1)
- {
- // for(int t = 0;t<256;t++){uart_putchar(DEBUG_UART,gps_rbuff[t]);}
- if(GPS_HalfTransferEnd) /* 接收到GPS_RBUFF_SIZE一半的数据 */
- {
- /* 进行nmea格式解码 */
- nmea_parse(&parser, (const char*)&gps_rbuff[0], HALF_GPS_RBUFF_SIZE, &info);
-
- GPS_HalfTransferEnd = 0; //清空标志位
- new_parse = 1; //设置解码消息标志
- }
- else if(GPS_TransferEnd) /* 接收到另一半数据 */
- {
- nmea_parse(&parser, (const char*)&gps_rbuff[HALF_GPS_RBUFF_SIZE], HALF_GPS_RBUFF_SIZE, &info);
-
- GPS_TransferEnd = 0;
- new_parse =1;
- }
-
- if(new_parse) //有新的解码消息
- {
- /* 对解码后的时间进行转换,转换成北京时间 */
- GMTconvert(&info.utc,&beiJingTime,8,1);
-
- /* 输出解码得到的信息 */
- // printf("\r\n时间%d-%02d-%02d,%d:%d:%d\r\n", beiJingTime.year+1900, beiJingTime.mon,beiJingTime.day,beiJingTime.hour,beiJingTime.min,beiJingTime.sec);
- //info.lat lon中的格式为[degree][min].[sec/60],使用以下函数转换成[degree].[degree]格式
- deg_lat = nmea_ndeg2degree(info.lat);
- deg_lon = nmea_ndeg2degree(info.lon);
- // printf("\r\n纬度:%f,经度%f\r\n",deg_lat,deg_lon);
- // printf("\r\n海拔高度:%f 米 ", info.elv);
- // printf("\r\n速度:%f km/h ", info.speed);
- // printf("\r\n航向:%f 度", info.direction);
- // printf("\r\n正在使用的GPS卫星:%d,可见GPS卫星:%d",info.satinfo.inuse,info.satinfo.inview);
- // printf("\r\n正在使用的北斗卫星:%d,可见北斗卫星:%d",info.BDsatinfo.inuse,info.BDsatinfo.inview);
- // printf("\r\nPDOP:%f,HDOP:%f,VDOP:%f",info.PDOP,info.HDOP,info.VDOP);
-
- /* 显示时间日期 */
- sprintf(str_buff," Date:%4d/%02d/%02d ", beiJingTime.year+1900, beiJingTime.mon,beiJingTime.day);
- LCD_ShowString(0,2,str_buff,BLACK);
- sprintf(str_buff," Time:%02d:%02d:%02d", beiJingTime.hour,beiJingTime.min,beiJingTime.sec);
- LCD_ShowString(0,20,str_buff,BLACK);
- /* 正在使用的卫星 可见的卫星*/
- sprintf(str_buff," GPS:%2d ", info.satinfo.inuse);
- LCD_ShowString(150,0,str_buff,BLACK);
- /* 正在使用的卫星 可见的卫星*/
- sprintf(str_buff," BDS:%2d ", info.BDsatinfo.inuse);
- LCD_ShowString(150,20,str_buff,BLACK);
- /* 纬度 经度*/
- sprintf(str_buff," lat:%.6f ", deg_lat);
- LCD_ShowString(0,40,str_buff,BLUE);
- sprintf(str_buff," lon:%.6f",deg_lon);
- LCD_ShowString(115,40,str_buff,BLUE);
- /* 速度 */
- sprintf(str_buff," speed:%4.2f km/h", info.speed);
- LCD_ShowString(0,60,str_buff,RED);
- /* 航向 */
- sprintf(str_buff," Angle:%3.2f deg", info.direction);
- LCD_ShowString(0,80,str_buff,MAGENTA);
- new_parse = 0;
- }
- }
- }