久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3882|回復: 1
打印 上一主題 下一主題
收起左側

STM32f4的GPS定位源碼程序(模塊型號:UBLOX-6M)

[復制鏈接]
跳轉到指定樓層
樓主
ID:342700 發表于 2019-8-8 14:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
最近自己調試了以下GPS模塊,代碼實現經緯度顯示、UTC日期及時間、高度、速度、衛星數,這些數據均由串口打印出來。下面是部分參考代碼:
  1. #include "sys.h"
  2. #include "delay.h"  
  3. #include "usart.h"  
  4. #include "led.h"
  5. #include "lcd.h"
  6. #include "usmart.h"        
  7. #include "usart2.h"                  
  8. #include "string.h"                  
  9. #include "gps.h"         

  10.                                           
  11. u8 USART5_TX_BUF[USART2_MAX_RECV_LEN];                                         //串口1,發送緩存區
  12. nmea_msg gpsx;                                                                                         //GPS信息
  13. __align(4) u8 dtbuf[50];                                                                   //打印緩存器
  14. const u8*fixmode_tbl[4]={"Fail","Fail"," 2D "," 3D "};        //fix mode字符串
  15.          
  16. //顯示GPS定位信息
  17. void Gps_Msg_Show(void)
  18. {
  19.          float tp;                           
  20.         tp=gpsx.longitude;           
  21.         printf("Longitude:%.5f %1c  \r\n ",tp/=100000,gpsx.ewhemi);        //得到經度字符串
  22.             
  23.         tp=gpsx.latitude;           
  24.         printf("Latitude:%.5f %1c   \r\n ",tp/=100000,gpsx.nshemi);        //得到緯度字符串
  25.          
  26.         tp=gpsx.altitude;           
  27.          printf("Altitude:%.1fm    \r\n  ",tp/=10);                                    //得到高度字符串
  28.                            
  29.         tp=gpsx.speed;           
  30.          printf("Speed:%.3fkm/h   \r\n   ",tp/=1000);                                    //得到速度字符串         
  31.                                     
  32.         if(gpsx.fixmode<=3)                                                                                                                //定位狀態
  33.         {  
  34.                 printf("Fix Mode:%s  \r\n",fixmode_tbl[gpsx.fixmode]);        
  35.                            
  36.         }                    
  37.         printf("Valid satellite:%02d  \r\n",gpsx.posslnum);                         //用于定位的衛星數
  38.    
  39.         printf("Visible satellite:%02d \r\n",gpsx.svnum%100);                         //可見衛星數
  40.          
  41.         printf("UTC Date:%04d/%02d/%02d \r\n   ",gpsx.utc.year,gpsx.utc.month,gpsx.utc.date);        //顯示UTC日期
  42.         //printf("year2:%d\r\n",gpsx.utc.year);
  43.                     
  44.         printf("UTC Time:%02d:%02d:%02d   \r\n ",gpsx.utc.hour,gpsx.utc.min,gpsx.utc.sec);        //顯示UTC時間
  45.                     
  46. }         


  47. int main(void)
  48. {
  49.         u16 i,rxlen;
  50.         u16 lenx;
  51.         u8 upload=0;
  52.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
  53.         delay_init(168);      //初始化延時函數
  54.         uart5_init(115200);                //初始化串口波特率為115200
  55.         
  56.         usart2_init(9600);                //初始化串口3波特率為9600
  57.         usmart_dev.init(84);                 //初始化USMART                        
  58.         usmart_dev.init(72);                 //初始化USMART         
  59.    

  60.         if(Ublox_Cfg_Rate(1000,1)!=0)        //設置定位信息更新速度為1000ms,順便判斷GPS模塊是否在位.
  61.         {
  62.         printf("NEO-6M Setting...\r\n");
  63.                 while((Ublox_Cfg_Rate(1000,1)!=0))        //持續判斷,直到可以檢查到NEO-6M,且數據保存成功
  64.                 {
  65.                         usart2_init(9600);                        //初始化串口3波特率為9600(EEPROM沒有保存數據的時候,波特率為9600.)
  66.                           Ublox_Cfg_Prt(38400);                        //重新設置模塊的波特率為38400
  67.                         Ublox_Cfg_Tp(1000000,100000,1);        //設置PPS為1秒鐘輸出1次,脈沖寬度為100ms            
  68.                         Ublox_Cfg_Cfg_Save();                //保存配置  
  69.             printf("檢測設備\r\n");
  70.                 }
  71.       
  72.         }
  73.         while(1)
  74.         {        
  75.                 delay_ms(1);
  76.                 if(USART2_RX_STA&0X8000)                //接收到一次數據了
  77.                 {
  78.             printf("GPS_Res_sucess...\r\n");
  79.                         rxlen=USART2_RX_STA&0X7FFF;        //得到數據長度
  80.                         for(i=0;i<rxlen;i++)USART5_TX_BUF[i]=USART2_RX_BUF[i];           
  81.                          USART2_RX_STA=0;                           //啟動下一次接收
  82.                         USART5_TX_BUF[i]=0;                        //自動添加結束符
  83.                         GPS_Analysis(&gpsx,(u8*)USART5_TX_BUF);//分析字符串
  84.                         Gps_Msg_Show();                                //顯示信息        
  85.                         if(upload)printf("\r\n%s\r\n",USART5_TX_BUF);//發送接收到的數據到串口1
  86.                  }

  87.                         upload=!upload;
  88.                         if(upload)printf("NMEA Data Upload:ON ");
  89.                         else printf("NMEA Data Upload:OFF");
  90.          delay_ms(1000);
  91.                 if((lenx%500)==0)
  92.                 lenx++;        
  93.         }                                                                           
  94. }
復制代碼

GPS.7z (343.7 KB, 下載次數: 82)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:658914 發表于 2023-4-21 10:44 來自手機 | 只看該作者
好復雜啊
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99精品久久 | 亚洲va中文字幕 | 亚洲在线中文字幕 | 色综合天天网 | 国产亚洲精品成人av久久ww | 久久国产精品视频 | 激情五月综合 | 精品国产一区二区在线 | 亚洲成人精品 | 色视频在线播放 | 久久国产一区二区 | 婷婷色国产偷v国产偷v小说 | 久久久91精品国产一区二区精品 | 一级做a爰片久久毛片免费看 | 爱爱综合网 | 97在线观视频免费观看 | 精品视频免费 | 天天综合网天天综合色 | 国产一区二区三区视频在线观看 | 成人国产一区二区三区精品麻豆 | 欧美最猛黑人 | 日本久草 | 成人在线一区二区三区 | 欧美综合一区 | 亚洲欧洲日韩精品 中文字幕 | 日韩久久中文字幕 | 特黄毛片视频 | 91原创视频 | 中文字幕视频在线观看 | 日韩av电影在线观看 | 精品欧美乱码久久久久久 | 国产 日韩 欧美 制服 另类 | 欧美综合久久久 | 亚洲精品久久久久久久久久久久久 | 久久99视频精品 | 久久在线看 | 五月综合激情婷婷 | 欧美精品综合在线 | 中文字幕在线二区 | 精品国产18久久久久久二百 | 久久大 |