一、概述
由于做項(xiàng)目要用到GPS定位,于是在某寶購(gòu)買(mǎi)了這款GPS模塊。項(xiàng)目采用的MCU是STM32。廢話(huà)少說(shuō),進(jìn)入正題。
二、GPS模塊簡(jiǎn)介
Air530 模塊是一款高性能、高集成度的多模衛(wèi)星定位導(dǎo)航模塊。體積小、功耗低,可用于車(chē)載導(dǎo) 航、智能穿戴、無(wú)人機(jī)等 GNSS 定位的應(yīng)用中。而且提供了和其他模塊廠商兼容的軟、硬件接口,大幅 減少了用戶(hù)的開(kāi)發(fā)周期。 模塊支持GPS/Beidou/GLONASS/Galileo/QZSS/SBAS。采用了射頻基帶一體化設(shè)計(jì),集成了 DC/DC、 LDO、 LNA、射頻前端、基帶處理、32 位 RISC CPU、RAM、FLASH 存儲(chǔ)、RTC 和電源管理等功能。提供 超高的性能,即使在弱信號(hào)的地方,也能快速、準(zhǔn)確的定位。
這個(gè)模塊有五個(gè)引腳。如果只是簡(jiǎn)單的定位玩一下的話(huà),那個(gè)1pps引腳不用也可以。
VDD 供電電源,電壓輸入 范圍 3.3V-5.5V
TXD GPS 串口數(shù)據(jù)輸出, 2.8V--5V 自適應(yīng)
RXD GPS 串口數(shù)據(jù)輸入, 2.8V--5V 自適應(yīng)
1PPS One plus per second(2.8V)
GND 接地
三、STM32驅(qū)動(dòng)程序編寫(xiě)
1.NMEA協(xié)議
在編寫(xiě)驅(qū)動(dòng)程序前一定要知道NMEA協(xié)議。NMEA是(National Marine Electronics Association )為海用電子設(shè)備制定的標(biāo)準(zhǔn)格式。NMEA縮寫(xiě),同時(shí)也是數(shù)據(jù)傳輸標(biāo)準(zhǔn)工業(yè)協(xié)會(huì),在這里,實(shí)際上應(yīng)為NMEA 0183。它是一套定義接收機(jī)輸出的標(biāo)準(zhǔn)信息,有幾種不同的格式,每種都是獨(dú)立相關(guān)的ASCII格式,逗點(diǎn)隔開(kāi)數(shù)據(jù)流,數(shù)據(jù)流長(zhǎng)度從30-100字符不等,通常以每秒間隔選擇輸出,最常用的格式為"GGA",它包含了定位時(shí)間,緯度,經(jīng)度,高度,定位所用的衛(wèi)星數(shù),DOP值,差分狀態(tài)和校正時(shí)段等,其他的有速度,跟蹤,日期等。NMEA實(shí)際上已成為所有的GPS接收機(jī)和最通用的數(shù)據(jù)輸出格式,同時(shí)它也被用于與GPS接收機(jī)接口的大多數(shù)的軟件包里。NMEA-0183協(xié)議定義的語(yǔ)句非常多,但是常用的或者說(shuō)兼容性最廣的語(yǔ)句只有$GPGGA、$GPGSA、$GPGSV、$GPRMC、$GPVTG、$GPGLL等。
AIR530 模塊支持 NMEA 0183 V4.1 協(xié)議并兼容以前版本,關(guān)于 NMEA 0183 V4.1 的詳細(xì)信息請(qǐng)參照 NMEA 0183 V4.1 官方文檔。
GGA:時(shí)間、位置、衛(wèi)星數(shù)量
GLL:經(jīng)度、緯度、 UTC 時(shí)間
GSA:GPS 接收機(jī)操作模式,定位使用的衛(wèi)星,DOP 值,定位狀態(tài)
GSV:可見(jiàn) GPS 衛(wèi)星信息、仰角、方位角、信噪比
RMC:時(shí)間、日期、位置、速度 VTG:地面速度信息
2.驅(qū)動(dòng)開(kāi)發(fā)
gps頭文件
/*****************************************************
消息 :$GPRMC,100646.000,A,3109.9704,N,12123.4219,E,0.257,335.62,291216,,,A*59
ID : $GPRMC RMC 協(xié)議頭
UTC時(shí)間: 100646.000 hhmmss.sss
狀態(tài): A A=數(shù)據(jù)有效;V=數(shù)據(jù)無(wú)效
緯度 : 2109.9704 ddmm.mmmm
N/S: N N=北,S=南
經(jīng)度: 11123.4219 dddmm.mmmm
E/W : E W=西,E=東
地面速度: 0.257 Knot(節(jié))
方位: 335.62 度
日期 291216 ddmmyy
磁變量 無(wú)
校驗(yàn)和 *59
******************************************************/ #ifndef __GPS__H #define __GPS__H #include "sys.h" #include "usart.h" #include "stdint.h" #include "string.h" #include "stdlib.h" //啟動(dòng)命令 #define HotStart "$PGKC030,1,1*2Crn" //Gps系統(tǒng)熱啟動(dòng) #define WarmStart "$PGKC030,2,1*2Frn" //Gps系統(tǒng)溫啟動(dòng) #define ColdStart "$PGKC030,3,1*2Ern" //Gps系統(tǒng)冷啟動(dòng) #define ReColdStart "$PGKC030,4,1*29rn" //Gps系統(tǒng)重置冷啟動(dòng) // 衛(wèi)星定位模式設(shè)置 #define SingleGps "$PGKC115,1,0,0,0*2Brn" //單 GPS #define GPSandBEIDOU "$PGKC115,1,0,1,0*2Arn" //GPS+BEIDOU #define GPSandGLONASS "$PGKC115,1,1,0,0*2Arn" //GPS+GLONASS // 低功耗模式設(shè)置 #define LPsleep "$PGKC051,1*36rn" // sleep 模式 #define LPstop "$PGKC051,0*37rn" // stop 模式 /****************************************** //配置輸出 NMEA 消息的間隔(ms 單位) Arg1: 200-10000 ******************************************/ #define delay1sNMEA "$PGKC101,1000*02rn" // 間隔1ms /****************************************** //開(kāi)啟或關(guān)閉 QZSS NMEA格式輸出 Arg1: “0”,關(guān)閉 “1”,開(kāi)啟 ******************************************/ #define OpenNMEA "$PGKC113,1*31rn" #define CloseNMEA "$PGKC113,0*30rn" //設(shè)置 NMEA 輸出波特率 #define SetBps115200 "$PGKC147,115200*06rn" //加速定位信息 #define MoreFast "$PGKC639,34.093145,108.542323,0,2019,05,04,02,43,54*05rn" /******************************************* 設(shè)置 NMEA 語(yǔ)句輸出使能 Arg1: GLL “0”,關(guān)閉; “1”,打開(kāi) Arg2: RMC “0”,關(guān)閉; “1”,打開(kāi) Arg3: VTG “0”,關(guān)閉; “1”,打開(kāi) Arg4: GGA “0”,關(guān)閉; “1”,打開(kāi) Arg5: GSA “0”,關(guān)閉; “1”,打開(kāi) Arg6: GSV “0”,關(guān)閉; “1”,打開(kāi) Arg7: GRS “0”,關(guān)閉; “1”,打開(kāi) Arg8: GST “0”,關(guān)閉; “1”,打開(kāi) Arg9~ Arg19: 保留 *******************************************/ #define EnableRMC "$PGKC242,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*36rn" //擦除 flash 中的輔助定位數(shù)據(jù) #define DeleteFlash "$PGKC040*2Brn" //開(kāi)啟或關(guān)閉 SBAS 功能 #define CloseSBAS "$PGKC239,1*3Arn"http://關(guān)閉SBAS 功能 #define OpenSBAS "$PGKC239,0*3Brn"http://開(kāi)啟SBAS 功能 //RMC_DATA結(jié)構(gòu)體 typedef struct RMC_DATA{ char time[12]; //UTC時(shí)間 char state[12]; //狀態(tài) char lat[12]; //緯度 char NS[2]; //N/S指示 char WE[2]; //W/E指示 char lng[12]; //經(jīng)度 char date[12]; //日期 }rmc_data; //錯(cuò)誤信息上傳數(shù)據(jù)幀 typedef struct WARNING{ char start;//幀頭 u8 WarningFlag;//從最低位到最高為分別表示:電池電量警告,GPS定位失敗警告,電子圍欄越界警告,跌倒警告,其他暫時(shí)預(yù)留。 char end;//結(jié)束標(biāo)志 }Warning; //定位信息上傳數(shù)據(jù)幀 typedef struct OPSITIONDATA{ char start; char time[12]; //UTC時(shí)間 char state[12]; //狀態(tài) char lat[12]; //緯度 char NS[2]; //N/S指示 char lng[12]; //經(jīng)度 char WE[2]; //W/E指示 char date[12]; //日期 char end; }OpsitionData; //心率信息上傳數(shù)據(jù)幀 typedef struct HEARTRATEDATA{ char start; u8 HeartRate;//心率次數(shù) char end; }HeartRateData; extern rmc_data RecRMC; extern rmc_data * const pRecRMC; //RMC解析輸出緩存區(qū),該指針指向固定的地址 void SendAtToGps(u8 *cmd); u8 GpsAckChack(u8 *str); void Gps_Init(void); void AnalysisRMC(rmc_data *pRecRMC); void GpsRMCdataShow(void); u8 OverStepArea(rmc_data *pRecRMC); void mixGpsdate(char * ULdate,rmc_data *pRecRMC); #endif GPS驅(qū)動(dòng)函數(shù) #include "gps.h" /************************************* 功能:發(fā)送數(shù)據(jù)到Gps模塊 作者:賀遠(yuǎn) 日期:2019.03.05 參數(shù):cmd AT命令 返回值:無(wú) **************************************/ void SendAtToGps(u8 *cmd) { while(*cmd!='
主站蜘蛛池模板:
古交市|
西畴县|
临安市|
鄂伦春自治旗|
民权县|
嘉义县|
顺昌县|
赞皇县|
德兴市|
玉林市|
芷江|
绩溪县|
邵阳县|
措勤县|
洮南市|
威海市|
拜城县|
扶沟县|
定结县|
东乌珠穆沁旗|
桓台县|
瓦房店市|
洛隆县|
三河市|
磐石市|
潜山县|
武城县|
沭阳县|
南靖县|
青田县|
寿光市|
铜陵市|
莒南县|
肃宁县|
康马县|
南澳县|
保康县|
鄂尔多斯市|
闸北区|
玉环县|
苗栗县|