娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

2440裸機編程之十二 GPS

發布者:爐火旁的Yye最新更新時間:2019-11-07 來源: 51hei關鍵字:裸機編程  GPS 手機看文章 掃描二維碼
隨時隨地手機看文章

全球衛星定位系統實際上是由24 顆衛星所組成,其中有3 顆為備用衛星,這些衛星分布于距地表20,200 公里的上空,而且分屬于6 個軌道面;衛星軌道面傾斜角為55 度﹐提供全球全天候﹐每秒一次﹐持續不斷的定位訊號。這些衛星每11 小時58 分環繞地球一次,即每天繞過您的頭頂二次,就像是月球一樣不停地繞著地球旋轉,其速度約每秒1.8 哩。這些衛星需要地面管制站隨時加以監控是否GPS 衛星在其正確的軌道上及正常運作,另外監控中心可上傳資料給衛星,衛星再將這些信息下傳給GPS 使用者使用。地面共有五個監控中心,四個上傳資料站及一個控制中心,這些控制站以緯度來劃分其所控制的衛星。在概念上﹐GPS 是代表著整個系統﹐包括天空上的衛星、地面控制站及GPS 接收機。不過一般而言﹐GPS 即意指一個GPS 接收機﹐這是因為我們在使用上多半只會接觸GPS 接收機的緣故。一般所使用之GPS 接收機在任何時刻接收到4 顆或更多的衛星。


簡單的說GPS 如何運作:每一顆衛星會告訴您使用的接收機三件事,我是第幾號衛星,我現位置在那里,我什么時候送這訊息給您。當您的GPS 接收機接收到這些資料后會將星歷資料及Almanac 存起來使用,這些資料也用做修正GPS 接收機上的時間。GPS 接收機比較每一衛星訊號接收到的時間及本身接收機的時間的不同,而計算出每一衛星道接收機的距離。接收機若在接收到更多衛星時,它可利用三角公式計算出接收機所在位置。三顆衛星可做所謂2D 定位(經度及緯度),四顆或更多衛星可做所謂3D 定位(經度、緯度及高度)。接收機繼續不段地更新您的位置,所以它可計算出您的移動方向及速度。


GPRMC
  推薦定位信息(GPRMC) 
例:$GPRMC,154717.000, A ,3906.1439, N ,11720.8569, E ,0.00,331.02,050611,    ,    ,   A*6B
  $GPRMC,   <1>    ,<2>,    <3>  ,<4>,    <5>   ,<6>, <7>,  <8> ,  <9> ,<10>,<11>,<12>*hh 
  <1> UTC時間,hhmmss.sss(時分秒.毫秒)格式 
  <2> 定位狀態,A=有效定位,V=無效定位 
  <3> 緯度ddmm.mmmm(度分)格式(前面的0也將被傳輸) 
  <4> 緯度半球N(北半球)或S(南半球) 
  <5> 經度dddmm.mmmm(度分)格式(前面的0也將被傳輸) 
  <6> 經度半球E(東經)或W(西經) 
  <7> 地面速率(000.0~999.9節,前面的0也將被傳輸) 
  <8> 地面航向(000.0~359.9度,以正北為參考基準,前面的0也將被傳輸) 
  <9> UTC日期,ddmmyy(日月年)格式 
  <10> 磁偏角(000.0~180.0度,前面的0也將被傳輸) 
  <11> 磁偏角方向,E(東)或W(西) 
  <12> 模式指示(僅NMEA0183 3.00版本輸出,A=自主定位,D=差分,E=估算,N=數據無效)


GPGGA
GPS固定數據輸出語句($GPGGA) 
這是一幀GPS定位的主要數據,也是使用最廣的數據。 


  $GPGGA 語句包括17個字段:語句標識頭,世界時間,緯度,緯度半球,經度,經度半球,定位質量指示,使用衛星數量,水平精確度,海拔高度,高度單位,大地水準面高度,高度單位,差分GPS數據期限,差分參考基站標號,校驗和結束標記(用回車符和換行符),分別用14個逗號進行分隔。該數據幀的結構及各字段釋義如下:
  
例:$GPGGA,154717.000,3906.1439, N ,11720.8569, E , 1 , 05,1.6, 23.2,M,-2.3,M,    , 0000*74
其標準格式為:$GPGGA,   (1)   ,    (2)  ,(3),    (4)   ,(5),(6),(7),(8),  (9),M,(10),M,(11),(12) *hh(CR)(LF)

起始引導符及語句格式說明(本句為GPS定位數據); 
  <1> UTC時間,格式為hhmmss.sss; 
  <2> 緯度,格式為ddmm.mmmm(第一位是零也將傳送); 
  <3> 緯度半球,N或S(北緯或南緯) 
  <4> 經度,格式為dddmm.mmmm(第一位零也將傳送); 
  <5> 經度半球,E或W(東經或西經) 
  <6> GPS狀態, 0未定位, 1非差分定位, 2差分定位, 3無效PPS, 6正在估算 
  <7> 使用衛星數量,從00到12(第一個零也將傳送) 
  <8> 水平精確度,0.5到99.9 
  <9> 天線離海平面的高度,-9999.9到9999.9米 
  M 指單位米 
  <10> 大地水準面高度,-9999.9到9999.9米 
  M 指單位米 
  <11> 差分GPS數據期限(RTCM SC-104),最后設立RTCM傳送的秒數量,如不是差分定位則為空 
  <12> 差分參考基站標號,從0000到1023(首位0也將傳送)。 
  * 語句結束標志符 
  xx 從$開始到*之間的所有ASCII碼的異或校驗和 
   回車 
   換行



GPGSA
  $GPGSA : GPS DOP and Active Satellites(GSA)當前衛星信息 
例:$GPGSA,A,3,28,02,10,23,04,,,,,,,,2.4,1.6,1.8*36

    字段1:定位模式,A=自動手動2D/3D,M=手動2D/3D 
  字段2:定位類型,1=未定位,2=2D定位,3=3D定位 
  字段3:PRN碼(偽隨機噪聲碼),第1信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0) 
  字段4:PRN碼(偽隨機噪聲碼),第2信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0) 
  字段5:PRN碼(偽隨機噪聲碼),第3信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0) 
  字段6:PRN碼(偽隨機噪聲碼),第4信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0) 
  字段7:PRN碼(偽隨機噪聲碼),第5信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0) 
  字段8:PRN碼(偽隨機噪聲碼),第6信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0) 
  字段9:PRN碼(偽隨機噪聲碼),第7信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0) 
  字段10:PRN碼(偽隨機噪聲碼),第8信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0) 
  字段11:PRN碼(偽隨機噪聲碼),第9信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0) 
  字段12:PRN碼(偽隨機噪聲碼),第10信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0) 
  字段13:PRN碼(偽隨機噪聲碼),第11信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0) 
  字段14:PRN碼(偽隨機噪聲碼),第12信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0) 
  字段15:PDOP綜合位置精度因子(0.5 - 99.9) 
  字段16:HDOP水平精度因子(0.5 - 99.9) 
  字段17:VDOP垂直精度因子(0.5 - 99.9) 
  字段18:校驗值



GPGSV
  可視衛星狀態輸出語句($GPGSV) 
  例:       $GPGSV,  3 ,  1 ,  12,  04,  51, 261,  44,  28,45,179,27,10,18,192,26,02, 12,250, 44*7C 
  標準格式: $GPGSV,(1),(2),(3),(4),(5),(6),(7),       ………………       (4),(5),(6),(7)*hh(CR)(LF) 
  各部分含義為: 
  (1)總的GSV語句電文數;2; 
  (2)當前GSV語句號:1; 
  (3)可視衛星總數:08; 
  (4)PRN碼(偽隨機噪聲碼) 也可以認為是衛星編號 
  (5)仰角(00~90度):33度; 
  (6)方位角(000~359度):240度; 
  (7)信噪比(00~99dB):45dB(后面依次為第10,16,17號衛星的信息); 
  *總和校驗域;  
  hh 總和校驗數:78; 
  (CR)(LF)回車,換行。 
  注:每條語句最多包括四顆衛星的信息,每顆衛星的信息有四個數據項,即:  
  (4)-衛星號,(5)-仰角,(6)-方位角,(7)-信噪比。


一、GPS接PC機,用超級終端接收信息


圖中只是示意,天線要接到戶外,否則信號很難接收




二、2440的串口1接GPS模塊


程序如下:
//////////////////////////////////////////////////////////////////////////////////////////////
#define GLOBAL_CLK  1
/*
*********************************************************
*        頭文件
*********************************************************
*/
#include
#include
#include

#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"


/*
*********************************************************
*         常量
*********************************************************
*/

/*
*********************************************************
*         變量
*********************************************************
*/

int isdigit(char  c)
{
if(c>='0' && c <='9') return 1;
else return 0;
}

int my_atoi(char * pzNum)    //把字符串str轉換成int類型
{
int nLen;
int nIndex;
int bFlag;
int nRt;
if (pzNum == NULL)
  return 0;

nLen = strlen(pzNum);
if (nLen <= 0)
  return 0;

nIndex = 0; 
bFlag = TRUE;
if (!isdigit(pzNum[0]))
{
  if (pzNum[0] == '-')
   bFlag = FALSE;
  else if (pzNum[0] == '+')
   bFlag = TRUE;
  else
      return 0;  
  nIndex ++;
}
nRt = 0;
for (; nIndex < nLen; nIndex++)
{
  if (!isdigit(pzNum[nIndex]))
   break;
  nRt = nRt * 10 + (pzNum[nIndex]-'0');
}
if (!bFlag)
  nRt = -nRt;

return nRt;
}


void Main(void)
{     
    int i;
    U8 key;
U32 mpll_val = 0 ;
char Buffer[256];
char buf[20];
char *p;

    Port_Init();  //端口初始化
    Isr_Init();   //中斷初始化
key = 14;
mpll_val = (92<<12)|(1<<4)|(1);
//init FCLK=400M, so change MPLL first
ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
ChangeClockDivider(key, 12);
cal_cpu_bus_clk();
    
    Uart_Init(0,0,115200);  //串口初始化 波特率為115200
    Uart_Init(0,1,9600);
    Uart_Select(0);  //選者串口0

Clk0_Disable();
Clk1_Disable();

Uart_Printf("n======  GPS Test program start ======n");
while(1)
{
  i=0;
  Uart_Select(1);
  Uart_GetString(Buffer);                                      //讀取一段信息
  Uart_Select(0);
  p = strtok(Buffer+1, ",");                                   //將字符串 Buffer+1  以","為界,讀取第一個單詞,
     if (strcmp(p,"$GPRMC") == 0)                                 //找到"$GPRMC"
     {
      Uart_Printf("%sn", p); 
      p = strtok(NULL, ",");                                   //得到協調世界時間

      sprintf(buf,"%c%c",p[0],p[1]);
      Uart_Printf("Current Time: %2d:",(my_atoi(buf)+8)%24);   //顯示小時: 協調世界時間+8  轉換為北京時間
      Uart_Printf("%c%c:%c%cn",p[2],p[3],p[4],p[5]);          //顯示分 秒
      
      p = strtok(NULL, ",");                                   //得到有效性
      if(*p == 'A') Uart_Printf("State: Data valid.n");
      else Uart_Printf("State: Date no valid!!n");
      
      p = strtok(NULL, ",");                                   //得到緯度值
      Uart_Printf("latitude(WGS-84): %s",p);
      p = strtok(NULL,",");                                    //北緯還是南緯
      Uart_Printf("%sn",p);
      
      p = strtok(NULL, ",");                                   //得到經度值
      Uart_Printf("longitude(WGS-84): %s",p);
      p = strtok(NULL,",");                                    //東經還是西經
      Uart_Printf("%sn",p);
      
      p = strtok(NULL,",");                                    //速度
      Uart_Printf("speed: %sn",p);
      
      p = strtok(NULL,",");                                    //方位
      Uart_Printf("Direction: %sn",p);
      
      p = strtok(NULL,",");                                    //日期
      Uart_Printf("Date: %c%c-%c%c-%c%cn",p[0],p[1],p[2],p[3],p[4],p[5]);
     }

[1] [2]
關鍵字:裸機編程  GPS 引用地址:2440裸機編程之十二 GPS

上一篇:對比stm32,arm9研究方向的猜想
下一篇:對于51單片機和arm9開發板串口通信問題的分析

推薦閱讀最新更新時間:2025-04-05 00:43

2440裸機編程之九 LCD液晶顯示器
S3C2440A 內部含有一個LCD 驅動控制器.能自動產生LCD 驅動控制所需的控制信號,因此S3C2440A 可以與諸如黑白灰度、STN 型彩色、TFT 型彩色等LCD 屏直接接口,而不需要另外加LCD 控制器。在這種接口方式下,LCD 顯示緩沖區映射在系統的存儲器空間上(DMA),程序只需像素點內容寫入存儲器對應地址就可以實現對應LCD屏上像素點顏色的顯示,十分方便。 這里以S3C2440A 與一個TFT 型640 像素×480 行的彩色液晶顯示屏接口為例,介紹如何在LCD 上顯示某種色彩及如何繪制簡單圖形等。 2440的LCD 驅動控制器如下: 要想正確使用LCD,必須注意兩點:1、時序;2、顯示緩存區。
[單片機]
<font color='red'>2440</font><font color='red'>裸機</font><font color='red'>編程</font>之九 LCD液晶顯示器
S3C2440時鐘體系筆記
一、整體架構  S3C2440的主時鐘源可以是外部諧振器(XTIpll),或者外部輸入時鐘(EXTCLK),經過鎖相環MPLL、UPLL產生高頻時鐘信號,并經由分配傳輸給AHB總線,APB總線,USB設備,以及內核使用。其中UPLL是USB專用的PLL。以下是時鐘體系的總體框架: 二、控制邏輯 時鐘控制邏輯的主要內容為時鐘的開啟、配置過程。首先是時鐘的上電開啟時序: 上圖來自于芯片手冊,是時鐘的上電開啟過程,經上電與復位,諧振器開始輸入信號,此時PLL根據默認配置啟動,進入LockTime,由于上電后PLL工作不穩定,其輸出信號并不會接入FCLK等,而是接入諧振器輸入頻率信號,只有在軟件配置PLL后才會接入到FCLK等,即使
[單片機]
S3C<font color='red'>2440</font>時鐘體系筆記
基于S3C2440和DM9000移植LWIP
終于開始我的第一篇筆記了。這回要做的事情,是以太網的移植。 使用mini2440已經有一段時間了。諸如裸機的LED,鍵盤開關等等等等也都試驗過了,uCOS,WinCE也是淺嘗了一下。如今想到了以太網。 由于mini2440的板上集成了一個DM9000的網卡,并且在CE系統里面成功的使用以太網與PC連接了。于是自然而然的想,能不能在uCOS下也實現以太網接口呢? 一上來什么都不懂,于是找一些資料,在這里要謝謝焦海波老師所著的嵌入式網絡系統設計一書,移植過程中很多資料都來源于這本書。其次是mikenoodle的單片機驅動DM9000網卡一文,里面詳細地講述如何在2440裸機下驅動DM9000網卡。 首先明確我們需要做的事情是什么?為了
[單片機]
s3c2440裸機-電阻觸摸屏-3-觸摸屏TSC初始化和中斷服務程序框架
1. ADC中斷產生流程 中斷源: 這里是ADC和TSC共用一個中斷源。 SRCPND表示哪個中斷源產生了中斷請求。 INTMODE:配置中斷模式 配置中斷屏蔽寄存器 中斷掛起寄存器(用來顯示當前優先級最高的、正在發生的中斷, 需要清除對應位) 從SRCPND寄存器可以讀到ADC和TSC復用的同一個中斷源,那么如何區分呢? 可以從SUBSRCPND寄存器配置,如下: 當bit 9被置1時,表示TSC中斷。那么我們需要打開subsrcmask寄存器 所以TSC中斷的產生流程如下: 2. TSC編程實現   ①初始化T
[單片機]
u-boot-2009.08在mini2440上的移植 增加I2C EEPROM功能
移植環境 1,主機環境:VMare下CentOS 5.5 ,1G內存。 2,集成開發環境:Elipse IDE 3,編譯編譯環境:arm-linux-gcc v4.4.3,arm-none-eabi-gcc v4.5.1。 4,開發板:mini2440,2M nor flash,128M nand flash。 5,u-boot版本:u-boot-2009.08 6,參考文章: 10.1,實現u-boot的I2C EEPROM功能 mini2440開發板上的AT24C08A芯片提供了8kbyte的非易失的EEPROM存儲空間,而且是通過I2C協議進行讀寫的,U-boot提供了對I2C和EEPROM的操作支持。 打開/include
[單片機]
mini2440 LED驅動程序
myled.c #include linux/module.h #include linux/kernel.h #include linux/fs.h #include linux/cdev.h #include asm/uaccess.h #include linux/device.h #include mach/hardware.h #include mach/gpio-nrs.h #include mach/regs-gpio.h /*#include gpio-nrs.h */ //add tsuibin #include linux/init.h #include linux/interrupt.h #include l
[單片機]
mini2440 使用sdram
在S3C2440A user manual.pdf 的第五章有 Memory Controller的介紹。設置memory controller是為了明確各個bank(硬件決定出的地址空間)屬性,包括數據位寬、WAIT信號、訪問時序、刷新周期、bank起始位置和大小 (僅對bank6、7)及SDRAM模式。《嵌入式Linux應用開發完全手冊》第6章對各寄存器有較詳細敘述,再配上 S3C2440A user manual.pdf 各寄存器個字段含義應屬明確。只可惜這些還不夠,舉例來說要設置SDRAM各參數,沒有SDRAM數據手冊是沒法做的,在這個百花齊放的世界里真沒什么是 通吃的。 韋東山《嵌入式Linux應用開發完全手冊》PDF光
[單片機]
s3c2440裸機-代碼重定位、清bss的優化和位置無關碼
1.代碼重定位的改進 用ldr、str代替ldrb, strb加快代碼重定位的速度。 前面重定位時,我們使用的是ldrb命令從的Nor Flash讀取1字節數據,再用strb命令將1字節數據寫到SDRAM里面。 我們2440開發板的Nor Flash是16位,SDRAM是32位。 假設現在需要復制16byte數據。 不同的讀寫指令 cpu讀取nor的次數 cpu寫入sdram的次數 ldrb、strb 16 16 ldr、str 8 4 可以看出我們更換讀寫指令后讀寫次數變少了,提升了cpu的訪問效率。 修改后的start.s代碼如下圖所示,這里我只簡單的列出了重定位的實現: ... cpy: ld
[單片機]
s3c<font color='red'>2440</font><font color='red'>裸機</font>-代碼重定位、清bss的優化和位置無關碼
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京B2-20211791 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 库车县| 天等县| 获嘉县| 昌江| 洛扎县| 平远县| 志丹县| 石城县| 延长县| 丰宁| 夏津县| 康乐县| 麻城市| 卓尼县| 焉耆| 胶州市| 漳平市| 壤塘县| 平定县| 古田县| 沙坪坝区| 怀宁县| 东源县| 临颍县| 乌兰县| 雅江县| 民乐县| 方山县| 诸暨市| 诸城市| 咸宁市| 开封县| 龙州县| 义马市| 泌阳县| 岳阳市| 天柱县| 麻栗坡县| 土默特右旗| 镇巴县| 苍梧县|