程序主要实现对GPRMC数据的全解析,解析包括时间解析,位置解析,航向,组合,定位状态等等的解析
直接利用stm32系列单片机对GPS板卡接收到的数据进行处理得到相对应的信息
一. gps.h文件:
#ifndef __GPS_H
#define __GPS_H
#include "delay.h"
#include "sys.h"
#include "usart.h"
extern u8 gps_buf[120]; //用来接收串口数据
extern u8 gps_i ;
enum gps_rece_state //串口数据的枚举类型
{
f_start, //帧开始
f_segment, //字段接收完
f_end,
f_out
};
extern enum gps_rece_state gps_state;
void send_gps(void);
void send_route(void);
void send_speed(void);
#endif
二. gps.c文件如下:
#include "gps.h"
#include "stm32f10x_usart.h"
#include "lcd.h"
#include "global.h"
#include "config.h"
#include "led.h"
#include "myfun.h"
#include "include.h"
//采集串口数据,并且读取得到GPS数据
u8 gps_buf[120] = {0}; //用来接收串口数据
u8 gps_i = 0;
u8 comma = 0;
u8 check_count = 0;
enum gps_rece_state gps_state; //串口接收gps的状态
void get_gps(void);
//{
// f_start, //帧开始
// f_segment, //字段接收完
// f_end,
// f_out
//}
void USART3_IRQHandler(void) //串口1中断服务程序
{
u8 rec = 0,i;
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
{
rec =USART_ReceiveData(USART3);
if(rec == '$') //如果是美元符,为起始
{
gps_state = f_start;
gps_i = 0;
comma = 0;
check_count = 0;
for(i=0;i<120;i++)
gps_buf[i] = 0;
}
else if(gps_state == f_start) //开始接收
{
gps_buf[gps_i] = rec;
gps_i+