/******************************************************************************* * File Name : GPS_Usage_Example.c * Description : GPRMI和GPIMU数据解析使用示例 * Created on : 2025年11月11日 * Author : www.hido-studio.com *******************************************************************************/ #include "GPS.h" #include /******************************************************************************* * Function Name : Example_ReadGPRMI * Description : 读取GPRMI数据示例 * Input : None * Output : None * Return : None *******************************************************************************/ void Example_ReadGPRMI(void) { ST_GPRMI stGPRMI; // 获取最新的GPRMI数据 if (GPS_GetGPRMI(&stGPRMI) == HIDO_OK) { // 数据有效,可以使用 printf("GPRMI数据:\r\n"); printf(" UTC时间: %u (hhmmss.ss*100)\r\n", stGPRMI.m_u32UTCTime); printf(" 周数: %u\r\n", stGPRMI.m_u16WeekNumber); printf(" 周内秒: %u ms\r\n", stGPRMI.m_u32TimeOfWeek); printf(" 纬度: %.8f°\r\n", stGPRMI.m_dLatitude); printf(" 经度: %.8f°\r\n", stGPRMI.m_dLongitude); printf(" 高程: %.3f m\r\n", stGPRMI.m_fAltitude); printf(" 东向速度: %.3f m/s\r\n", stGPRMI.m_fEastVelocity); printf(" 北向速度: %.3f m/s\r\n", stGPRMI.m_fNorthVelocity); printf(" 天顶速度: %.3f m/s\r\n", stGPRMI.m_fUpVelocity); printf(" 定位质量: %u (0=无效,1=单点,2=差分,4=固定,5=浮点)\r\n", stGPRMI.m_u8PositionQuality); printf(" 可见卫星数: %u\r\n", stGPRMI.m_u8SatelliteCount); printf(" 基线距离: %.3f m\r\n", stGPRMI.m_fBaselineDistance); } else { printf("GPRMI数据无效或未接收\r\n"); } } /******************************************************************************* * Function Name : Example_ReadGPIMU * Description : 读取GPIMU数据示例 * Input : None * Output : None * Return : None *******************************************************************************/ void Example_ReadGPIMU(void) { ST_GPIMU stGPIMU; // 获取最新的GPIMU数据 if (GPS_GetGPIMU(&stGPIMU) == HIDO_OK) { // 数据有效,可以使用 printf("GPIMU数据:\r\n"); printf(" UTC时间: %u (hhmmss.sss)\r\n", stGPIMU.m_u32UTCTime); printf(" X轴加速度: %.3f g\r\n", stGPIMU.m_fAccelX); printf(" Y轴加速度: %.3f g\r\n", stGPIMU.m_fAccelY); printf(" Z轴加速度: %.3f g\r\n", stGPIMU.m_fAccelZ); printf(" X轴角速度: %.3f °/s\r\n", stGPIMU.m_fGyroX); printf(" Y轴角速度: %.3f °/s\r\n", stGPIMU.m_fGyroY); printf(" Z轴角速度: %.3f °/s\r\n", stGPIMU.m_fGyroZ); printf(" 传感器温度: %.2f ℃\r\n", stGPIMU.m_fTemperature); printf(" 校验和: 0x%02X\r\n", stGPIMU.m_u8Checksum); } else { printf("GPIMU数据无效或未接收\r\n"); } } /******************************************************************************* * Function Name : Example_PeriodicRead * Description : 定期读取GPS数据的示例(在应用层任务中调用) * Input : None * Output : None * Return : None *******************************************************************************/ void Example_PeriodicRead(void) { static HIDO_UINT32 lastReadTick = 0; HIDO_UINT32 currentTick = HIDO_TimerGetTick(); // 每1000ms读取一次 if ((currentTick - lastReadTick) >= 1000) { lastReadTick = currentTick; ST_GPRMI stGPRMI; ST_GPIMU stGPIMU; // 读取定位数据 if (GPS_GetGPRMI(&stGPRMI) == HIDO_OK) { // 处理定位数据 // 例如:更新地图位置、计算速度等 if (stGPRMI.m_u8PositionQuality >= 4) // 固定解或浮点解 { // 高精度定位可用 // 可以进行精确导航 } } // 读取IMU数据 if (GPS_GetGPIMU(&stGPIMU) == HIDO_OK) { // 处理IMU数据 // 例如:姿态估计、运动检测等 // 计算总加速度 float totalAccel = sqrt( stGPIMU.m_fAccelX * stGPIMU.m_fAccelX + stGPIMU.m_fAccelY * stGPIMU.m_fAccelY + stGPIMU.m_fAccelZ * stGPIMU.m_fAccelZ ); // 检测设备是否在运动 if (totalAccel > 1.1f || totalAccel < 0.9f) // 不在静止状态 { // 设备正在运动 } } } } /******************************************************************************* * 数据格式说明 ******************************************************************************* * * (1) GPRMI - GPS/INS组合定位数据 * 格式: $GPRMI,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>,<15>,<16>,<17>,<18>,<19>,<20>,<21>,<22>,<23>*<校验和> * * 字段说明: * <1> UTC时间, 格式为 hhmmss.ss * <2> Week number, 周数 * <3> Time of week, 周内秒, 格式为 ss.mmm * <4> 纬度(°), 正数为北纬 * <5> 经度(°), 正数为西经 * <6> 高程(m) * <7> 纬度标准差(m) * <8> 经度标准差(m) * <9> 高程标准差(m) * <10> 东方向上的速度(m/s) * <11> 北方向上的速度(m/s) * <12> 天顶方向的速度(m/s) * <13> 水平速度标准差(m/s) * <14> 俯仰角(°) * <15> 侧倾角(°) * <16> 翻滚角(°) * <17> 俯仰角标准差(°) * <18> 侧倾角标准差(°) * <19> 翻滚角标准差(°) * <20> 基线距离(m) * <21> 天线可见卫星数量 * <22> 载波整周固定模糊值个数 * <23> 定位质量指示: 0=无效, 1=单点, 2=差分, 4=固定, 5=浮点, 6=惯导 * * * (2) GPIMU - IMU传感器数据 * 格式: $GPIMU,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>* * * 字段说明: * <1> UTC时间, 格式为 hhmmss.sss * <2> x轴加速度(g) * <3> y轴加速度(g) * <4> z轴加速度(g) * <5> 陀螺x轴角速度(°/s) * <6> 陀螺y轴角速度(°/s) * <7> 陀螺z轴角速度(°/s) * <8> 传感器温度(℃) * <9> 异或校验和 * * 示例数据: * $GPIMU, 054752.002, 0.000, 0.007, -1.032, -0.003, 0.053, -0.016,26.00@59 * *******************************************************************************/