From 30303d366d1a0d857357c90bed876686f2d1e603 Mon Sep 17 00:00:00 2001
From: yincheng.zhong <634916154@qq.com>
Date: 星期二, 18 十一月 2025 19:44:21 +0800
Subject: [PATCH] 添加新的文件

---
 STM32H743/FML/GPS.c |  299 +++++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 258 insertions(+), 41 deletions(-)

diff --git a/STM32H743/FML/GPS.c b/STM32H743/FML/GPS.c
index eabf0c5..843e10b 100644
--- a/STM32H743/FML/GPS.c
+++ b/STM32H743/FML/GPS.c
@@ -14,6 +14,7 @@
 #include "GPIO.h"
 #include "Uart.h"
 #include "UDPClient.h"
+#include "PythonLink.h"
 // #include "global_param.h"
 
 #include "TTS.h"
@@ -34,10 +35,10 @@
 typedef struct
 {
     E_GPSRecvState m_eState;
-    HIDO_CHAR m_acHeader[10], m_acHeader2[10], m_acHeader3[10];
-    HIDO_UINT32 m_u32HeaderLen, m_u32Header2Len, m_u32Header3Len;
+    HIDO_CHAR m_acHeader[10], m_acHeader2[10], m_acHeader3[10], m_acHeader4[10], m_acHeader5[10];
+    HIDO_UINT32 m_u32HeaderLen, m_u32Header2Len, m_u32Header3Len, m_u32Header4Len, m_u32Header5Len;
 
-    HIDO_CHAR m_acRecvBuf[128];
+    HIDO_CHAR m_acRecvBuf[256];  // 澧炲ぇ缂撳啿鍖轰互瀹圭撼GPRMI鐨�23涓瓧娈�
     HIDO_UINT32 m_u32RecvLen;
 } ST_GPSRecv;
 
@@ -52,7 +53,11 @@
 static HIDO_BOOL l_bGPSConfig = HIDO_FALSE;
 static HIDO_UINT32 l_u32QXTick = 0;
 HIDO_UINT32 getRTK_Tick = 0;
-/* GPS命令 */
+
+/* 瀛樺偍鏈�鏂扮殑GPRMI鍜孏PIMU鏁版嵁 */
+static ST_GPRMI l_stGPRMI;
+static ST_GPIMU l_stGPIMU;
+/* GPS锟斤拷锟斤拷 */
 static HIDO_UINT8 l_au8CmdSave[] = {0xB5, 0x62, 0x06, 0x09, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x31, 0xBF};
 static HIDO_UINT8 l_au8CmdRate1Hz[] = {0xB5, 0x62, 0x06, 0x08, 0x06, 0x00, 0xE8, 0x03, 0x01, 0x00, 0x01, 0x00, 0x01, 0x39};
 static HIDO_UINT8 l_au8CmdRate2Hz[] = {0xB5, 0x62, 0x06, 0x08, 0x06, 0x00, 0xF4, 0x01, 0x01, 0x00, 0x01, 0x00, 0x0B, 0x77};
@@ -61,12 +66,12 @@
 
 /*******************************************************************************
  * Function Name     : GPS_RateConfig
- * Description       : GPS速率配置 支持1HZ、2HZ、5HZ、10HZ
- * Input             : _u8Rate 速率
+ * Description       : GPS锟斤拷锟斤拷锟斤拷锟斤拷 支锟斤拷1HZ锟斤拷2HZ锟斤拷5HZ锟斤拷10HZ
+ * Input             : _u8Rate 锟斤拷锟斤拷
  * Output            : None
- * Return            : HIDO_OK 成功, HIDO_ERR 失败
+ * Return            : HIDO_OK 锟缴癸拷, HIDO_ERR 失锟斤拷
  * Author            : www.hido-studio.com
- * Modified Date:    : 2021年5月07日
+ * Modified Date:    : 2021锟斤拷5锟斤拷07锟斤拷
  *******************************************************************************/
 static HIDO_INT32 GPS_RateConfig(HIDO_UINT8 _u8Rate)
 {
@@ -109,13 +114,13 @@
 
 /*******************************************************************************
  * Function Name     : GPS_DataCheck
- * Description       : GPS数据格式检查
- * Input             : _pcData GPS数据
- *                   : _u32Len GPS数据长度
+ * Description       : GPS锟斤拷锟捷革拷式锟斤拷锟�
+ * Input             : _pcData GPS锟斤拷锟斤拷
+ *                   : _u32Len GPS锟斤拷锟捷筹拷锟斤拷
  * Output            : None
- * Return            : HIDO_OK 成功, HIDO_ERR 失败
+ * Return            : HIDO_OK 锟缴癸拷, HIDO_ERR 失锟斤拷
  * Author            : www.hido-studio.com
- * Modified Date:    : 2021年5月07日
+ * Modified Date:    : 2021锟斤拷5锟斤拷07锟斤拷
  *******************************************************************************/
 static HIDO_INT32 GPS_DataCheck(HIDO_CHAR *_pcData, HIDO_UINT32 _u32Len)
 {
@@ -147,13 +152,13 @@
 
 /*******************************************************************************
  * Function Name     : GPS_ParseGGA
- * Description       : GPS GGA数据解析(仅检查数据是否有效)
- * Input             : _pcData GGA数据
- *                   : _u32Len GGA数据长度
+ * Description       : GPS GGA锟斤拷锟捷斤拷锟斤拷(锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷欠锟斤拷锟叫�)
+ * Input             : _pcData GGA锟斤拷锟斤拷
+ *                   : _u32Len GGA锟斤拷锟捷筹拷锟斤拷
  * Output            : None
- * Return            : HIDO_OK 成功, HIDO_ERR 失败
+ * Return            : HIDO_OK 锟缴癸拷, HIDO_ERR 失锟斤拷
  * Author            : www.hido-studio.com
- * Modified Date:    : 2021年5月07日
+ * Modified Date:    : 2021锟斤拷5锟斤拷07锟斤拷
  *******************************************************************************/
 static HIDO_INT32 GPS_ParseGGA(HIDO_CHAR *_pcData, HIDO_UINT32 _u32Len)
 {
@@ -173,6 +178,144 @@
 
     l_u8PosState = atoi((HIDO_CHAR *)stPosState.m_pData);
 
+    return HIDO_OK;
+}
+
+/*******************************************************************************
+ * Function Name     : GPS_ParseGPRMI
+ * Description       : 瑙f瀽GPRMI鏁版嵁鍖�
+ * Input             : _pcData GPRMI鏁版嵁
+ *                   : _u32Len GPRMI鏁版嵁闀垮害
+ * Output            : None
+ * Return            : HIDO_OK 鎴愬姛, HIDO_ERR 澶辫触
+ * Author            : www.hido-studio.com
+ * Modified Date:    : 2025骞�11鏈�11鏃�
+ *******************************************************************************/
+static HIDO_INT32 GPS_ParseGPRMI(HIDO_CHAR *_pcData, HIDO_UINT32 _u32Len)
+{
+    HIDO_DataStruct astFields[23];
+    
+    memset(&l_stGPRMI, 0, sizeof(ST_GPRMI));
+    l_stGPRMI.m_bValid = HIDO_FALSE;
+    
+    // 妫�鏌ユ暟鎹牸寮忔牎楠�
+    if (GPS_DataCheck(_pcData, _u32Len) != HIDO_OK)
+    {
+        return HIDO_ERR;
+    }
+    
+    // 瑙f瀽23涓瓧娈�: $GPRMI,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>,<15>,<16>,<17>,<18>,<19>,<20>,<21>,<22>,<23>*<CR><LF>
+    if (HIDO_UtilParseFormat((HIDO_UINT8 *)_pcData, _u32Len, 
+        "$%*,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p*%**",
+        &astFields[0], &astFields[1], &astFields[2], &astFields[3], &astFields[4],
+        &astFields[5], &astFields[6], &astFields[7], &astFields[8], &astFields[9],
+        &astFields[10], &astFields[11], &astFields[12], &astFields[13], &astFields[14],
+        &astFields[15], &astFields[16], &astFields[17], &astFields[18], &astFields[19],
+        &astFields[20], &astFields[21], &astFields[22]) != 25)
+    {
+        return HIDO_ERR;
+    }
+    
+    // 瑙f瀽鍚勫瓧娈�
+    l_stGPRMI.m_u32UTCTime = (HIDO_UINT32)(atof((HIDO_CHAR *)astFields[0].m_pData) * 100);  // 杞崲涓烘暣鏁�
+    l_stGPRMI.m_u16WeekNumber = (HIDO_UINT16)atoi((HIDO_CHAR *)astFields[1].m_pData);
+    l_stGPRMI.m_u32TimeOfWeek = (HIDO_UINT32)(atof((HIDO_CHAR *)astFields[2].m_pData) * 1000);  // 杞崲涓烘绉�
+    l_stGPRMI.m_dLatitude = atof((HIDO_CHAR *)astFields[3].m_pData);
+    l_stGPRMI.m_dLongitude = atof((HIDO_CHAR *)astFields[4].m_pData);
+    l_stGPRMI.m_fAltitude = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[5].m_pData);
+    l_stGPRMI.m_fLatStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[6].m_pData);
+    l_stGPRMI.m_fLonStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[7].m_pData);
+    l_stGPRMI.m_fAltStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[8].m_pData);
+    l_stGPRMI.m_fEastVelocity = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[9].m_pData);
+    l_stGPRMI.m_fNorthVelocity = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[10].m_pData);
+    l_stGPRMI.m_fUpVelocity = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[11].m_pData);
+    l_stGPRMI.m_fHorizontalVelStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[12].m_pData);
+    l_stGPRMI.m_fHeadingAngle = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[13].m_pData);
+    l_stGPRMI.m_fPitchAngle = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[14].m_pData);
+    l_stGPRMI.m_fRollAngle = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[15].m_pData);
+    l_stGPRMI.m_fHeadingAngleStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[16].m_pData);
+    l_stGPRMI.m_fPitchAngleStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[17].m_pData);
+    l_stGPRMI.m_fRollAngleStdDev = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[18].m_pData);
+    l_stGPRMI.m_fBaselineDistance = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[19].m_pData);
+    l_stGPRMI.m_u8SatelliteCount = (HIDO_UINT8)atoi((HIDO_CHAR *)astFields[20].m_pData);
+    l_stGPRMI.m_u8FixedAmbiguityCount = (HIDO_UINT8)atoi((HIDO_CHAR *)astFields[21].m_pData);
+    l_stGPRMI.m_u8PositionQuality = (HIDO_UINT8)atoi((HIDO_CHAR *)astFields[22].m_pData);
+    
+    l_stGPRMI.m_bValid = HIDO_TRUE;
+    
+    // 绔嬪嵆鍙戦�丟PS鏁版嵁鍒癙ython (10Hz鏇存柊)
+    PythonLink_SendGPSData(&l_stGPRMI);
+    
+    return HIDO_OK;
+}
+
+/*******************************************************************************
+ * Function Name     : GPS_ParseGPIMU
+ * Description       : 瑙f瀽GPIMU鏁版嵁鍖�
+ * Input             : _pcData GPIMU鏁版嵁
+ *                   : _u32Len GPIMU鏁版嵁闀垮害
+ * Output            : None
+ * Return            : HIDO_OK 鎴愬姛, HIDO_ERR 澶辫触
+ * Author            : www.hido-studio.com
+ * Modified Date:    : 2025骞�11鏈�11鏃�
+ *******************************************************************************/
+static HIDO_INT32 GPS_ParseGPIMU(HIDO_CHAR *_pcData, HIDO_UINT32 _u32Len)
+{
+    HIDO_DataStruct astFields[8];  // 8涓暟鎹瓧娈�
+    HIDO_UINT8 u8CalcChecksum = 0;
+    HIDO_UINT32 i = 0;
+    HIDO_CHAR *pCheckStart = HIDO_NULL;
+    HIDO_CHAR *pCheckEnd = HIDO_NULL;
+    
+    memset(&l_stGPIMU, 0, sizeof(ST_GPIMU));
+    l_stGPIMU.m_bValid = HIDO_FALSE;
+    
+    // 瑙f瀽8涓瓧娈�: $GPIMU,<鏃堕棿>,<AccX>,<AccY>,<AccZ>,<GyroX>,<GyroY>,<GyroZ>,<娓╁害>*<鏍¢獙鍜�>
+    // 瀹為檯鏁版嵁绀轰緥: $GPIMU,102728.808,-0.010,-0.281,-1.000,0.092,-0.214,-0.031,29.00*5B
+    if (HIDO_UtilParseFormat((HIDO_UINT8 *)_pcData, _u32Len,
+        "$GPIMU,%p,%p,%p,%p,%p,%p,%p,%p*%**",
+        &astFields[0], &astFields[1], &astFields[2], &astFields[3],
+        &astFields[4], &astFields[5], &astFields[6], &astFields[7]) < 8)
+    {
+        return HIDO_ERR;
+    }
+    
+    // 璁$畻寮傛垨鏍¢獙: 浠庣涓�涓瓧娈靛埌绗�9涓瓧娈电殑寮傛垨鍜�
+    // 绀轰緥鏁版嵁: $GPIMU, 054752.002, 0.000, 0.007, -1.032, -0.003, 0.053, -0.016,26.00@59
+    // 鏍煎紡璇存槑: 璇彞绀轰緥涓殑寮傛垨鏍¢獙鍜屼负0@59 (鍗佸叚杩涘埗59)
+    pCheckStart = strchr(_pcData, ',');  // 鎵惧埌绗竴涓�楀彿
+    pCheckEnd = strrchr(_pcData, '*');    // 鎵惧埌鏈�鍚庝竴涓槦鍙�
+    
+    if (pCheckStart != HIDO_NULL && pCheckEnd != HIDO_NULL && pCheckEnd > pCheckStart)
+    {
+        // 璁$畻浠庣涓�涓�楀彿鍚庡埌鏄熷彿鍓嶇殑鎵�鏈夊瓧绗︾殑寮傛垨
+        for (i = 0; pCheckStart + i < pCheckEnd; i++)
+        {
+            u8CalcChecksum ^= (HIDO_UINT8)(pCheckStart[i]);
+        }
+    }
+    
+    // 瑙f瀽鍚勫瓧娈�: 鏃堕棿銆�3杞村姞閫熷害銆�3杞磋閫熷害銆佹俯搴�
+    l_stGPIMU.m_u32UTCTime = (HIDO_UINT32)(atof((HIDO_CHAR *)astFields[0].m_pData) * 1000);  // 杞崲涓烘绉�
+    l_stGPIMU.m_fAccelX = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[1].m_pData);
+    l_stGPIMU.m_fAccelY = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[2].m_pData);
+    l_stGPIMU.m_fAccelZ = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[3].m_pData);
+    l_stGPIMU.m_fGyroX = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[4].m_pData);
+    l_stGPIMU.m_fGyroY = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[5].m_pData);
+    l_stGPIMU.m_fGyroZ = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[6].m_pData);
+    l_stGPIMU.m_fTemperature = (HIDO_FLOAT)atof((HIDO_CHAR *)astFields[7].m_pData);
+    
+    // 鏍¢獙鍜屽凡鐢盚IDO_UtilParseFormat澶勭悊锛堟牸寮忓瓧绗︿覆涓殑*%**锛�
+    l_stGPIMU.m_u8Checksum = 0;  // 涓嶉渶瑕佸崟鐙瓨鍌�
+    
+    // 楠岃瘉鏍¢獙鍜� (鏍规嵁鏂囨。锛岃繖鏄紓鎴栨牎楠�)
+    // 娉ㄦ剰: 鏂囨。涓樉绀烘牎楠屽�煎湪鏈�鍚庯紝闇�瑕佹牴鎹疄闄呭崗璁‘瀹氭槸鍚﹂獙璇�
+    
+    l_stGPIMU.m_bValid = HIDO_TRUE;
+    
+    // 绔嬪嵆鍙戦�両MU鏁版嵁鍒癙ython (100Hz鏇存柊)
+    PythonLink_SendIMUData(&l_stGPIMU);
+    
     return HIDO_OK;
 }
 u16 g_spsum, g_snum;
@@ -213,20 +356,20 @@
 }
 /*******************************************************************************
  * Function Name     : GPS_RecvFsm
- * Description       : GPS 数据接收状态机
- * Input             : _u8RecvChar 一个接收字符
+ * Description       : GPS 锟斤拷锟捷斤拷锟斤拷状态锟斤拷
+ * Input             : _u8RecvChar 一锟斤拷锟斤拷锟斤拷锟街凤拷
  * Output            : None
  * Return            : one
  * Author            : www.hido-studio.com
- * Modified Date:    : 2021年5月07日
+ * Modified Date:    : 2021锟斤拷5锟斤拷07锟斤拷
  *******************************************************************************/
 static HIDO_VOID GPS_RecvFsm(HIDO_UINT8 _u8RecvChar)
 {
     static int LastRTK = 0;
 
-    HIDO_CHAR GPS_1[10] = "设备单点";
-    HIDO_CHAR GPS_4[10] = "设备固定";
-    HIDO_CHAR GPS_5[10] = "设备浮动";
+    HIDO_CHAR GPS_1[10] = "锟借备锟斤拷锟斤拷";
+    HIDO_CHAR GPS_4[10] = "锟借备锟教讹拷";
+    HIDO_CHAR GPS_5[10] = "锟借备锟斤拷锟斤拷";
 
     switch (l_stGPSRecv.m_eState)
     {
@@ -254,6 +397,14 @@
                 l_stGPSRecv.m_eState = GPS_RECV_STATE_CR;
             }
             else if (memcmp(l_stGPSRecv.m_acRecvBuf, l_stGPSRecv.m_acHeader3, l_stGPSRecv.m_u32Header3Len) == 0)
+            {
+                l_stGPSRecv.m_eState = GPS_RECV_STATE_CR;
+            }
+            else if (memcmp(l_stGPSRecv.m_acRecvBuf, l_stGPSRecv.m_acHeader4, l_stGPSRecv.m_u32Header4Len) == 0)
+            {
+                l_stGPSRecv.m_eState = GPS_RECV_STATE_CR;
+            }
+            else if (memcmp(l_stGPSRecv.m_acRecvBuf, l_stGPSRecv.m_acHeader5, l_stGPSRecv.m_u32Header5Len) == 0)
             {
                 l_stGPSRecv.m_eState = GPS_RECV_STATE_CR;
             }
@@ -289,7 +440,7 @@
         if ('\n' == _u8RecvChar)
         {
 
-            /* 配置GPS HZ */
+            /* 锟斤拷锟斤拷GPS HZ */
             //                g_com_map[GPS_HZ] = 10;
             //if (l_bGPSConfig || l_u8GPS_HZ != g_com_map[GPS_HZ])
             {
@@ -301,6 +452,17 @@
             {
                 GPS_ParseGSV(l_stGPSRecv.m_acRecvBuf, l_stGPSRecv.m_u32RecvLen);
             }
+            else if (memcmp(l_stGPSRecv.m_acRecvBuf, l_stGPSRecv.m_acHeader4, l_stGPSRecv.m_u32Header4Len) == 0)
+            {
+                // 瑙f瀽GPRMI鏁版嵁
+                GPS_ParseGPRMI(l_stGPSRecv.m_acRecvBuf, l_stGPSRecv.m_u32RecvLen);
+            }
+            else if (memcmp(l_stGPSRecv.m_acRecvBuf, l_stGPSRecv.m_acHeader5, l_stGPSRecv.m_u32Header5Len) == 0)
+            {
+                // 瑙f瀽GPIMU鏁版嵁
+                GPS_ParseGPIMU(l_stGPSRecv.m_acRecvBuf, l_stGPSRecv.m_u32RecvLen);
+            }
+            
             if (memcmp(l_stGPSRecv.m_acRecvBuf, l_stGPSRecv.m_acHeader, l_stGPSRecv.m_u32HeaderLen) == 0)
             {
                 static uint32_t gps_uploadtimer = 0;
@@ -333,12 +495,12 @@
 
 /*******************************************************************************
  * Function Name     : GPS_Rest
- * Description       : GPS复位
+ * Description       : GPS锟斤拷位
  * Input             : None
  * Output            : None
  * Return            : None
  * Author            : www.hido-studio.com
- * Modified Date:    : 2021年1月8日
+ * Modified Date:    : 2021锟斤拷1锟斤拷8锟斤拷
  *******************************************************************************/
 static HIDO_VOID GPS_Rest(void)
 {
@@ -351,12 +513,12 @@
 
 /*******************************************************************************
  * Function Name     : GPS_PowerOn
- * Description       : GPS上电
+ * Description       : GPS锟较碉拷
  * Input             : None
  * Output            : None
  * Return            : None
  * Author            : www.hido-studio.com
- * Modified Date:    : 2021年1月8日
+ * Modified Date:    : 2021锟斤拷1锟斤拷8锟斤拷
  *******************************************************************************/
 static HIDO_VOID GPS_PowerOn(void)
 {
@@ -365,12 +527,12 @@
 
 /*******************************************************************************
  * Function Name     : GPS_PowerOff
- * Description       : GPS掉电
+ * Description       : GPS锟斤拷锟斤拷
  * Input             : None
  * Output            : None
  * Return            : None
  * Author            : www.hido-studio.com
- * Modified Date:    : 2021年1月8日
+ * Modified Date:    : 2021锟斤拷1锟斤拷8锟斤拷
  *******************************************************************************/
 HIDO_VOID GPS_PowerOff(void)
 {
@@ -383,12 +545,12 @@
 
 /*******************************************************************************
  * Function Name     : GPS_GetState
- * Description       : 获取GPS定位状态
+ * Description       : 锟斤拷取GPS锟斤拷位状态
  * Input             : None
  * Output            : None
- * Return            : 定位状态 0 1 2 3
+ * Return            : 锟斤拷位状态 0 1 2 3
  * Author            : www.hido-studio.com
- * Modified Date:    : 2021年1月8日
+ * Modified Date:    : 2021锟斤拷1锟斤拷8锟斤拷
  *******************************************************************************/
 HIDO_UINT8 GPS_GetState(HIDO_VOID)
 {
@@ -397,14 +559,14 @@
 
 /*******************************************************************************
  * Function Name     : GPS_PinRegister
- * Description       : GPS模块管脚注册
- * Input             : _ePin 管脚定义
+ * Description       : GPS模锟斤拷芙锟阶拷锟�
+ * Input             : _ePin 锟杰脚讹拷锟斤拷
  *                   : _pstGPIOx GPIOx
  *                   : _u16GPIOPin GPIO_PIN_x
  * Output            : None
  * Return            : None
  * Author            : www.hido-studio.com
- * Modified Date:    : 2021年1月8日
+ * Modified Date:    : 2021锟斤拷1锟斤拷8锟斤拷
  *******************************************************************************/
 HIDO_VOID GPS_PinRegister(E_GPSPin _ePin, GPIO_TypeDef *_pstGPIOx, HIDO_UINT16 _u16GPIOPin)
 {
@@ -414,12 +576,12 @@
 
 /*******************************************************************************
  * Function Name     : GPS_Poll
- * Description       : GPS轮询处理
+ * Description       : GPS锟斤拷询锟斤拷锟斤拷
  * Input             : None
  * Output            : None
  * Return            : None
  * Author            : www.hido-studio.com
- * Modified Date:    : 2021年1月8日
+ * Modified Date:    : 2021锟斤拷1锟斤拷8锟斤拷
  *******************************************************************************/
 HIDO_VOID GPS_Poll(void)
 {
@@ -474,12 +636,12 @@
 
 /*******************************************************************************
  * Function Name     : GPS_Init
- * Description       : GPS模块初始化
+ * Description       : GPS模锟斤拷锟绞硷拷锟�
  * Input             : None
  * Output            : None
  * Return            : None
  * Author            : www.hido-studio.com
- * Modified Date:    : 2021年1月8日
+ * Modified Date:    : 2021锟斤拷1锟斤拷8锟斤拷
  *******************************************************************************/
 HIDO_VOID GPS_Init(void)
 {
@@ -502,6 +664,8 @@
     l_stGPSRecv.m_u32HeaderLen = HIDO_UtilSnprintf(l_stGPSRecv.m_acHeader, sizeof(l_stGPSRecv.m_acHeader), "$GNGGA");
     l_stGPSRecv.m_u32Header2Len = HIDO_UtilSnprintf(l_stGPSRecv.m_acHeader2, sizeof(l_stGPSRecv.m_acHeader2), "$GPGSV");
     l_stGPSRecv.m_u32Header3Len = HIDO_UtilSnprintf(l_stGPSRecv.m_acHeader3, sizeof(l_stGPSRecv.m_acHeader3), "$GBGSV");
+    l_stGPSRecv.m_u32Header4Len = HIDO_UtilSnprintf(l_stGPSRecv.m_acHeader4, sizeof(l_stGPSRecv.m_acHeader4), "$GPFMI");
+    l_stGPSRecv.m_u32Header5Len = HIDO_UtilSnprintf(l_stGPSRecv.m_acHeader5, sizeof(l_stGPSRecv.m_acHeader5), "$GPIMU");
     l_bGPSConfig = HIDO_TRUE;
     //gpsbaudrate = (g_com_map[GPSBAUDRATE1_INDEX] << 8) | g_com_map[GPSBAUDRATE2_INDEX];
     if (gpsbaudrate > 921600 || gpsbaudrate < 9600)
@@ -510,3 +674,56 @@
     }
     Uart_ReConfigBaudRate(UART_ID_GPS, gpsbaudrate);
 }
+
+/*******************************************************************************
+ * Function Name     : GPS_GetGPRMI
+ * Description       : 鑾峰彇鏈�鏂扮殑GPRMI鏁版嵁
+ * Input             : _pstGPRMI - 瀛樺偍GPRMI鏁版嵁鐨勭粨鏋勪綋鎸囬拡
+ * Output            : None
+ * Return            : HIDO_OK - 鎴愬姛, HIDO_ERR - 澶辫触鎴栨暟鎹棤鏁�
+ * Author            : www.hido-studio.com
+ * Modified Date:    : 2025骞�11鏈�11鏃�
+ *******************************************************************************/
+HIDO_INT32 GPS_GetGPRMI(ST_GPRMI *_pstGPRMI)
+{
+    if (_pstGPRMI == HIDO_NULL)
+    {
+        return HIDO_ERR;
+    }
+    
+    if (l_stGPRMI.m_bValid == HIDO_FALSE)
+    {
+        return HIDO_ERR;
+    }
+    
+    memcpy(_pstGPRMI, &l_stGPRMI, sizeof(ST_GPRMI));
+    
+    return HIDO_OK;
+}
+
+/*******************************************************************************
+ * Function Name     : GPS_GetGPIMU
+ * Description       : 鑾峰彇鏈�鏂扮殑GPIMU鏁版嵁
+ * Input             : _pstGPIMU - 瀛樺偍GPIMU鏁版嵁鐨勭粨鏋勪綋鎸囬拡
+ * Output            : None
+ * Return            : HIDO_OK - 鎴愬姛, HIDO_ERR - 澶辫触鎴栨暟鎹棤鏁�
+ * Author            : www.hido-studio.com
+ * Modified Date:    : 2025骞�11鏈�11鏃�
+ *******************************************************************************/
+HIDO_INT32 GPS_GetGPIMU(ST_GPIMU *_pstGPIMU)
+{
+    if (_pstGPIMU == HIDO_NULL)
+    {
+        return HIDO_ERR;
+    }
+    
+    if (l_stGPIMU.m_bValid == HIDO_FALSE)
+    {
+        return HIDO_ERR;
+    }
+    
+    memcpy(_pstGPIMU, &l_stGPIMU, sizeof(ST_GPIMU));
+    
+    return HIDO_OK;
+}
+

--
Gitblit v1.9.3