推荐一款GPS接收机模块
0赞
世界顶级 GPS 厂商 u-blox 公司的 LEA-5S 模组,拥有世界先进的 GPS 接收机技术。使用瑞士 u-blox 公司的 LEA-5S 模组,第 5 代 GPS 接收机,搭载了高性能的 50 通道 ublox 5 技术, 超过 100 万个有效相关器 32 通道采集引擎的处理能力
使得模组可进行大规模并行搜索。拥有 SuperSense ® kickstart 技术,在信号微弱时可加速捕获 GPS 卫星信号。u-blox GPS 接收机拥有先进的噪音抑制技术和创新的RF 架构,使接收机的抗干扰能力更强。同时u-blox GPS接收机还提供惯性导航、精确授时和A-GPS等技术。
功能特性
高精度,高性能 GPS 接收机
带有可充电后备电池,可实现热启动 1 秒钟快速定位
天线开路、短路检测功能(LEA-5 系列特有)
TTL 电平的 UART 接口,方便连接各种处理器
5V/2A 直流电源输入
1 路 RS232 电平串口,1 路 USB2.0 接口
方便连接计算机,配有专业 GPS 测试软件
电源和工作状态指示灯
引出全部信号线,供开发测试使用
应用领域
汽车电子:民用车载 GPS 导航仪;物流车量追踪管理系统;车量防盗系统;城
市智能交通管理系统等
手持设备:智能手机,PDA,适用于个人旅游及野外探险的各种手持导航设备
科学考查:地图测绘,水下地形测量,地质灾害监测
工业农业:精细农业(无人耕种) ;工程机械控制;工程建筑测量;石油电力等
行业对设施的管理和监测
航空航海:飞机航路引导,船舶行驶导航

主要特性
50 个通道的 u-blox 引擎,100 万个以上的有效相关器
具备 KickStart 功能,信号微弱时可实现加速启动
可同步追踪 GPS 及伽俐略导航卫星信号
-160dBm 的 SuperSense 捕获和跟踪灵敏度
热启动和辅助启动首次定位时间小于 1 秒
集成天线短路检测功能,可外接天线开路检测电路
提供多种接口:UART,USB,IIC
芯片引脚

引脚定义:
No. Pin Name I/O Description
1 SDA2 I/O DDC Data
2 SCL2 I/O DDC Clock
3 TXD1 O Serial Port 1 TXD
4 RXD1 I RXD(do not leave open)
5 NC Not Connected
6 VCC I Supply voltage
7 GND I Ground(digital)
8 VCC_OUT O Output volage
9 CFG_COM1 I Configuration Pin
10 RESET_N I
11 V_BCKP I Backup voltage supply
12 Reserved
13 GND I Ground
14 GND I Ground
15 GND I Ground
16 RF_IN I GPS signal out
17 GND I Ground
18 VCC_RF O Output voltage RF section
19 V_ANT I Antenna Bias voltage
20 AADET0_N I Active Antenna Detect
21 NC Not Connected
22 NC Not Connected
23 NC Not Connected
24 VDDUSB I USB Supply
25 USB_DM I/O USB Data
26 USB_DP I/O USB Data
27 EXTINT0 I External Interrup Pin
28 TIMEPULSE O Time Pulse(1PPS)
布局结构

//======================================================================
//======================================================================
// 工程名称: XC-GPS开发板测试程序 基于XC-STC单片机开发板
// 文件名称: main.c
// 功能描述: GPS模组接收定位信息,在LCD上显示
// 头文件: LCD.h GPS.h display.h
// 程序分析: GPS模组通过串口向单片机发送固定格式的数据
// 单片机的串口接收到数据后,进行解析,在LCD上显示
// 定位信息包括:
// 日期时间,经纬度,速度,航向,海拔高度,使用卫星数量
// 硬件连接: 连接方法请参考《XC-GPS开发板使用手册》 程序使用串口2
// 维护记录: 2011-03-12 V2.0 xgc移植到XC-STC开发板
//======================================================================
#include "system/inc/HeaderFileAll.H"
#include "system/inc/def.h"
#include <stdio.h>
#include <string.h>
U8 code init4[] = {"搜索定位卫星...."};
//LED_1 接收数据指示灯
//LED_2 GPRMC数据有效指示灯
//LED_3 GPGGA数据有效指示灯
//==========================================================
#define REV_YES LED_1 = 0
#define REV_NO LED_1 = 1
#define RMC_YES LED_2 = 0
#define RMC_NO LED_2 = 1
#define GGA_YES LED_3 = 0
#define GGA_NO LED_3 = 1
U8 rev_start = 0; //接收开始标志
U8 rev_stop = 0; //接收停止标志
U8 gps_flag = 0; //GPS处理标志
U8 change_page = 0; //换页显示标志
U8 num = 0; //接收缓存数组下标
显示文字初始化
/****************************************/
void GPS_Init(void)
{
LCD_12864_CoordinateString(0, 0, init1);
LCD_12864_CoordinateString(1, 0, init2);
LCD_12864_CoordinateString(2, 0, init3);
LCD_12864_CoordinateString(3, 0, init4);
}
串口初始化
/****************************************/
void Uart_Init(void)
{
EA = 0;
TMOD = 0x01;
TH0 = 0x3c;
TL0 = 0xb0;
AUXR &= 0xf7; //波特率不倍速
S2CON = 0x50; //8位数据,可变波特率
BRT = BPS_9600; //设定独立波特率发生器重装值
AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
AUXR |= 0x10; //启动独立波特率发生器
IE2 |= ES2; //开串口2
TR0 = 1; //开定时器
ET0 = 1; //定时器1中断允许
EA = 1; //全局中断 开
}
主函数
/****************************************/
void main(void)
{
U8 error_num = 0;
Uart_Init(); //初始化串口
LCD_12864_Init();//初始化LCD
GPS_Init(); //初始化GPS
{
if (rev_stop) //如果接收完一行
{
TR0 = 1; //开启定时器
REV_YES;
if (change_page % 2 == 1) //换页
{
if (GPS_GGA_Parse(rev_buf, &GPS)) //解析GPGGA
{
GGA_YES;
GPS_DisplayTwo(); //显示第二页信息
error_num = 0;
gps_flag = 0;
rev_stop = 0;
REV_NO;
}
else
{
error_num++;
if (error_num >= 20) //如果数据无效超过20次
{
GGA_NO;
error_num = 20;
GPS_Init(); //返回初始化
}
gps_flag = 0;
rev_stop = 0;
REV_NO;
}
}
else
{
if (GPS_RMC_Parse(rev_buf, &GPS)) //解析GPRMC
{
RMC_YES;
GPS_DisplayOne(); //显示GPS第一页信息
error_num = 0;
gps_flag = 0;
rev_stop = 0;
REV_NO;
}
else
{
error_num++;
if (error_num >= 20) //如果数据无效超过20次
{
RMC_NO;
error_num = 20;
GPS_Init(); //返回初始化
}
gps_flag = 0;
rev_stop = 0;
REV_NO;
}
}
}
}
}
定时器中断
/****************************************/
void timer0(void) interrupt 1
{
static U16 count = 0;
TH0 = 0x3c;
TL0 = 0xb0;
count++;
if (count == 500) //10秒钟
{
count = 0;
change_page++; //换页
if (change_page == 10)
change_page = 0;
}
}
串口接收中断
/****************************************/
void SUBF_Interrupt_Receive(void) interrupt UART2_INTNO
{
U8 ch;
U8 Temp_RI = 0;
Temp_RI = S2CON & 0X01;
if (1 == Temp_RI)
{
ch = S2BUF;
if ((ch == '$') && (gps_flag == 0)) //如果收到字符'$',便开始接收
{
rev_start = 1;
rev_stop = 0;
}
if (rev_start == 1) //标志位为1,开始接收
{
rev_buf[num++] = ch; //字符存到数组中
if (ch == '\n') //如果接收到换行
{
rev_buf[num] = '\0';
rev_start = 0;
rev_stop = 1;
gps_flag = 1;
num = 0;
}
}
}
ES = 1;
}
