怎么从GPS模块发送来的字符串中解析出自己需要的经纬度以及时间信息
发布日期:2021-05-07 03:03:29 浏览次数:18 分类:精选文章

本文共 2277 字,大约阅读时间需要 7 分钟。

/*****************************************************************功能:解析GPS/北斗定位的时间及经纬度信息示例:	extern void GPSParse(void) ;	//声明外部GPS解析函数	GPSParse();						//调用GPS解析函数*********************************************************************/#include "port.h"#include 
tyGNRMC GNRMC ; //float test1 = 10096.7998 ;float test2 = 10017.6807 ;uint16_t dingwei = 0 ;char latitudeA[12] = { 0}; //暂存GPS的经纬度数据char longitudeA[12] = { 0}; //暂存GPS的经纬度数据char fi = 0 ;/**************************************************************************** GPS接收函数*****************************************************************************/void GPSParse(void){ unsigned long y=0,z=0; if(Uart2_Seriadef.ReciveSta ) //DMA接收完成标志位 { Uart2_Seriadef.ReciveSta = 0 ; //清空接收标志位 //$GNRMC,031223.00,A,3450.13043,N,11330.10687,E,0.036,,040121,,,A*63 GNRMC.all_data = strstr((char *)Uart2_Seriadef.pRecData ,"$GPRMC"); //获取以$GPRMC开头的数据 if( GNRMC.all_data != NULL ) { GNRMC.step = 0 ; strtok((char *)Uart2_Seriadef.pRecData ,","); while(GNRMC.step<6 ) //分割前10个数据 { GNRMC.step++; switch(GNRMC.step) { case 1 : GNRMC.time = atol(strtok(NULL,",")) ; //获取原始时间数据 break ; case 2 : if(strstr(strtok(NULL,","),"A") == NULL ) //判读经纬度信息是否有效 { GNRMC.step = 7 ; dingwei = 1 ; } else { dingwei = 0 ; } break ; case 3 :// GNRMC.latitude = atof(strtok(NULL,",")) * test1 ; //获得纬度数据 strcpy(latitudeA,strtok(NULL,",")); y=(latitudeA[0]-0x30)*10000000+(latitudeA[1]-0x30)*1000000; z=((latitudeA[2]-0x30)*10+(latitudeA[3]-0x30))/0.00006+(((latitudeA[5]-0x30)*1000+(latitudeA[6]-0x30)*100+(latitudeA[7]-0x30)*10+(latitudeA[8]-0x30))/0.6); GNRMC.latitude = y+z; break ; case 5 : strcpy(longitudeA,strtok(NULL,",")); y=(longitudeA[0]-0x30)*100000000+(longitudeA[1]-0x30)*10000000+(longitudeA[2]-0x30)*1000000; z=((longitudeA[3]-0x30)*10+(longitudeA[4]-0x30))/0.00006+(((longitudeA[6]-0x30)*1000+(longitudeA[7]-0x30)*100+(longitudeA[8]-0x30)*10+(longitudeA[9]-0x30))/0.6); GNRMC.longitude =y+z; break ; default : strtok(NULL,",") ; //分割一些无用数据 break ; } } } }}

上一篇:STM32单片机无法进入debug,怎么在cubmx中打开debug
下一篇:基于HAL库在程序中使stm32单片机重启

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年03月31日 05时39分50秒