gps串口通信程序c语言,stm32单片机串口接收GPS数据并解析NMEA之GPRMC

程序主要实现对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+

你可能感兴趣的:(gps串口通信程序c语言)