yincheng.zhong
7 天以前 b53fff11e6f0d560594834de32886239cbba90a3
STM32H743/FML/GPS.h
@@ -1,7 +1,7 @@
/*******************************************************************************
 * File Name         : GPS.h
 * Description       :
 * Created on        : 2019年3月11日
 * Created on        : 2019��3��11��
 * Author            : www.hido-studio.com
 *******************************************************************************/
#ifndef _GPS_H_
@@ -16,6 +16,25 @@
/*******************************************************************************
 *                                  Macro                                      *
 *******************************************************************************/
/* IM23A NAVI 数据 STATUS 状态字定义 */
#define IM23A_STATUS_FINIT          (0x00000001U) // 1  滤波器未初始化标志
#define IM23A_STATUS_READY          (0x00000002U) // 2  滤波器收敛完成标志
#define IM23A_STATUS_INACCURATE     (0x00000004U) // 3  滤波器收敛过程中
#define IM23A_STATUS_TILT_REJECT    (0x00000008U) // 4  倾角过大标志位
#define IM23A_STATUS_GNSS_REJECT    (0x00000010U) // 5  GNSS 定位数据差标志位
#define IM23A_STATUS_FRESET         (0x00000020U) // 6  滤波器重置标志位
#define IM23A_STATUS_FIX_RLS1       (0x00000040U) // 7  倾斜测量安装角估计阶段 1
#define IM23A_STATUS_FIX_RLS2       (0x00000080U) // 8  倾斜测量安装角估计阶段 2
#define IM23A_STATUS_FIX_RLS3       (0x00000100U) // 9  倾斜测量安装角估计阶段 3
#define IM23A_STATUS_FIX_RLS4       (0x00000200U) // 10 倾斜测量安装角估计阶段 4
#define IM23A_STATUS_FIX_RLS_OK     (0x00000400U) // 11 倾斜测量安装角估计完成
#define IM23A_STATUS_DIR1           (0x00002000U) // 12 初始化晃动方向 1
#define IM23A_STATUS_DIR2           (0x00004000U) // 13 初始化晃动方向 2
#define IM23A_STATUS_GNSS_LOST      (0x00010000U) // 14 滤波器判定 GNSS 数据无效
#define IM23A_STATUS_FINIT_OK       (0x00020000U) // 15 初始化完成标志
#define IM23A_STATUS_PPS_READY      (0x00040000U) // 16 收到 PPS 信号
#define IM23A_STATUS_SYNC_READY     (0x00080000U) // 17 模块时间同步成功
#define IM23A_STATUS_GNSS_CONNECT   (0x00100000U) // 18 模块解析到 RTK 数据
/*******************************************************************************
 *                             Type Definition                                 *
@@ -61,54 +80,194 @@
    HIDO_UINT8 m_u8Sec; //second
}ST_GPS;
/* GPRMI数据包结构 */
typedef struct
{
    HIDO_UINT32 m_u32UTCTime;            // <1> UTC时间, hhmmss.ss格式 (centisecond)
    HIDO_UINT16 m_u16WeekNumber;         // <2> 周数 (IM23A无此字段, 默认0)
    HIDO_UINT32 m_u32TimeOfWeek;         // <3> 周内秒 (IM23A无此字段, 默认0)
    HIDO_DOUBLE m_dLatitude;             // <4> 纬度(°), 正数为北纬
    HIDO_DOUBLE m_dLongitude;            // <5> 经度(°), 正数为东经
    HIDO_FLOAT m_fAltitude;              // <6> 高程(m)
    HIDO_FLOAT m_fLatStdDev;             // <7> 纬度标准差(m) / 预留
    HIDO_FLOAT m_fLonStdDev;             // <8> 经度标准差(m) / 预留
    HIDO_FLOAT m_fAltStdDev;             // <9> 高程标准差(m) / 预留
    HIDO_FLOAT m_fEastVelocity;          // <10> 东方向速度(m/s)
    HIDO_FLOAT m_fNorthVelocity;         // <11> 北方向速度(m/s)
    HIDO_FLOAT m_fUpVelocity;            // <12> 天顶方向速度(m/s)
    HIDO_FLOAT m_fHorizontalVelStdDev;   // <13> 定位精度(来自IM23A字段11)
    HIDO_FLOAT m_fHeadingAngle;          // <14> 航向角(°) [IM23A原始为弧度,已转换为0-360°]
    HIDO_FLOAT m_fPitchAngle;            // <15> 俯仰角(°) [IM23A原始为弧度,已转换]
    HIDO_FLOAT m_fRollAngle;             // <16> 横滚角(°) [IM23A原始为弧度,已转换]
    HIDO_FLOAT m_fHeadingAngleStdDev;    // <17> 航向角标准差(°) / 预留
    HIDO_FLOAT m_fPitchAngleStdDev;      // <18> 俯仰角标准差(°) / 预留
    HIDO_FLOAT m_fRollAngleStdDev;       // <19> 横滚角标准差(°) / 预留
    HIDO_FLOAT m_fBaselineDistance;      // <20> 基线距离(m) / 预留
    HIDO_UINT8 m_u8SatelliteCount;       // <21> 卫星数量(如协议缺省则返回0)
    HIDO_UINT8 m_u8FixedAmbiguityCount;  // <22> 载波整周固定观测量个数(默认0)
    HIDO_UINT8 m_u8PositionQuality;      // <23> 定位质量指示(来自状态字低8位)
    HIDO_BOOL m_bValid;                  // 数据有效标志
    /* IM23A扩展字段 */
    HIDO_FLOAT m_fAccelBiasX;            // 加速度计 X 零偏
    HIDO_FLOAT m_fAccelBiasY;            // 加速度计 Y 零偏
    HIDO_FLOAT m_fAccelBiasZ;            // 加速度计 Z 零偏
    HIDO_FLOAT m_fGyroBiasX;             // 陀螺仪 X 零偏
    HIDO_FLOAT m_fGyroBiasY;             // 陀螺仪 Y 零偏
    HIDO_FLOAT m_fGyroBiasZ;             // 陀螺仪 Z 零偏
    HIDO_FLOAT m_fImuTemperature;        // 传感器温度(°C)
    HIDO_UINT32 m_u32StatusFlags;        // 状态字段(参见IM23A_STATUS_xxx宏定义)
}ST_GPRMI;
/* GPIMU数据包结构 */
typedef struct
{
    HIDO_UINT32 m_u32UTCTime;           // <1> UTC时间, hhmmss.sss格式
    HIDO_FLOAT m_fAccelX;                // <2> x轴加速度(g)
    HIDO_FLOAT m_fAccelY;                // <3> y轴加速度(g)
    HIDO_FLOAT m_fAccelZ;                // <4> z轴加速度(g)
    HIDO_FLOAT m_fGyroX;                 // <5> 陀螺x轴角速度(°/s)
    HIDO_FLOAT m_fGyroY;                 // <6> 陀螺y轴角速度(°/s)
    HIDO_FLOAT m_fGyroZ;                 // <7> 陀螺z轴角速度(°/s)
    HIDO_FLOAT m_fTemperature;           // <8> 传感器温度(℃)
    HIDO_UINT8 m_u8Checksum;             // <9> 异或校验和
    HIDO_BOOL m_bValid;                  // 数据有效标志
}ST_GPIMU;
/* GPGIG数据包结构 (fmig报文,包含位置信息、解状态和差分龄期) */
typedef struct
{
    HIDO_UINT32 m_u32UTCTime;           // UTC时间
    HIDO_DOUBLE m_dLatitude;            // 纬度(°), 正数为北纬
    HIDO_DOUBLE m_dLongitude;           // 经度(°), 正数为东经
    HIDO_UINT8 m_u8SatelliteCount;      // 卫星数量
    HIDO_UINT8 m_u8SolutionStatus;      // 解状态 (0=无效, 1=单点, 2=伪距差分, 4=RTK固定解, 5=RTK浮点解)
    HIDO_UINT8 m_u8DifferentialAge;     // 差分龄期(秒)
    HIDO_FLOAT m_fHRMS;                  // 水平精度HRMS
    HIDO_FLOAT m_fVRMS;                  // 垂直精度VRMS
    HIDO_FLOAT m_fHDOP;                  // 水平精度因子
    HIDO_FLOAT m_fVDOP;                  // 垂直精度因子
    HIDO_BOOL m_bValid;                  // 数据有效标志
}ST_GPGIG;
/*******************************************************************************
 *                             Global Function                                 *
 *******************************************************************************/
/*******************************************************************************
 * 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);
/*******************************************************************************
 * 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);
/*******************************************************************************
 * 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);
/*******************************************************************************
 * 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);
/*******************************************************************************
 * 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);
/*******************************************************************************
 * 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);
/*******************************************************************************
 * Function Name     : GPS_GetCurrentENU
 * Description       : 获取当前ENU坐标(相对于开机后第一个固定解)
 * Input             : _enu - 存储ENU坐标的数组指针 [东, 北, 天]
 * Output            : None
 * Return            : HIDO_OK - 成功, HIDO_ERR - 失败或原点未初始化
 * Author            : www.hido-studio.com
 * Modified Date:    : 2025年12月3日
 *******************************************************************************/
HIDO_INT32 GPS_GetCurrentENU(float _enu[3]);
/*******************************************************************************
 * Function Name     : GPS_GetGPGIG
 * Description       : 获取最新的GPGIG数据(fmig报文,包含位置信息、解状态和差分龄期)
 * Input             : _pstGPGIG - 存储GPGIG数据的结构体指针
 * Output            : None
 * Return            : HIDO_OK - 成功, HIDO_ERR - 失败或数据无效
 * Author            : www.hido-studio.com
 * Modified Date:    : 2025年12月4日
 *******************************************************************************/
HIDO_INT32 GPS_GetGPGIG(ST_GPGIG *_pstGPGIG);
/*******************************************************************************
 * Function Name     : GPS_UploadGGA
 * Description       : 每秒上传一次GGA报文到4G(拼接fmin和fmig数据,经纬度来自fmig)
 * Input             : None
 * Output            : None
 * Return            : None
 * Author            : www.hido-studio.com
 * Modified Date:    : 2025年12月4日
 *******************************************************************************/
HIDO_VOID GPS_UploadGGA(HIDO_VOID);
/*******************************************************************************
 * Function Name     : GPS_FormatGGA
 * Description       : 将fmin和fmig数据格式化为标准GGA报文(经纬度优先使用fmig数据)
 * Input             : _pstGPRMI - fmin数据
 *                   : _pstGPGIG - fmig数据(包含经纬度信息)
 *                   : _pcBuffer - 输出缓冲区
 *                   : _u32BufferSize - 缓冲区大小
 * Output            : _pcBuffer
 * Return            : 实际写入的字符数,失败返回0
 * Author            : www.hido-studio.com
 * Modified Date:    : 2025年12月4日
 *******************************************************************************/
HIDO_UINT32 GPS_FormatGGA(const ST_GPRMI *_pstGPRMI, const ST_GPGIG *_pstGPGIG,
                          HIDO_CHAR *_pcBuffer, HIDO_UINT32 _u32BufferSize);
#endif /* _GPS_H_ */