STM32F407VET6库函数开发_GPS模块开发_授时_串口usart

目的

想利用gps模块给stm32进行授时,同时利用秒脉冲来进行时间校正

1、GPS模块相关介绍

—简介

使用的GPS模块VG7669T160N0MA,购于沃进科技,该定位模块是基于中科微基第四代低功耗 GNSS SOC 单芯片 AT6558R

在这里插入图片描述

—引脚位置图

在这里插入图片描述

—引脚说明

在这里插入图片描述在这里插入图片描述

—数据帧介绍

模块通过 UART 作为主要输出通道,按照 NMEA0183 的协议格式输出,具体信息请参照《CASIC 多模卫星导航接收机协议规范》。

下面是通过串口打印的信息:

$GNGGA,021345.000,3958.53189,N,11625.31442,E,6,08,6.8,108.0,M,-9.8,M,,*57
$GNGLL,3958.53189,N,11625.31442,E,021345.000,A,E*42
$GNGSA,A,3,10,28,32,,,,,,,,,,10.0,6.8,7.3,1*00
$GNGSA,A,3,06,09,16,39,42,,,,,,,,10.0,6.8,7.3,4*0B
$GPGSV,2,1,05,10,77,278,43,15,,,32,23,,,28,28,29,233,37,0*61
$GPGSV,2,2,05,32,50,304,16,0*54
$BDGSV,2,1,06,06,63,241,36,09,51,235,34,13,,,29,16,71,246,36,0*43
$BDGSV,2,2,06,39,75,262,37,42,67,327,38,0*72
$GNRMC,021345.000,A,3958.53189,N,11625.31442,E,0.26,0.00,221124,,,E,V*0D

我们只需要关注RMC这条消息就行,具体参数说明如下:
在这里插入图片描述

2、程序设计

gps.h

#ifndef __GPS_H
#define __GPS_H			    
#include "sys.h"  

#define BOOL int
#define TRUE 1
#define FALSE 0

	
typedef struct Data
{
   
	char GPS_Buffer[200];//数据接收	
	BOOL isGetData;//接收数据是否完成
	char *UTCTime;//时间戳
	char *latitude;//纬度
	char *N_S;//南北
	char *longitude;//经度
	char *E_W;//东西
	
	BOOL isParseData;//是否解析完成
	BOOL isUsefull;//是否为有效数据位
}Data;


void gps_init(void);
void parseGpsBuffer(void);
void printfGpsBuffer(void);
#endif


gps.c

#include "gps.h"
#include "usart.h"
#include <stdlib.h>
#include <string.h> 
#include <ctype.h>

/*
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh 
  <1> UTC 时间,hhmmss(时分秒)格式 
  <2> 定位状态,A=有效定位,V=无效定位 
  <3>纬度ddmm.mmmm(度分)格式(前面的0也将被传输) 
  <4> 纬度半球N(北半球)或S(南半球) 
  <5>经度dddmm.mmmm(度分)格式(前面的0也将被传输) 
  <6> 经度半球E(东经)或W(西经) 
  <7>地面速率(000.0~999.9节,前面的0也将被传输) 
  <8>地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输) 
  <9> UTC 日期,ddmmyy(日月年)格式 
  <10>磁偏角(000.0~180.0度,前面的0也将被传输) 
  <11> 磁偏角方向,E(东)或W(西) 
  <12>模式指示(仅NMEA01833.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

*/

const short int USART1_MAX_RECV_LEN = 200;
char USAR1_RX_BUF[USART1_MAX_RECV_LEN];
const short int GPS_Buffer_Length = 200;
struct Data Save_Data;
volatile unsigned long long stm32UTCTime;//ms级utc时间

void parseGpsBuffer(void){
   
	char *subString;
	char *subStringNext;
	int i = 0;
	
	char *dot;
	char *milliseconds;
	long seconds;
	int  milliseconds_val;
	
	if(Save_Data.isGetData)
	{
   
		Save_Data.isGetData = FALSE;
		printf("*****************\r\n");
		printf("%s"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值