atk-s1216f8-bd模塊使用說明戰(zhàn)艦v2miniv3_an1605a_W_第1頁
atk-s1216f8-bd模塊使用說明戰(zhàn)艦v2miniv3_an1605a_W_第2頁
atk-s1216f8-bd模塊使用說明戰(zhàn)艦v2miniv3_an1605a_W_第3頁
atk-s1216f8-bd模塊使用說明戰(zhàn)艦v2miniv3_an1605a_W_第4頁
atk-s1216f8-bd模塊使用說明戰(zhàn)艦v2miniv3_an1605a_W_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、AN1605A ATK-S1216F8 GPS/北斗模塊使用說明本應(yīng)用文檔(AN1605A,對應(yīng) MiniSTM32 開發(fā)板擴展實驗 16)將教大家如何在 ALIENTEK STM32 開發(fā)板上使用ATK-S1216F8-BD GPS/北斗模塊(注意,本文檔同時適用 ALIENTEK 戰(zhàn)艦和 MiniSTM32 兩款開發(fā)板),并實現(xiàn) GPS/北斗定位。 本文檔分為如下幾部分: 1, ATK-S1216F8-BD GPS/北斗模塊簡介 2, 硬件連接 3, 軟件實現(xiàn) 4, 驗證 1、ATK-S1216F8-BD GPS/北斗模塊簡介ATK-S1216F8-BD-V23 模塊,是 ALIENTEK

2、 生產(chǎn)的一款高性能 GPS/北斗模塊,模塊核心采用 SkyTraq 公司的 S1216F8-BD 模組,具有 167 個通道,追蹤靈敏度高達-165dBm,測量輸出頻率最高可達 20Hz。ATK-S1216F8-BD GSP/北斗模塊具有以下特點: 1, 模塊采用 S1216F8-BD 模組,體積小巧,性能優(yōu)異。 2, 模塊可通過串口進行各種參數(shù)設(shè)置,并可保存在內(nèi)部 FLASH,使用方便。 3, 模塊自帶 IPX 接口,可以連接各種有源天線,適應(yīng)能力強。 4, 模塊兼容 3.3V/5V 電平,方便連接各種單片機系統(tǒng)。 5, 模塊自帶可充電后備電池,可以掉電保持星歷數(shù)據(jù) 1。 注 1:在主電源斷

3、開后,后備電池可以維持半小時左右的 GPS/北斗星歷數(shù)據(jù)的保存,以支持溫啟動或熱啟動,從而實現(xiàn)快速定位。ATK-S1216F8-BD GPS/北斗模塊非常小巧(25mm*27mm),模塊通過 5 個 2.54mm 間距的 排針與外部連接,模塊外觀如圖 1.1 所示: 圖 1.1 ATK-S1216F8-BD GPS/北斗模塊外觀圖 圖 1.1 中,從右到左,依次為模塊引出的 PIN1PIN5 腳,各引腳的詳細描述如表 1.1 所示: 表 1.1 ATK-S1216F8-BDGPS/北斗模塊各引腳功能描述 其中,PPS 引腳同時連接到了模塊自帶了的狀態(tài)指示燈:PPS,該引腳連接在 UBLOX N

4、EO-6M 模組的 1PPS 端口,該端口的輸出特性可以通過程序設(shè)置。PPS 指示燈(即 PPS 引腳),在默認條件下(經(jīng)過程序設(shè)置),有 2 個狀態(tài): 1, 常亮,表示模塊已開始工作,但還未實現(xiàn)定位。 2, 閃爍(100ms 滅,900ms 亮),表示模塊已經(jīng)定位成功。 這樣,通過 PPS 指示燈,我們就可以很方便的判斷模塊的當前狀態(tài),方便大家使用。另外,圖 1.1 中,左上角的 IPX 接口,用來外接一個有源天線,通過外接有源天線,我 們就可以把模塊放到室內(nèi),天線放到室外,實現(xiàn)室內(nèi)定位。 ATK-S1216F8-BD 模塊默認采用 NMEA-0183 協(xié)議輸出 GPS/北斗定位數(shù)據(jù),并可以

5、通過SkyTraq 協(xié)議對模塊進行配置,NMEA-0183 協(xié)議詳細介紹請參考ATK-S1216F8-BD GPS/北斗用戶手冊.pdf, SkyTraq 配置協(xié)議,請參考Binary Messages of SkyTraq Venus 8 GNSS Receiver.pdf。 通過 ATK-S1216F8-BD GPS/北斗模塊,任何單片機(3.3V/5V 電源)都可以很方便的實現(xiàn)GPS/北斗定位,當然他也可以連接電腦,利用電腦軟件實現(xiàn)定位。ATK-S1216F8-BD GPS/北斗模塊的原理圖如圖 1.2 所示: 圖 1.2 ATK-S1216F8-BD GPS/北斗模塊原理圖 序號名稱說

6、明1VCC電源(3.3V5.0V) 2GND地 3TXD模塊串口發(fā)送腳(TTL 電平,不能直接接 RS232 電平!),可接單片機的 RXD4RXD模塊串口接收腳(TTL 電平,不能直接接 RS232 電平!),可接單片機的 TXD5PPS時鐘脈沖輸出腳 2、硬件連接本實驗功能簡介:通過串口 2 連接 ATK-S1216F8-BD GPS/北斗模塊,然后通過液晶顯示GPS/北斗信息,包括精度、緯度、高度、速度、用于定位的數(shù)、可見數(shù)、UTC 時間等信息。同時,可以通過USMART 工具,設(shè)置 GPS/北斗模塊的刷新速率(最大支持 20Hz 刷新率)和時鐘脈沖的配置。另外,通過KEY0 按鍵,可以

7、開啟或關(guān)閉 NMEA 數(shù)據(jù)的上傳(即輸出到串口 1,方便開發(fā)調(diào)試)。 所要用到的硬件資源如下: 1, 指示燈 DS02, KEY0 按鍵 3, 串口 1、串口 24, TFTLCD 模塊 5, ATK-S1216F8-BD GPS/北斗模塊 接下來,我們看看 ATK-S1216F8-BD GPS/北斗模塊同 ALIENTEK STM32 開發(fā)板的連接,前面我們介紹了ATK-S1216F8-BD 模塊的接口,我們通過杜邦線連接模塊和開發(fā)板的相應(yīng)端口, 連接關(guān)系如表 2.1 所示: 表 2.1 ATK-S1216F8-BD GPS/北斗模塊同 ALIENTEK STM32 開發(fā)板連接關(guān)系表 表中

8、ATK-S1216F8-BD GPS/北斗模塊的 VCC,因為我們的模塊是可以 3.3V 或 5V 供電的, 所以可以接開發(fā)板的 3.3V 電源,也可以接開發(fā)板的 5V 電源,這個隨便大家自己選擇。另外,這里我們沒有用到模塊的 PPS 引腳,所以沒有和單片機進行連接。 3、軟件實現(xiàn) 本實驗(注:這里僅以 MiniSTM32 開發(fā)板,詳見 MiniSTM32 開發(fā)板擴展實驗 16),我們在擴展例程:ATK-HC05 藍牙串口模塊實驗的基礎(chǔ)上修改,本例程用不到藍牙模塊,所以先刪掉 hc05.c。 然后,在 HARDWARE 文件夾里面新建一個 GPS 文件夾,并新建 gps.c,gps.h 兩個文

9、件。然后在工程HARDWARE 組里面添加 gps.c,并在工程添加 gps.h 的頭文件包含路徑。 在 gps.c 里面,我們輸入如下代碼: #include gps.h #include led.h #include delay.h #include usart3.h #include stdio.h #include stdarg.h #include string.h #include math.h/const u32 BAUD_id9=4800,9600,19200,38400,57600,115200,230400,460800,921600;/從 buf 里面得到第 cx 個逗號

10、所在的位置 /返回值:00XFE,代表逗號所在位置的偏移./0XFF,代表不存在第 cx 個逗號 ATK-S1216F8-BD GPS/北斗模塊與開發(fā)板連接關(guān)系 ATK-S1216F8-BD GPS/北斗模塊 VCCGNDTXDRXDALIENTEK STM32 開發(fā)板 3.3V/5VGNDPA3PA2u8 NMEA_Comma_Pos(u8 *buf,u8 cx)u8 *p=buf; while(cx)if(*buf=*|*bufz)return 0XFF;/遇到*或者非法字符,則不存在第 cx 個逗號 if(*buf=,)cx-; buf+;return buf-p;/mn 函數(shù) /返回值

11、:mn 次方.u32 NMEA_Pow(u8 m,u8 n)u32 result=1; while(n-)result*=m; return result;/str 轉(zhuǎn)換為數(shù)字,以,或者*結(jié)束 /buf:數(shù)字存儲區(qū) /dx:小數(shù)點位數(shù),返回給調(diào)用函數(shù) /返回值:轉(zhuǎn)換后的數(shù)值 int NMEA_Str2num(u8 *buf,u8*dx)u8 *p=buf;u32 ires=0,fres=0; u8 ilen=0,flen=0,i; u8 mask=0;int res;while(1) /得到整數(shù)和小數(shù)的長度 if(*p=-)mask|=0X02;p+;/是負數(shù)if(*p=,|(*p=*)bre

12、ak;/遇到結(jié)束了if(*p=.)mask|=0X01;p+;/遇到小數(shù)點了else if(*p9|(*p0)/有非法字符 ilen=0; flen=0; break;if(mask&0X01)flen+; else ilen+;p+;if(mask&0X02)buf+; /去掉負號for(i=0;i5)flen=5;*dx=flen;/最多取 5 位小數(shù)/小數(shù)點位數(shù) for(i=0;isvnum=NMEA_Str2num(p1+posx,&dx); for(i=0;ilen;i+)p1=(u8*)strstr(const char *)p,$GPGSV); for(j=0;jslmsgslx

13、.num=NMEA_Str2num(p1+posx,&dx);/ 得 到 else break;編號posx=NMEA_Comma_Pos(p1,5+j*4);if(posx!=0XFF)gpsx-slmsgslx.eledeg=NMEA_Str2num(p1+posx,&dx);/ 得 到 else break;posx=NMEA_Comma_Pos(p1,6+j*4);仰角if(posx!=0XFF)gpsx-slmsgslx.azideg=NMEA_Str2num(p1+posx,&dx);/得到else break;方位角posx=NMEA_Comma_Pos(p1,7+j*4);if

14、(posx!=0XFF)gpsx-slmsgslx.sn=NMEA_Str2num(p1+posx,&dx);/ 得 到 else break;slx+;信噪比p=p1+1;/切換到下一個GPGSV 信息 /分析 BDGSV 信息 /gpsx:nmea 信息結(jié)構(gòu)體 /buf:接收到的北斗數(shù)據(jù)緩沖區(qū)首地址 void NMEA_BDGSV_Analysis(nmea_msg *gpsx,u8 *buf)u8 *p,*p1,dx; u8 len,i,j,slx=0; u8 posx; p=buf;p1=(u8*)strstr(const char *)p,$BDGSV); len=p17-0;pos

15、x=NMEA_Comma_Pos(p1,3);/得到 BDGSV 的條數(shù) /得到可見北斗總數(shù)if(posx!=0XFF)gpsx-beidou_svnum=NMEA_Str2num(p1+posx,&dx); for(i=0;ilen;i+)p1=(u8*)strstr(const char *)p,$BDGSV); for(j=0;jbeidou_slmsgslx.beidou_num=NMEA_Str2num(p1+posx,&dx);/得到編號 else break; posx=NMEA_Comma_Pos(p1,5+j*4);if(posx!=0XFF)gpsx-beidou_slms

16、gslx.beidou_eledeg=NMEA_Str2num(p1+posx,&dx);/得到仰角 else break; posx=NMEA_Comma_Pos(p1,6+j*4);if(posx!=0XFF)gpsx-beidou_slmsgslx.beidou_azideg=NMEA_Str2num(p1+posx,&dx);/得到方位角 else break;posx=NMEA_Comma_Pos(p1,7+j*4);if(posx!=0XFF)gpsx-beidou_slmsgslx.beidou_sn=NMEA_Str2num(p1+posx,&dx);/得到信噪比 else b

17、reak; slx+;p=p1+1;/切換到下一個BDGSV 信息 /分析 GNGGA 信息 /gpsx:nmea 信息結(jié)構(gòu)體 /buf:接收到的 GPS/北斗數(shù)據(jù)緩沖區(qū)首地址 void NMEA_GNGGA_Analysis(nmea_msg *gpsx,u8 *buf)u8 *p1,dx; u8 posx;p1=(u8*)strstr(const char *)buf,$GNGGA); posx=NMEA_Comma_Pos(p1,6);if(posx!=0XFF)gpsx-gpssta=NMEA_Str2num(p1+posx,&dx);posx=NMEA_Comma_Pos(p1,7)

18、;/得到 GPS 狀態(tài)/得到用于定位的數(shù) if(posx!=0XFF)gpsx-posslnum=NMEA_Str2num(p1+posx,&dx); posx=NMEA_Comma_Pos(p1,9);if(posx!=0XFF)gpsx-altitude=NMEA_Str2num(p1+posx,&dx);/得到海拔高度/分析 GNGSA 信息 /gpsx:nmea 信息結(jié)構(gòu)體 /buf:接收到的 GPS/北斗數(shù)據(jù)緩沖區(qū)首地址 void NMEA_GNGSA_Analysis(nmea_msg *gpsx,u8 *buf)u8 *p1,dx; u8 posx; u8 i;p1=(u8*)s

19、trstr(const char *)buf,$GNGSA); posx=NMEA_Comma_Pos(p1,2);if(posx!=0XFF)gpsx-fixmode=NMEA_Str2num(p1+posx,&dx); for(i=0;ipossli=NMEA_Str2num(p1+posx,&dx);else break;posx=NMEA_Comma_Pos(p1,15);/得到 PDOP 位置精度因子 if(posx!=0XFF)gpsx-pdop=NMEA_Str2num(p1+posx,&dx); posx=NMEA_Comma_Pos(p1,16);/得到 HDOP 位置精度因

20、子 if(posx!=0XFF)gpsx-hdop=NMEA_Str2num(p1+posx,&dx); posx=NMEA_Comma_Pos(p1,17);/得到 VDOP 位置精度因子 if(posx!=0XFF)gpsx-vdop=NMEA_Str2num(p1+posx,&dx);/分析 GNRMC 信息 /gpsx:nmea 信息結(jié)構(gòu)體 /buf:接收到的 GPS/北斗數(shù)據(jù)緩沖區(qū)首地址 void NMEA_GNRMC_Analysis(nmea_msg *gpsx,u8 *buf)u8 *p1,dx; u8 posx; u32 temp; float rs;p1=(u8*)strs

21、tr(const char *)buf,$GNRMC);/$GNRMC,經(jīng)常有&和GNRMC 分開的情況,故只判斷 GPRMC. posx=NMEA_Comma_Pos(p1,1);/得到 UTC 時間 if(posx!=0XFF)temp=NMEA_Str2num(p1+posx,&dx)/NMEA_Pow(10,dx);/得到 UTC 時間,去掉 ms gpsx-utc.hour=temp/10000;gpsx-utc.min=(temp/100)%100; gpsx-utc.sec=temp%100;posx=NMEA_Comma_Pos(p1,3);/得到緯度if(posx!=0XFF

22、)temp=NMEA_Str2num(p1+posx,&dx);gpsx-latitude=temp/NMEA_Pow(10,dx+2);rs=temp%NMEA_Pow(10,dx+2);/得到/得到gpsx-latitude=gpsx-latitude*NMEA_Pow(10,5)+(rs*NMEA_Pow(10,5-dx)/60;/轉(zhuǎn)換為 posx=NMEA_Comma_Pos(p1,4); if(posx!=0XFF)gpsx-nshemi=*(p1+posx);posx=NMEA_Comma_Pos(p1,5);/南緯還是北緯/得到經(jīng)度if(posx!=0XFF)temp=NMEA_

23、Str2num(p1+posx,&dx);gpsx-longitude=temp/NMEA_Pow(10,dx+2);/得到rs=temp%NMEA_Pow(10,dx+2);/得到gpsx-longitude=gpsx-longitude*NMEA_Pow(10,5)+(rs*NMEA_Pow(10,5-dx)/60;/轉(zhuǎn)換為 posx=NMEA_Comma_Pos(p1,6); if(posx!=0XFF)gpsx-ewhemi=*(p1+posx); posx=NMEA_Comma_Pos(p1,9); if(posx!=0XFF)temp=NMEA_Str2num(p1+posx,&d

24、x); gpsx-utc.date=temp/10000;gpsx-utc.month=(temp/100)%100; gpsx-utc.year=2000+temp%100;/東經(jīng)還是西經(jīng)/得到 UTC 日期/得到 UTC 日期/分析 GNVTG 信息 /gpsx:nmea 信息結(jié)構(gòu)體 /buf:接收到的 GPS/北斗數(shù)據(jù)緩沖區(qū)首地址 void NMEA_GNVTG_Analysis(nmea_msg *gpsx,u8 *buf)u8 *p1,dx; u8 posx;p1=(u8*)strstr(const char *)buf,$GNVTG); posx=NMEA_Comma_Pos(p1

25、,7); if(posx!=0XFF)gpsx-speed=NMEA_Str2num(p1+posx,&dx); if(dxspeed*=NMEA_Pow(10,3-dx);/確保擴大 1000 倍 /提取 NMEA-0183 信息 /gpsx:nmea 信息結(jié)構(gòu)體 /buf:接收到的 GPS/北斗數(shù)據(jù)緩沖區(qū)首地址void GPS_Analysis(nmea_msg *gpsx,u8 *buf)/得到地面速率NMEA_GPGSV_Analysis(gpsx,buf);NMEA_BDGSV_Analysis(gpsx,buf); NMEA_GNGGA_Analysis(gpsx,buf);/GP

26、GSV 解析 /BDGSV 解析 /GNGGA 解析NMEA_GNGSA_Analysis(gpsx,buf); /GNGSA 解析 NMEA_GNRMC_Analysis(gpsx,buf); /GNRMC 解析NMEA_GNVTG_Analysis(gpsx,buf); /GNVTG 解析 /SkyTraq 配置代碼/檢查 CFG 配置執(zhí)行情況 /返回值:0,ACK 成功 /1,接收超時錯誤 2,沒有找到同步字符 3,接收到NACK 應(yīng)答 u8 SkyTra_Cfg_Ack_Check(void)u16 len=0,i; u8 rval=0;while(USART3_RX_STA&0X80

27、00)=0 & len100)/等待接收到應(yīng)答len+; delay_ms(5);if(len100)/超時錯誤.len=USART3_RX_STA&0X7FFF;for(i=0;isos=0XA1A0;cfg_prt-PL=0X0400;/引導(dǎo)序列(小端模式)/有效數(shù)據(jù)長度(小端模式)cfg_prt-id=0X05; cfg_prt-com_port=0X00;cfg_prt-Baud_id=baud_id;cfg_prt-Attributes=1;/配置波特率的 ID/操作串口 1/波特率對應(yīng)編號 /保存到 SRAM&FLASHcfg_prt-CS=cfg_prt-idcfg_prt-co

28、m_portcfg_prt-Baud_idcfg_prt-Attributes;cfg_prt-end=0X0A0D;/發(fā)送結(jié)束符(小端模式)SkyTra_Send_Date(u8*)cfg_prt,sizeof(SkyTra_baudrate);/發(fā)送數(shù)據(jù)給SkyTraF8delay_ms(200);/等待發(fā)送完成usart3_init(36,BAUD_idbaud_id);return SkyTra_Cfg_Ack_Check();/重新初始化串口 3/這里不會返回 0,因為 SkyTra 發(fā)回來的應(yīng)答在串口重新初始化的時候已經(jīng)被丟棄了./配置 SkyTra_GPS/北斗模塊的時鐘脈沖寬度

29、 /width:脈沖寬度 1100000(us)/返回值:0,發(fā)送成功;其他,發(fā)送失敗. u8 SkyTra_Cfg_Tp(u32 width)u32 temp=width;SkyTra_pps_width *cfg_tp=(SkyTra_pps_width *)USART3_TX_BUF; temp=(width24)|(width8)&0X0000FF00)|(width8)&0X00FF0000)|(widthsos=0XA1A0; cfg_tp-PL=0X0700; cfg_tp-id=0X65; cfg_tp-Sub_ID=0X01; cfg_tp-width=temp;cfg_tp

30、-Attributes=0X01;/小端模式 /cfg header(小端模式)/有效數(shù)據(jù)長度(小端模式)/cfg tp id/數(shù)據(jù)區(qū)長度為 20 個字節(jié)./脈沖寬度,us/保存到 SRAM&FLASHcfg_tp-CS=cfg_tp-idcfg_tp-Sub_ID(cfg_tp-width24)(cfg_tp-width16)&0XFF(cfg_tp-width8)&0XFFcfg_tp-width&0XFFcfg_tp-Attributes;cfg_tp-end=0X0A0D;/發(fā)送結(jié)束符(小端模式)SkyTra_Send_Date(u8*)cfg_tp,sizeof(SkyTra_pps

31、_width);return SkyTra_Cfg_Ack_Check();/發(fā)送數(shù)據(jù)給 SkyTra/配置 SkyTraF8-BD 的更新速率 /Frep:(取值范圍:1,2,4,5,8,10,20)測量時間間隔,單位為Hz,最大不能大于 20Hz/返回值:0,發(fā)送成功;其他,發(fā)送失敗. u8 SkyTra_Cfg_Rate(u8 Frep)SkyTra_PosRate *cfg_rate=(SkyTra_PosRate *)USART3_TX_BUF;cfg_rate-sos=0XA1A0; cfg_rate-PL=0X0300; cfg_rate-id=0X0E; cfg_rate-ra

32、te=Frep;cfg_rate-Attributes=0X01;/cfg header(小端模式)/有效數(shù)據(jù)長度(小端模式)/cfg rate id/更新速率 /保存到 SRAM&FLASH.這部分代碼可以分為 2 個部分,第一部分是 NMEA-0183 數(shù)據(jù)解析部分,另外一部分則是 SkyTraq 協(xié)議控制部分。 NMEA-0183 協(xié)議解析部分,這里利用了一個簡單的數(shù)逗號方法來解析。我們知道NMEA-0183 協(xié)議都是以類似$GPGSV 的開頭,然后固定輸出格式,不論是否有數(shù)據(jù)輸出, 逗號是肯定會有的,而且都會以*作為有效數(shù)據(jù)的結(jié)尾,所以,我們了解了 NMEA-0183 協(xié)議的數(shù)據(jù)格式(

33、在 ATK-S1216F8-BD GPS/北斗模塊的用戶手冊有詳細介紹)之后,就可以通過數(shù)逗號的方法,來解析數(shù)據(jù)了。本代碼實現(xiàn)了對 NMEA-0183 協(xié)議的$GNGGA、 $GPGSA、$GNGSV、$BDGSV、$GNRMC 和$GNVTG 等 6 類幀的解析,結(jié)果存放在通過 gps.h 定義的 nmea_msg 結(jié)構(gòu)體內(nèi)。 SkyTraq 協(xié)議控制部分,此部分我們只實現(xiàn)了 SkyTraF8-BD 模組常用的 3 個配置:串口波特率設(shè)置、PPS 輸出脈沖寬度設(shè)置、輸出頻率設(shè)置。 串口波特率設(shè)置,通過函數(shù) SkyTra_Cfg_Prt 實現(xiàn),該函數(shù)可以設(shè)置模塊的波特率。 PPS 輸出脈沖寬度

34、設(shè)置, 通過函數(shù) SkyTra_Cfg_Tp 實現(xiàn),可以設(shè)置脈沖寬度 (1us100ms)。 輸出頻率設(shè)置,通過函數(shù) SkyTraq_Cfg_Rate 實現(xiàn),該函數(shù)可以設(shè)置模塊的測量輸出頻率,最快可以達到 20Hz 的測量輸出頻率。 最后 SkyTraq_Send_Date 函數(shù),用于發(fā)送一批設(shè)置好的數(shù)據(jù)給串口 3,完成對 GPS 模塊的配置。 我們將這 3 個函數(shù)都加入 USMART 控制,方便大家測試。另外要在 usart3.h 里面,將 USART3_MAX_RECV_LEN 的值設(shè)置為 800,。然后在 gps.h 里面,我們輸入如下代碼: #ifndef GPS_H #define

35、GPS_H #include sys.h/GPS NMEA-0183 協(xié)議重要參數(shù)結(jié)構(gòu)體定義 / 信 息 packed typedef structcfg_rate-CS=cfg_rate-idcfg_rate-ratecfg_rate-Attributes;/ 脈 沖 間 隔 ,us cfg_rate-end=0X0A0D;/ 發(fā) 送 結(jié) 束 符 ( 小 端 模 式 ) SkyTra_Send_Date(u8*)cfg_rate,sizeof(SkyTra_PosRate);/發(fā)送數(shù)據(jù)給 SkyTra return SkyTra_Cfg_Ack_Check();/發(fā)送一批數(shù)據(jù)給 SkyTra

36、F8-BD,這里通過串口 3 發(fā)送 /dbuf:數(shù)據(jù)緩存首地址 /len:要發(fā)送的字節(jié)數(shù) void SkyTra_Send_Date(u8* dbuf,u16 len)u16 j;for(j=0;jSR&0X40)=0);/循環(huán)發(fā)送,直到發(fā)送完畢USART3-DR=dbufj;u8 num; u8 eledeg;u16 azideg; u8 sn;nmea_slmsg;/編號仰角 方位角/信噪比 /北斗 NMEA-0183 協(xié)議重要參數(shù)結(jié)構(gòu)體定義/信息 packed typedef structu8 beidou_num;u8 beidou_eledeg; / u16 beidou_azide

37、g; /仰角編號方位角u8 beidou_sn;/信噪比 beidou_nmea_slmsg;/UTC 時間信息 packed typedef structu16 year; /年份 u8 month;/月份u8 date; u8 hour; u8 min;u8 sec;/日期/小時/分鐘/秒鐘nmea_utc_time;/NMEA 0183 協(xié)議解析后數(shù)據(jù)存放結(jié)構(gòu)體 packed typedef structu8 svnum;u8 beidou_svnum; nmea_slmsg slmsg12;/可見 GPS/可見北斗/最多 12 顆 GPS數(shù) 數(shù) beidou_nmea_slmsg be

38、idou_slmsg12;/暫且算最多 12 顆北斗nmea_utc_time utc; u32 latitude;u8 nshemi; u32 longitude; u8 ewhemi;u8 gpssta;/UTC 時間 /緯度 分擴大 100000 倍,實際要除以 100000/北緯/南緯,N:北緯;S:南緯 /經(jīng)度 分擴大 100000 倍,實際要除以 100000/東經(jīng)/西經(jīng),E:東經(jīng);W:西經(jīng) /GPS 狀態(tài):0,未定位;1,非差分定位;2,差分定位;6,正在估算.u8 posslnum; u8 possl12; u8 fixmode;u16 pdop;/用于定位的 GPS數(shù),012

39、./用于定位的編號 /定位類型:1,沒有定位;2,2D 定位;3,3D 定位/位置精度因子 0500,對應(yīng)實際值 050.0u16 hdop;u16 vdop;/水平精度因子 0500,對應(yīng)實際值 050.0/垂度因子 0500,對應(yīng)實際值 050.0int altitude;u16 speed;/海拔高度,放大了 10 倍,實際除以 10.單位:0.1m/地面速率,放大了 1000 倍,實際除以 10.單位:0.001 公里/小時 nmea_msg;/SkyTra S1216F8 配置波特率結(jié)構(gòu)體 packed typedef structu16 sos; u16 PL;u8 id;u8 c

40、om_port; u8 Baud_id;/啟動序列,固定為 0XA0A1/有效數(shù)據(jù)長度 0X0004; /ID,固定為 0X05/COM 口,固定為 0X00,即 COM1/波特率(08,4800,9600,19200,38400,57600,115200,230400,460800,921600)u8 Attributes;/配置數(shù)據(jù)保存位置u8 CS;u16 end;SkyTra_baudrate;,0 保存到 SRAM,1 保存到 SRAM&FLASH,2 臨時保存/校驗值 /結(jié)束符:0X0D0A/SkyTra S1216F8-BD 配置輸出信息結(jié)構(gòu)體 packed typedef st

41、ructu16 sos; u16 PL;u8 id;u8 GGA;/啟動序列,固定為 0XA0A1/有效數(shù)據(jù)長度 0X0009; /ID,固定為 0X08/1255(s),0:disable/1255(s),0:disable/1255(s),0:disable/1255(s),0:disable/1255(s),0:disable/1255(s),0:disable/1255(s),0:disableu8 u8u8GSA; GSV;GLL;u8 RMC; u8 VTG; u8 ZDA;u8 Attributes;/配置數(shù)據(jù)保存位置u8 CS;u16 end;SkyTra_outmsg;,0

42、保存到 SRAM,1 保存到 SRAM&FLASH,2 臨時保存/校驗值 /結(jié)束符:0X0D0A/SkyTra S1216F8-BD 配置位置更新率結(jié)構(gòu)體 packed typedef structu16 sos; u16 PL;u8 id; u8 rate;u8 Attributes;/啟動序列,固定為 0XA0A1/有效數(shù)據(jù)長度 0X0003; /ID,固定為 0X0E/取值范圍:1, 2, 4, 5, 8, 10, 20, 25, 40, 50/配置數(shù)據(jù)保存位置u8 CS;u16 end;SkyTra_PosRate;,0 保存到 SRAM,1 保存到 SRAM&FLASH,2 臨時保存

43、/校驗值 /結(jié)束符:0X0D0A/SkyTra S1216F8-BD 配置輸出脈沖(PPS)寬度結(jié)構(gòu)體 packed typedef structu16 sos; u16 PL;u8 id;u8 Sub_ID; u32 width; u8 Attributes;/啟動序列,固定為 0XA0A1/有效數(shù)據(jù)長度 0X0007; /ID,固定為 0X65/0X01/1100000(us)/配置數(shù)據(jù)保存位置u8 CS;u16 end;SkyTra_pps_width;,0 保存到 SRAM,1 保存到 SRAM&FLASH,2 臨時保存/校驗值 /結(jié)束符:0X0D0A/SkyTra S1216F8-B

44、D packed typedef structu16 sos; u16 PL;u8 id;u8 ACK_ID; u8 CS;u16 end;SkyTra_ACK;ACK 結(jié)構(gòu)體/啟動序列,固定為 0XA0A1/有效數(shù)據(jù)長度 0X0002; /ID,固定為 0X83/校驗值 /結(jié)束符/SkyTra S1216F8 -BD NACK 結(jié)構(gòu)體 packed typedef structu16 sos; u16 PL;u8 id;u8 NACK_ID; u8 CS;/啟動序列,固定為 0XA0A1/有效數(shù)據(jù)長度 0X0002; /ID,固定為 0X84/校驗值gps.h 里面的內(nèi)容,都有非常詳細的備注

45、,這里就不多說了。最后,在 test.c 里面,修改代碼如下: u8 USART1_TX_BUFUSART3_MAX_RECV_LEN;/串口 1,發(fā)送緩存區(qū) nmea_msg gpsx;/GPS 信息 align(4) u8 dtbuf50;/打印緩存器 const u8*fixmode_tbl4=Fail,Fail, 2D , 3D ;/fix mode 字符串 /顯示 GPS/北斗定位信息void Gps_Msg_Show(void)float tp; POINT_COLOR=BLUE;tp=gpsx.longitude;sprintf(char *)dtbuf,Longitude:%.

46、5f %1c,tp/=100000,gpsx.ewhemi);/得到經(jīng)度字符串LCD_ShowString(30,120,200,16,16,dtbuf); tp=gpsx.latitude;sprintf(char *)dtbuf,Latitude:%.5f %1c,tp/=100000,gpsx.nshemi);/得到緯度字符串LCD_ShowString(30,140,200,16,16,dtbuf); tp=gpsx.altitude;sprintf(char *)dtbuf,Altitude:%.1fm,tp/=10);/得到高度字符串LCD_ShowString(30,160,20

47、0,16,16,dtbuf); tp=gpsx.speed;u16 end;/結(jié)束符 SkyTra_NACK;int NMEA_Str2num(u8 *buf,u8*dx);void GPS_Analysis(nmea_msg *gpsx,u8 *buf);void NMEA_GPGSV_Analysis(nmea_msg *gpsx,u8 *buf); void NMEA_BDGSV_Analysis(nmea_msg *gpsx,u8 *buf); void NMEA_GNGGA_Analysis(nmea_msg *gpsx,u8 *buf); void NMEA_GNGSA_Analysis(nmea_msg *gpsx,u8 *buf); void NMEA_GNGSA_Analysis(nmea_msg *gpsx,u8 *buf); void NMEA_GNRMC_Analysis(nmea_msg *gpsx,u8 *

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論