北斗ATGM332D定位 gps驱动

ATGM332D
在这里插入图片描述
接口
串口
在这里插入图片描述
协议
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
经纬度换算
在这里插入图片描述
在这里插入图片描述

代码示例

#include <stdio.h>
int my_strcmp(char *s1, char *s2, int len)
{
    
    
		int i;
	
		for(i = 0; i < len; i++)
		{
    
    
			if(s1[i] != s2[i])
				return 0;
		}
		
		return 1;
}

char *my_strfind(char *buf, char *s, char s_len, int len)
{
    
    
		int i,j,tmp;
	
		//printf("buf %s s %s len %d\n",buf,s,len);
		//printf("slen %d\n", sizeof(s));  
		for(i = 0; i < len; i++)
		{
    
    
			tmp = my_strcmp(&buf[i], s, s_len);
			
			if(tmp == 1)
			{
    
    
				//printf("cmp ok\n"); 
				return &buf[i];
				
			}
		}
		
		return 0;
}

char *my_strcpy(char *s1, char *s2, char end)
{
    
    
	int i;
	
	for(i = 0; i < 10; i++)
	{
    
    
		if(s2[i] == end)
			break;
		s1[i] = s2[i];
	}
	
	return &s2[i];
}

int gps_get(char *buf, int len, char *longitude, char *latitude)
{
    
    
	const char GPS_HEAD[] = "$GNRMC";
	
	char i = 0,j = 0,*cur;
	int ret = 0;
	
	cur = my_strfind(buf, (char *)GPS_HEAD, 6, (1024 - sizeof(GPS_HEAD)));
	//printf("cur = %c\n",*cur); 
	if(cur != 0)
	{
    
    
		cur = my_strfind(cur, "A,", 2, 60);
		//printf("cur = %c\n",*cur); 
		if(cur != 0)
		{
    
    
				//printf("cur = %c\n",*cur);
				cur = my_strcpy(latitude, (cur+2), ',');
				//printf("cur = %c\n",*cur); 
				cur = my_strcpy(longitude, (cur+3), ',');
		}
	}
	return 0;
}

//gps坐标读取函数 
//参数 longitude纬度 latitude经度
//返回 0
//定义硬件接口
//使用了uart0 9600
const char input[1024] ="$GNGGA,084852.000,2236.9453,N,11408.4790,E,1,05,3.1,89.7,M,0.0,M,,*48 $GNGLL,2236.9453,N,11408.4790,E,084852.000,A,A*4C $GPGSA,A,3,10,18,31,,,,,,,,,,6.3,3.1,5.4*3E $BDGSA,A,3,06,07,,,,,,,,,,,6.3,3.1,5.4*24 $GPGSV,3,1,09,10,78,325,24,12,36,064,,14,26,307,,18,67,146,27*71 $GPGSV,3,2,09,21,15,188,,24,13,043,,25,55,119,,31,36,247,30*7F $GPGSV,3,3,09,32,42,334,*43 $BDGSV,1,1,02,06,68,055,27,07,82,211,31*6A $GNRMC,084852.000,A,2236.9453,N,11408.4790,E,0.53,292.44,141216,,,A*7 5$GNVTG,292.44,T,,M,0.53,N,0.98,K,A*2D $GNZDA,084852.000,14,12,2016,00,00*48 $GPTXT,01,01,01,ANTENNA OK*35";
int gps_deal(char *longitude, char *latitude)
{
    
    
	static char state = 0;
	
	if(state == 0)
	{
    
    
		uart_0_init();	//串口透传功能初始化
		uart_tx_buf.header = 0;  /*?*/
		uart_tx_buf.tail = 0;    /*?*/
		uart_rx_buf.header = 0;
		uart_rx_buf.tail = 0;
		state = 1;
	}
	if(uart_rx_buf.header > 500)
	{
    
    
		gps_get(uart_rx_buf.data, strlen(uart_rx_buf.data), longitude, latitude);
		//gps_get((char *)input, strlen(input), longitude, latitude);
		memset(uart_rx_buf.data, 0, MAX_RX_LENGTH);//清零
	}
	return 0;
}



使用方法
需要用到串口0,波特率9600,接收缓存设置2048个字节

char longitude[20] = "124",latitude[20] = "234";
gps_deal(longitude, latitude);

猜你喜欢

转载自blog.csdn.net/u010835747/article/details/120713034