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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32 GPS NE0-7N UBLOX實驗詳解Demo代碼等

[復制鏈接]
跳轉到指定樓層
樓主
ID:416402 發表于 2018-11-2 10:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在學習使用GPS模塊的時候把自己的一些調試經驗和問題記錄下來,方便大家的學習,也希望大家指出不足。

1.硬件實現平臺介紹,使用STM32F103RBT6作為核心板,使用GPS NE0-7N UBLOX模塊,串口通信模塊使用CH341串口芯片。
2.方法介紹:gps模塊采用串口通信,首先要先了解GPS的通信協議。GPS模塊通過串口給我們發的數據GPRMC格式的,他包括了定位信息,主要是經緯度,UTC(國際標準時間)時間,等等關鍵信息,真頭由符號“$”起始。
                因為GPS使用串口通信,首先必不可少的是串口通信程序驅動的編寫,根據gps模塊的數據手冊表明,串口通信的波特率為9600,其他的一些串口通信的格式在usart.c中的My_usart2_Init函數中均有體現。
3.在main中的主程序,while循環中主要做了兩件事,第一就是對GPS模塊發來的幀數據進行的解析,然后把解析出的數據存儲在自己定義的結構體中。

第二就是把這個解析后的數據進行串口的一個打印,這樣可以通過串口助手觀察當先的經緯度等信息。

調試注意,由于GPS模塊第一次的定位搜星的事件較長,而且必須!!是必須在室外進行,也就時模塊必須置于露天位置才能進行有效的定位,如果在室內實現的話 是做無用功的。  下載我把代碼上傳,方便大家學習,這個工程還包括了 一些LCD12854-5的驅動程序,還有一些I2C驅動指南針的程序,大家也可進行一下借鑒。

附件為code還有串口芯片ch341的串口驅動,方便大家調試我就一次都傳上去了。

單片機源程序如下:
  1. #include "stm32f10x.h"
  2. #include "usart.h"
  3. #include "lcd.h"
  4. #include "led.h"
  5. #include "math.h"
  6. #include "string.h"
  7. /************************************************
  8.                                         手持氣象臺項目
  9. ************************************************/

  10. extern QMC_BUF[8];
  11. void errorLog(int num);
  12. void parseGpsBuffer(void);
  13. void printGpsBuffer(void);

  14. int main(void)
  15. {        
  16.         int X = 0,Y = 0,Z = 0;
  17.         double Angle_XY=0,Angle_XZ=0,Angle_YZ=0;        

  18.         //設置中斷優先級管理        
  19.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  20.         My_Usart1_Init(115200);
  21.         My_Usart2_Init(9600);
  22.         delay_init();
  23.         GPIO_Configout();                //初始化LCD OCM12864-5
  24.         
  25.         delay_ms(200);
  26.         
  27.         Init_LEDpin();        
  28.         LED1 = 1;
  29.         //Lcd_Init();
  30.         
  31.         //QMC_5883_Init();
  32.         delay_ms(300);
  33.         while(1)
  34.         {
  35. #if 0

  36.                 Multiple_Read_Qmc5883();                //連續讀取三軸角度數據,存儲在buf中
  37.                 //顯示XY軸
  38.                 X = QMC_BUF[1] << 8 | QMC_BUF[0];
  39.                 Y = QMC_BUF[3] << 8 | QMC_BUF[2];
  40.                 Z = QMC_BUF[5] << 8 | QMC_BUF[4];

  41.                 if(X > 0x7fff)
  42.                         X -= 0xffff;
  43.                 if(Y > 0x7fff)
  44.                         Y -= 0xffff;
  45.                 if(Z > 0x7fff)
  46.                         Z -= 0Xffff;
  47.                
  48.                 Angle_XY= atan2((double)Y,(double)X) * (180 / 3.14159265) + 180; //計算XY平面角度
  49.                 disp1();               
  50.                 delay_ms(400);
  51.                 delay_ms(400);               
  52.                 delay_ms(400);
  53.                 lat_disp(0xff, 0x00);               
  54.                 delay_ms(400);               
  55.                 delay_ms(400);
  56.                 delay_ms(400);
  57.                 disp3();               
  58.                 delay_ms(400);               
  59.                 delay_ms(400);
  60.                 delay_ms(400);
  61.                 lat_disp(0x33, 0x33);
  62.                 delay_ms(400);               
  63.                 delay_ms(400);
  64.                 delay_ms(400);
  65.                
  66. #else
  67.                 parseGpsBuffer();
  68.                 printGpsBuffer();

  69. #endif
  70.         }
  71. }

  72. void errorLog(int num)
  73. {
  74.         
  75.         while (1)
  76.         {
  77.                   printf("ERROR%d\r\n",num);
  78.         }
  79. }

  80. void parseGpsBuffer(void)
  81. {
  82.         char *subString;
  83.         char *subStringNext;
  84.         char i = 0;
  85.         if (Save_Data.isGetData)
  86.         {
  87.                 Save_Data.isGetData = false;
  88.                 printf("**************\r\n");
  89.                 printf(Save_Data.GPS_Buffer);

  90.                 //$GPRMC,072344.00,A,4544.41944,N,12637.19170,E,0.102,,011118,,,A*7F
  91.                 for (i = 0 ; i <= 6 ; i++)
  92.                 {
  93.                         if (i == 0)
  94.                         {
  95.                                 if ((subString = strstr(Save_Data.GPS_Buffer, ",")) == NULL)
  96.                                         errorLog(1);        //解析錯誤
  97.                         }
  98.                         else
  99.                         {
  100.                                 subString++;
  101.                                 if ((subStringNext = strstr(subString, ",")) != NULL)
  102.                                 {
  103.                                         char usefullBuffer[2];
  104.                                         switch(i)
  105.                                         {
  106.                                                 case 1:memcpy(Save_Data.UTCTime, subString, subStringNext - subString);break;        //獲取UTC時間
  107.                                                 case 2:memcpy(usefullBuffer, subString, subStringNext - subString);break;        //獲取UTC時間
  108.                                                 case 3:memcpy(Save_Data.latitude, subString, subStringNext - subString);break;        //獲取緯度信息
  109.                                                 case 4:memcpy(Save_Data.N_S, subString, subStringNext - subString);break;        //獲取N/S
  110.                                                 case 5:memcpy(Save_Data.longitude, subString, subStringNext - subString);break;        //獲取經度信息
  111.                                                 case 6:memcpy(Save_Data.E_W, subString, subStringNext - subString);break;        //獲取E/W

  112.                                                 default:break;
  113.                                         }

  114.                                         subString = subStringNext;
  115.                                         Save_Data.isParseData = true;
  116.                                         if(usefullBuffer[0] == 'A')
  117.                                                 Save_Data.isUsefull = true;
  118.                                         else if(usefullBuffer[0] == 'V')
  119.                                                 Save_Data.isUsefull = false;

  120.                                 }
  121.                                 else
  122.                                 {
  123.                                         errorLog(2);        //解析錯誤
  124.                                 }
  125.                         }


  126.                 }
  127.         }
  128. }

  129. void printGpsBuffer(void)
  130. {
  131.         if (Save_Data.isParseData)
  132.         {
  133.                 Save_Data.isParseData = false;
  134.                
  135.                 printf("Save_Data.UTCTime = ");
  136.                 printf(Save_Data.UTCTime);
  137.                 printf("\r\n");

  138.                 if(Save_Data.isUsefull)
  139.                 {
  140.                         Save_Data.isUsefull = false;
  141.                         printf("Save_Data.latitude = ");
  142.                         printf(Save_Data.latitude);
  143.                         printf("\r\n");


  144.                         printf("Save_Data.N_S = ");
  145.                         printf(Save_Data.N_S);
  146.                         printf("\r\n");

  147.                         printf("Save_Data.longitude = ");
  148.                         printf(Save_Data.longitude);
  149.                         printf("\r\n");

  150.                         printf("Save_Data.E_W = ");
  151.                         printf(Save_Data.E_W);
  152.                         printf("\r\n");
  153.                 }
  154.                 else
  155.                 {
  156.                         printf("GPS DATA is not usefull!\r\n");
  157.                 }
  158.                
  159.         }
  160. }
復制代碼

所有資料51hei提供下載:
CH340驅動(USB串口驅動)_XP_WIN7共用.rar (324.24 KB, 下載次數: 5)
hand_held.rar (1005.84 KB, 下載次數: 29)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕蜜臀av | 午夜精品一区二区三区三上悠亚 | 日韩精品一区二区三区在线播放 | 久久久久国产一区二区三区四区 | 欧美性生活免费 | 亚欧洲精品在线视频免费观看 | 国产精品色一区二区三区 | 伊人久麻豆社区 | 特级毛片爽www免费版 | 欧美一区二区成人 | 老头搡老女人毛片视频在线看 | 成人欧美一区二区三区 | 黄色国产视频 | 九九精品在线 | 五月综合激情婷婷 | 国产乱码久久久久久 | 91久久久久 | 免费在线观看av的网站 | 欧美一级在线 | 能看的av网站 | 国产精品国产亚洲精品看不卡15 | 98成人网| 成人免费大片黄在线播放 | 欧美日韩成人网 | 在线播放国产一区二区三区 | 国产成人网 | 欧美炮房 | 欧美成人一级视频 | 色橹橹欧美在线观看视频高清 | 精品丝袜在线 | 日韩三级一区 | 欧美国产激情二区三区 | 成人av网站在线观看 | 亚洲一区二区三区免费在线观看 | 视频精品一区二区三区 | 久久只有精品 | 欧美在线一区二区三区 | 91.com在线观看 | 一区二区三区不卡视频 | 欧美激情精品久久久久久 | 国产精品成av人在线视午夜片 |