上两篇博文整理学习了有关串口通信、串口编程以及GPS数据格式的一些基本知识。本篇我们要开始编程实现GPS自动定位数据解析。我们将在FL2440开发板上实现该功能。
由于SF2820模块获取到的GPS定位信息是通过串口发送到终端设备,我们在编程实现获取GPS定位信息中自然涉及到串口编程。
串口编程
前面博文已经介绍的很详细,代码也参考前面串口模块。只需要串口模块的头文件与源码。
串口设置其实就相当于串口通信的协议,我们通过程序设置下面的内容(这些值的设置见main函数)
波特率:是为了两者信号流能同步,
数据位:是指又几位数据封装成一帧
结束位:是指以帧传输数据时,协定好结束位,便于提取有效数据
奇偶校验:检验数据的一种手段
编程获取和解析GPS定位信息
头文件(gps.h)
/********************************************************************************
* Copyright: (C) 2018 NULL
* All rights reserved.
*
* Filename: gps.h
* Description: This head file
*
* Version: 1.0.0(2018年07月31日)
* Author: DingHuanhuan <736787419@qq.com>
* ChangeLog: 1, Release initial version on "2018年07月31日 14时13分55秒"
*
********************************************************************************/
#ifndef _GPS_H
#define _GPS_H
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
typedef struct _GP_RMC
{
unsigned int Time; /*UTC Time :hhmmss */
char Pos_status; //定位状态
float latitude; //纬度
char lati_hemisphere; //纬度半球
float longitude; //经度
char longi_hemisphere; //经度半球
float speed; //移动速度
float direction; //方向
unsigned int data; //日期
float Magnetic_declination; //磁偏角
char M_dd; //磁偏角方向
char mode; //模式
}GPRMC;
int Analyse_GPRMC(char *buff, GPRMC *gprmc_data);
int Print_GPRMC(GPRMC *gprmc_data);
#endif
gps数据分析gps.c
在gps.c文件中有两个函数Analyse_GPRMC 和 Print_GPRMC ,分别实现对gps返回的数据进行分析处理和打印到标准输出。
/*********************************************************************************
* Copyright: (C) 2018 NULL
* All rights reserved.
*
* Filename: gps.c
* Description: This file
*
* Version: 1.0.0(2018年07月31日)
* Author: DingHua