LuatOS
直播中

TLLED

11年用户 207经验值
擅长:嵌入式技术
私信 关注

【合宙Air551G双频定位开发板试用体验】获取GPS时间

本帖最后由 TLLED 于 2022-4-2 23:27 编辑

    使用MCU接收GPS模块串口信息,解析时间数据。

    一、GPS信息
    GPS模块上电后会输出很多信息,这里我读取$GNRMC信息来读取GPS时间。
    1.1、GNRMC帧格式:
    001.png
    1.2、串口接收到帧数据
    $GNRMC,144643.000,A,5449.00177,N,13329.74213,E,0.000,350.85,020422,,,A,V*3B
    -144643这个就是UTC时间,需要换算成北京时间。

    二、解析的程序部分

    串口解析部分程序:

  1. void Uart_Interrupt_Receive(void) interrupt 4
  2. {
  3.         
  4.         if(RI)
  5.         {
  6.                 RI=0;
  7.                 uart_rxbuf[uart_js] = SBUF;
  8.                 switch (rx_status)
  9.     {
  10.             case 0x00:
  11.                                 if(uart_rxbuf[0]=='
  12. [b][size=4]   三、运行视频[/size][/b]
  13.    


  14. )
  15.                                 {
  16.                                         rx_status = 0x01;
  17.                                         uart_js++;
  18.                                 }
  19.                                 else
  20.                                 {
  21.                                         uart_js=0;
  22.                                 }
  23.                     break;
  24.             case 0x01:
  25.                                 if(uart_rxbuf[1]=='G')
  26.                                 {
  27.                                         rx_status = 0x02;
  28.                                         uart_js++;
  29.                                 }
  30.                                 else
  31.                                 {
  32.                                         rx_error_flag=1;
  33.                                 }
  34.                     break;
  35.                         case 0x02:
  36.                                 if(uart_rxbuf[2]=='N')
  37.                                 {
  38.                                         rx_status = 0x03;
  39.                                         uart_js++;
  40.                                 }
  41.                                 else
  42.                                 {
  43.                                         rx_error_flag=1;
  44.                                 }
  45.                     break;
  46.                         case 0x03:
  47.                                 if(uart_rxbuf[3]=='R')
  48.                                 {
  49.                                         rx_status = 0x04;
  50.                                         uart_js++;
  51.                                 }
  52.                                 else
  53.                                 {
  54.                                         rx_error_flag=1;
  55.                                 }
  56.                     break;
  57.                         case 0x04:
  58.                                 if(uart_rxbuf[4]=='M')
  59.                                 {
  60.                                         rx_status = 0x05;
  61.                                         uart_js++;
  62.                                 }
  63.                                 else
  64.                                 {
  65.                                         rx_error_flag=1;
  66.                                 }
  67.                     break;
  68.                         case 0x05:
  69.                                 if(uart_rxbuf[5]=='C')
  70.                                 {
  71.                                         rx_status = 0x06;
  72.                                         uart_js++;
  73.                                 }
  74.                                 else
  75.                                 {
  76.                                         rx_error_flag=1;
  77.                                 }
  78.                     break;
  79.                         case 0x06: //,   
  80.                                 if(uart_rxbuf[6]==',')
  81.                                 {
  82.                                         rx_status = 0x07;
  83.                                         uart_njs=uart_js+6;
  84.                                         uart_js++;
  85.                                 }
  86.                                 else
  87.                                 {
  88.                                         rx_error_flag=1;
  89.                                 }
  90.                     break;
  91.                         case 0x07: //date   
  92.                                         uart_js++;
  93.                                         if(uart_js>uart_njs)
  94.                                         {
  95.                                                 uart_js=0;
  96.                                                 rx_status = 0x00;
  97.                                                 rx_finsh_flag=1;
  98.                                         }
  99.                     break;
  100.             default:
  101.                     break;
  102.     }
  103.                 //---------------------------
  104.                 if(rx_error_flag==1) //error
  105.                 {
  106.                         rx_error_flag=0;
  107.                         rx_status = 0x00;
  108.                         uart_js=0;
  109.                 }
  110.                 //---------------------------
  111.         }
  112. }


  113. void uart_date(void)
  114. {
  115.         uchar i=0;
  116.         uchar ds=0;
  117.         if(rx_finsh_flag==1)
  118.         {
  119.                 rx_finsh_flag=0;
  120.                 for(i=0;i<13;i++)
  121.                 {
  122.                         send_char_com(uart_rxbuf[i]);
  123.                         ds=((uart_rxbuf[7]-0x30)*10)+(uart_rxbuf[8]-0x30)+8;
  124.                         disp[0]=ds/10;//uart_rxbuf[7]-0x30;
  125.                         disp[1]=ds%10;//uart_rxbuf[8]-0x30;
  126.                         disp[2]=uart_rxbuf[9]-0x30;
  127.                         disp[3]=uart_rxbuf[10]-0x30;
  128.                         disp[4]=uart_rxbuf[11]-0x30;
  129.                         disp[5]=uart_rxbuf[12]-0x30;
  130.                 }
  131.         }
  132. }

   三、运行视频
   


date

更多回帖

发帖
×
20
完善资料,
赚取积分