设为首页 加入收藏

TOP

c语言解码GPS--实现篇(一)
2014-11-23 23:36:30 来源: 作者: 【 】 浏览:6
Tags:语言 解码 GPS-- 实现

通过自己这几天的努力终于把GPS数据全部进行了解码,相信看了我的日志的人也期待了好久,资源在于分享,才能获得进步;相对于网上直接调用接口不同的是从C的方向解决问题能让问题更加的清晰,本设计芯片采用的是联星的CC550-BG模块,满足大多数芯片性能,系统是在LINUX系统下面实现,选用ttyS0节点,根据不同借口,串口线选择的是RS-232,相信大家也有所了解,详细的请看我代码,都有详细的解释,希望帮到大家,这里我只解析了GPRMC格式的编码,大家也可以把其他几种格式的编码解析同样解析出来,只要在read_data()函数里面strncmp()的array数组改变名称就可以,可以把他写成Switch格式的解码选择器,好了废话不多说,贴上我的代码!

[html]
#include /*标准输入输出定义*/
#include /*标准函数库定义*/
#include /*Unix 标准函数定义*/
#include
#include
#include
#include
#include
#include

//#define dev "/dev/ttyS0"
#define BUFF_SIZE 512
#define MAX_COM_NUM 3

int SectionID=0,i=0;

struct data
{
char GPS_time[20]; //UTC时间
char GPS_sv; //使用卫星
char GPS_wd[12]; //纬度
char GPS_jd[12]; //经度
//char GPS_warn; //定位警告
char GPS_speed[5]; //速度
char GPS_date[8]; //UTC日期

}GPS_DATA;



int set_com_config(int fd,int baud_rate,int data_bits,char parity,int stop_bits)
{
struct termios new_cfg,old_cfg;
int speed;
//保存并测试现有串口参数设置,在这里如果串口号出错,会有相关的出错信息

if(tcgetattr(fd,&old_cfg)!=0)
{
perror("tcgetattr");
return -1;
}
tcflush(fd, TCIOFLUSH);
new_cfg=old_cfg;
cfmakeraw(&new_cfg);//配置为原始模式
new_cfg.c_cflag&=~CSIZE;

//设置波特率
switch(baud_rate)
{
case 2400:
{
speed = B2400;
break;
}
case 4800:
{
speed = B4800;
break;
}
case 9600:
{
speed = B9600;
break;
}
case 19200:
{
speed = B19200;
break;
}
case 38400:
{
speed = B38400;
break;
}
case 115200:
{
speed = B115200;
break;
}


}
cfsetispeed(&new_cfg,speed);
cfsetospeed(&new_cfg,speed);
//设置数据位

switch(data_bits)
{
case 7:
{
new_cfg.c_cflag|=CS7;
break;
}

case 8:
{
new_cfg.c_cflag|=CS8;
break;
}

}

//设置停止位
switch(stop_bits)
{
case 1:
{
new_cfg.c_cflag &=~CSTOPB;
break;
}

case 2:
{
new_cfg.c_cflag |=CSTOPB;
break;
}


}

//设置奇偶校验位
switch(parity)
{
case 'o':
case 'O':
{
new_cfg.c_cflag|=(PARODD|PARENB);
new_cfg.c_iflag|=(INPCK |ISTRIP);
break;
}
case 'e':
case 'E':
{
new_cfg.c_cflag |=PARENB;
new_cfg.c_cflag &=~PARODD;
new_cfg.c_iflag |=(INPCK | ISTRIP);
break;
}
case 's':
case 'S':
{
new_cfg.c_cflag &=~PARENB;
new_cfg.c_cflag &=~CSTOPB;
break;
}

case 'n':
case 'N':
{
new_cfg.c_cflag &=~PARENB;
new_cfg.c_iflag &=~INPCK;
break;
}

}

new_cfg.c_cc[VTIME] =10;
new_cfg.c_cc[V

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇c 常量 const 下一篇openssl/md5.h没有此文件

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: