/*******************************************************************************
|
* File Name : GPS_Usage_Example.c
|
* Description : GPRMI和GPIMU数据解析使用示例
|
* Created on : 2025年11月11日
|
* Author : www.hido-studio.com
|
*******************************************************************************/
|
|
#include "GPS.h"
|
#include <stdio.h>
|
|
/*******************************************************************************
|
* 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>*<校验和><CR><LF>
|
*
|
* 字段说明:
|
* <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>*<CR><LF>
|
*
|
* 字段说明:
|
* <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
|
*
|
*******************************************************************************/
|