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);