精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用STM32F103C8的GPS模塊獲取位置坐標

科技觀察員 ? 來源:circuitdigest ? 作者:Pramoth Thangavel ? 2022-09-08 15:03 ? 次閱讀

GPS代表全球定位系統(tǒng),用于檢測地球上任何位置的緯度和經(jīng)度,具有精確的UTC時間(協(xié)調(diào)世界時)。該設(shè)備每秒接收來自衛(wèi)星的坐標,包括時間和日期。GPS 提供了很高的準確性,并且除了位置坐標之外還提供其他數(shù)據(jù)。

我們都知道 GPS 是一個非常有用的設(shè)備,在手機和其他便攜式設(shè)備中非常常用來跟蹤位置。它在各個領(lǐng)域都有非常廣泛的應用,從在家中叫出租車到跟蹤飛機的高度。

在本教程中,我們將GPS 模塊與 STM32F103C8 微控制器連接,以查找位置坐標并將其顯示在16x2 LCD 顯示屏上。

所需組件

STM32F103C8微控制器

GPS模塊

16x2 液晶顯示器

面包板

連接電線

GPS模塊

這是一個 GY-NEO6MV2 XM37-1612 GPS 模塊。該 GPS 模塊有四個引腳 +5V、GND、TXD 和 RXD。它使用串行引腳進行通信,并且可以輕松地與 STM32F103C8 的串行端口連接。

pYYBAGMYVcqAe-2zAAMhfr5X3hQ522.png

GPS 模塊 以 NMEA 格式發(fā)送數(shù)據(jù)(參見下面的屏幕截圖)。NMEA 格式由幾個句子組成,其中我們只需要一個句子。這句話從 $GPGGA開始 ,包含坐標、時間和其他有用的信息。此 GPGGA 稱為 全球定位系統(tǒng)修復數(shù)據(jù)。

下面是一個示例 $GPGGA 字符串及其描述:

$GPGGA,104534.000,7791.0381,N,06727.4434,E,1,08,0.9,510.4,M,43.9,M,,*47

$GPGGA,HHMMSS.SSS,latitude,N,longitude,E,F(xiàn)Q,NOS,HDP,altitude,M,height,M,,校驗和數(shù)據(jù)

但是在本教程中,我們使用了一個TinyGPSPlus GPS 庫,它從 NMEA 語句中提取所有需要的信息,我們只需要編寫一行簡單的代碼來獲取緯度和經(jīng)度,我們將在本教程后面看到。

STM32F103C8 的引腳輸出

STM32F103C8 (BLUE PILL) USART 串??行通信端口如下圖所示。這些是藍色的(PA9-TX1、PA10-RX1、PA2-TX2、PA3-RX2、PB10-TX3、PB11-RX3)。它有三個這樣的溝通渠道。

poYBAGMYVcWAVgqzAAl4ObxQVCs507.png

電路圖和連接

pYYBAGMYVcGAPAoZAAIGs_OIIlM872.png

GPS模塊和STM32F103C8之間的電路連接

pYYBAGMYVb2AQy8gAAAN0rrc-L0227.png

16x2 LCD 和 STM32F103C8 之間的連接

poYBAGMYVbqAf1nkAAA4ZmRyAaU075.png

整個設(shè)置如下所示:

pYYBAGMYVbaAN9kcAAdRX34H6Qs600.png

為 GPS 模塊接口編程 STM32F103C8

本項目末尾給出了使用 STM32 使用 GPS 模塊查找位置的完整程序。STM32F103C8 可以使用 Arduino IDE 進行編程,只需通過 USB 端口將其連接到 PC。確保在上傳代碼時移除引腳 TX 和 RX,并在上傳后連接。

要將 GPS 與 STM32 連接,首先我們必須從 GitHub 鏈接TinyGPSPlus下載一個庫。下載庫后,可以通過Sketch -》 Include Library -》 Add .zip Library 將其包含在 Arduino IDE 中。相同的庫可用于將GPS 與 Arduino 接口。

所以首先包含必要的庫文件并為 16x2 LCD 定義引腳:

#include                                               
#include  
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; 
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

然后創(chuàng)建一個名為TinyGPSPlus 類的gps對象。

TinyGPSPlus 全球定位系統(tǒng);

接下來在void setup中,使用Serial1.begin(9600)開始與 GPS 模塊的串行通信。Serial1 用作 STM32F103C8 的 Serial 1 端口(Pins-PA9、PA10)。

Serial1.開始(9600);

然后顯示一段時間的歡迎信息。

  lcd.開始(16,2);
  lcd.print("電路文摘"); 
  lcd.setCursor(0,1); 
  lcd.print("STM32 帶 GPS"); 
  延遲(4000);
  lcd.clear();     

接下來在void loop() 中,我們從 GPS 接收經(jīng)緯度,并檢查接收到的數(shù)據(jù)是否有效,并在串行監(jiān)視器和 LCD 中顯示信息。

檢查可用的位置數(shù)據(jù)是否有效

  loc_valid = gps.location.isValid();

接收緯度數(shù)據(jù)

lat_val = gps.location.lat();

接收經(jīng)度數(shù)據(jù)

  lng_val = gps.location.lng();

如果接收到無效數(shù)據(jù),則串行監(jiān)視器顯示“*****”,LCD 顯示“等待”。

  if (!loc_valid) 
  { 
    lcd.print("Waiting"); 
    Serial.print("緯度:"); 
    Serial.println("*****"); 
    Serial.print("經(jīng)度:"); 
    Serial.println("*****"); 
    延遲(4000);
    lcd.clear(); 
  }

如果接收到有效數(shù)據(jù),則緯度和經(jīng)度將顯示在串行監(jiān)視器以及 LCD 顯示屏上。

   lcd.clear(); 
    Serial.println("GPS 讀數(shù):"); 
    Serial.print("緯度:"); 
    Serial.println(lat_val, 6); 
    lcd.setCursor(0,0); 
    lcd.print("緯度:"); 
    lcd.print(lat_val,6); 
    Serial.print("經(jīng)度:"); 
     Serial.println(lng_val, 6); 
     lcd.setCursor(0,1); 
     lcd.print("長:"); 
     lcd.print(lng_val,6); 
     延遲(4000);

以下函數(shù)提供讀取數(shù)據(jù)的延遲。它一直在尋找串行端口上的數(shù)據(jù)。

靜態(tài)無效 GPSDelay(unsigned long ms) 
{ 
  unsigned long start = millis(); 
  do 
  { 
    while (Serial1.available()) 
    gps.encode(Serial1.read()); 
  } while (millis() - start < ms); 
}

使用 GPS 和 STM32 查找緯度和經(jīng)度

建立設(shè)置并上傳代碼后,請確保將 GPS 模塊放置在空曠區(qū)域以快速接收信號。有時需要幾分鐘才能收到信號,所以請等待一段時間。當 GPS 模塊開始接收信號時,LED 將開始閃爍,并且 LCD 顯示屏上會顯示位置坐標。

pYYBAGMYVa-AfrS8AAbn5WtRgbw915.png

您可以使用谷歌地圖驗證位置的緯度和經(jīng)度。只需打開 GPS 轉(zhuǎn)到 Google 地圖,然后單擊藍點。它將顯示帶有緯度和經(jīng)度的地址,如下圖所示

poYBAGMYVauARECIAAV0zuLNT1Q953.png
#include //LCD顯示函數(shù)庫

#include //GPS函數(shù)庫


const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; //LCD引腳與STM32

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);


TinyGPSPlus 全球定位系統(tǒng);//類TinyGPSPlus的對象gps


無效設(shè)置()

{

Serial1.begin(9600);//在串行端口 1 以 9600 波特率開始串行通信

lcd.begin(16,2); //設(shè)置顯示為 16x2 模式

lcd.print("Circuit Digest");

lcd.setCursor(0,1);

lcd.print("STM32 帶 GPS");

延遲(4000);

lcd.clear();

}


無效循環(huán)()

{

GPSDelay(1000);

無符號長開始;

雙緯度,lng_val;

布爾 loc_valid;

lat_val = gps.location.lat(); //獲取緯度

loc_valid = gps.location.isValid();

lng_val = gps.location.lng(); //獲取經(jīng)度



if (!loc_valid) //從 GPS 接收到無效數(shù)據(jù)時執(zhí)行

{

lcd.print("Waiting");

Serial.print("緯度:");

Serial.println("*****");

Serial.print("經(jīng)度:");

Serial.println("*****");

延遲(4000);

lcd.clear();

}

else //從 GPS 接收到有效數(shù)據(jù)時執(zhí)行

{

lcd.clear();



Serial.println("GPS 讀數(shù):");



Serial.print("緯度:");

Serial.println(lat_val, 6); //在串行監(jiān)視器打印緯度



lcd.setCursor(0,0);

lcd.print("緯度:");

lcd.print(lat_val,6); //在LCD顯示屏上打印緯度


Serial.print("經(jīng)度:");

Serial.println(lng_val, 6); //在串口監(jiān)視器上打印經(jīng)度


lcd.setCursor(0,1);

lcd.print("長:");

lcd.print(lng_val,6); //在液晶顯示屏上打印經(jīng)度


延遲(4000);

}

}


static void GPSDelay(unsigned long ms) //從 GPS 接收數(shù)據(jù)的延遲

{

unsigned long start = millis();

do

{

while (Serial1.available())

gps.encode(Serial1.read());

} while (millis() - start < ms);

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7489

    瀏覽量

    151051
  • GPS模塊
    +關(guān)注

    關(guān)注

    0

    文章

    87

    瀏覽量

    16426
  • LCD顯示屏
    +關(guān)注

    關(guān)注

    1

    文章

    91

    瀏覽量

    13273
  • STM32F103C8
    +關(guān)注

    關(guān)注

    1

    文章

    23

    瀏覽量

    8074
收藏 人收藏

    評論

    相關(guān)推薦

    STM32F103C8控制伺服馬達的電路連接及代碼說明

    伺服馬達(Servo motor)憑準確、小型、高效,易用在機器人領(lǐng)域應用廣泛,其高扭矩特性非常適合升降重物。本項目用電位器改變馬達轉(zhuǎn)子位置,用STM32F103C8(藍丸)控制伺服馬達,用LCD顯示角度值。
    的頭像 發(fā)表于 07-04 10:28 ?6731次閱讀
    用<b class='flag-5'>STM32F103C8</b>控制伺服馬達的電路連接及代碼說明

    使用ESP8266將STM32F103C8連接到互聯(lián)網(wǎng)的方法

    在本教程中,我們使用 ESP8266 將 STM32F103C8 連接到互聯(lián)網(wǎng)。在這里,我們將 ESP8266 Wi-Fi 模塊與我們的藍丸 STM32F103C8 板接口,并將數(shù)據(jù)發(fā)送到 ESP8266 網(wǎng)絡服務器上托管的網(wǎng)頁
    的頭像 發(fā)表于 10-28 17:25 ?1.1w次閱讀
    使用ESP8266將<b class='flag-5'>STM32F103C8</b>連接到互聯(lián)網(wǎng)的方法

    如何在STM32F103C8中使用中斷

    在本項目中,為了理解STM32F103C8中的中斷,我們將使用按鈕作為外部中斷。在這里,我們將從 0 開始遞增一個數(shù)字并將其顯示在 16x2 LCD 上,每當按下按鈕時,LED 就會亮起,LCD 顯示屏就會顯示中斷。松開按鈕后,LED 立即熄滅。
    的頭像 發(fā)表于 11-03 17:11 ?2480次閱讀
    如何在<b class='flag-5'>STM32F103C8</b>中使用中斷

    將伺服電機與STM32F103C8板連接起來的教程

    在本教程中,我們將了解伺服電機以及如何將伺服與STM32F103C8板連接。 還連接了一個電位計來改變伺服電機軸的位置,和一個LCD來顯示角度值。
    發(fā)表于 11-04 14:49 ?2881次閱讀
    將伺服電機與<b class='flag-5'>STM32F103C8</b>板連接起來的教程

    STM32F103C8

    有人用過STM32F103C8嗎?CAN總線與它連接時應該接那兩個引腳,說明書里沒有具體的說法,謝謝啦
    發(fā)表于 08-04 20:32

    stm32f103c8

    近期買了一塊stm32f103c8的系統(tǒng)板,苦于沒有對應資料學習,哪位神給介紹下。網(wǎng)上找過很多資料,可差不多都是和指定開發(fā)板相關(guān)的,不好入門啊。{:23:}
    發(fā)表于 07-14 10:57

    移植Alios Things 到STM32F103C8

    python配置Image開發(fā)環(huán)境pip阿里云大使aliosthingsstm32f103c8移植Alios Things 到STM32F103C8一:開發(fā)環(huán)境搭建1.1、配置編譯環(huán)境:您可以嘗試
    發(fā)表于 10-17 11:38

    stm32f103C8如何移植FreeRTOS

    命名為FreeRTOS。選擇芯片STM32F103C8。3、搭建工程框架,打開官方固件庫包:1)將STM32F10x_StdPeriph_Lib_V3.5.0\Libraries...
    發(fā)表于 08-24 07:57

    IAP在STM32F103C8上的實現(xiàn)

    IAP 在STM32F103C8上的實現(xiàn)已經(jīng)在[STM32F103C8在應用編程(IAP)介紹及實現(xiàn)]具體講解了。但由于STM32F030C8STM32F103C8在中斷向量表上的設(shè)
    發(fā)表于 03-02 07:34

    STM32F103C8的電路原理圖免費下載

    本文檔的主要內(nèi)容詳細介紹的是STM32F103C8的電路原理圖免費下載。
    發(fā)表于 04-23 17:14 ?63次下載
    <b class='flag-5'>STM32F103C8</b>的電路原理圖免費下載

    基于STM32F103C8 輸入捕獲實驗

    基于STM32F103C8 輸入捕獲實驗-目的該項目是在實習時做的一個基于STM32+CUBEMX工具讀取溫度計輸出的PWM波的實驗,使用到了TIMER讀取輸入捕獲和UART輸出到串口,最終實現(xiàn)讀取
    發(fā)表于 11-30 10:36 ?12次下載
    基于<b class='flag-5'>STM32F103C8</b> 輸入捕獲實驗

    STM32F103C8微控制器中使用RS-485串行通信

    在本教程中,Master STM32F103C8 具有三個按鈕,用于通過使用 RS-485 串行通信來控制 Slave Arduino Uno 上的三個 LED 的狀態(tài)。
    發(fā)表于 09-06 15:31 ?7623次閱讀
    在<b class='flag-5'>STM32F103C8</b>微控制器中使用RS-485串行通信

    使用STM32F103C8和SIM800C GSM模塊發(fā)送/接收短信

    在本教程中,此類GSM 模塊將與 STM32F103C8 ARM 微控制器連接,以從程序中配置的蜂窩移動號碼發(fā)送和接收文本消息 (SMS)。為了顯示接收和發(fā)送的消息,一個16x2 LCD將與兩個按鈕一起使用,這兩個按鈕將在按下相關(guān)按鈕后啟動文本消息的發(fā)送和接收。
    的頭像 發(fā)表于 09-07 15:34 ?1.9w次閱讀
    使用<b class='flag-5'>STM32F103C8</b>和SIM800<b class='flag-5'>C</b> GSM<b class='flag-5'>模塊</b>發(fā)送/接收短信

    基于MCP4725設(shè)計使用STM32F103C8的數(shù)模轉(zhuǎn)換器

    今天我們將使用相同的 MCP4725 DAC IC 來設(shè)計一個使用 STM32F103C8 微控制器的數(shù)模轉(zhuǎn)換器。
    發(fā)表于 09-08 15:24 ?4525次閱讀
    基于MCP4725設(shè)計使用<b class='flag-5'>STM32F103C8</b>的數(shù)模轉(zhuǎn)換器

    將步進電機與STM32F103C8板連接的教程

    在本教程中,我們將步進電機與STM32F103C8(藍色藥丸)板連接。
    的頭像 發(fā)表于 11-07 15:52 ?7347次閱讀
    將步進電機與<b class='flag-5'>STM32F103C8</b>板連接的教程