STM_ATEM/User/gps_driver.h
zhoujie 5b245f89c1 feat(gps): 集成GPS模块支持数据采集系统
- 新增GPS驱动模块,支持NMEA GPGGA/GNGGA语句解析
- 修改USART3配置,波特率从2000000调整为115200用于GPS数据接收
- 新增带GPS信息的校正数据包结构`CorrectedDataPacketWithGPS_t`
- 在ADC数据处理流程中集成GPS数据获取和打包
- 更新数据包处理函数,支持GPS时间戳和经纬度信息
- 新增GPS驱动使用指南和集成说明文档
- 修改主循环,添加GPS数据处理调用
- 更新中断处理,添加GPS UART接收回调支持

📝 docs(gps): 添加GPS驱动和集成说明文档

- 新增`GPS_Driver_Guide.md`详细说明GPS驱动API和使用方法
- 新增`GPS_Integration_Guide.md`说明GPS数据集成到采集系统的实现细节
- 文档包含硬件连接、数据格式、使用示例和故障排除等内容

♻️ refactor(data): 重构数据包结构以支持GPS信息

- 修改`DataPacket_t`和`CorrectedDataPacket_t`结构,添加GPS时间戳和经纬度字段
- 新增`CorrectedDataPacketWithGPS_t`结构用于带完整GPS信息的数据包
- 更新数据打包函数,支持GPS参数传递
- 简化数据包验证逻辑,移除校验和检查以提高处理速度

🔧 chore(config): 更新硬件配置文件

- 更新STM32CubeMX项目文件,修改USART3波特率配置
- 在中断处理文件中添加GPS驱动头文件包含
2026-02-07 19:34:48 +08:00

151 lines
4.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
******************************************************************************
* @file gps_driver.h
* @brief GPS NMEA数据接收和解析驱动
* @author Your Name
* @date 2026-02-07
******************************************************************************
* @attention
*
* 本驱动用于通过USART3接收GPS模块的NMEA数据主要解析GPGGA语句
* 提取时间、经纬度等信息
*
******************************************************************************
*/
#ifndef __GPS_DRIVER_H
#define __GPS_DRIVER_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "usart.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
/* Exported types ------------------------------------------------------------*/
/**
* @brief GPS定位状态
*/
typedef enum {
GPS_FIX_INVALID = 0, // 无效定位
GPS_FIX_GPS = 1, // GPS定位
GPS_FIX_DGPS = 2, // 差分GPS定位
GPS_FIX_PPS = 3, // PPS定位
GPS_FIX_RTK = 4, // RTK固定解
GPS_FIX_RTK_FLOAT = 5, // RTK浮点解
GPS_FIX_ESTIMATED = 6, // 估算
GPS_FIX_MANUAL = 7, // 手动输入
GPS_FIX_SIMULATION = 8 // 模拟模式
} GPS_FixStatus_t;
/**
* @brief GPS时间结构体
*/
typedef struct {
uint8_t hour; // 时 (UTC)
uint8_t minute; // 分
uint8_t second; // 秒
uint16_t millisec; // 毫秒
} GPS_Time_t;
/**
* @brief GPS位置结构体
*/
typedef struct {
double latitude; // 纬度 (度)
char lat_direction; // 纬度方向 ('N' or 'S')
double longitude; // 经度 (度)
char lon_direction; // 经度方向 ('E' or 'W')
double altitude; // 海拔高度 (米)
GPS_FixStatus_t fix_status; // 定位状态
uint8_t satellites; // 使用的卫星数量
float hdop; // 水平精度因子
} GPS_Position_t;
/**
* @brief GPS数据结构体
*/
typedef struct {
GPS_Time_t time; // GPS时间
GPS_Position_t position; // GPS位置
uint8_t data_valid; // 数据有效标志 (1=有效, 0=无效)
uint32_t last_update_tick; // 最后更新时间戳
} GPS_Data_t;
/* Exported constants --------------------------------------------------------*/
#define GPS_UART_HANDLE huart3 // GPS使用的UART句柄
#define GPS_RX_BUFFER_SIZE 512 // 接收缓冲区大小
#define GPS_NMEA_MAX_LENGTH 128 // NMEA语句最大长度
#define GPS_DATA_TIMEOUT_MS 2000 // 数据超时时间(ms)
/* Exported macro ------------------------------------------------------------*/
/* Exported functions prototypes ---------------------------------------------*/
/**
* @brief 初始化GPS驱动
* @retval HAL状态
*/
HAL_StatusTypeDef GPS_Init(void);
/**
* @brief GPS数据接收处理在主循环中调用
* @retval None
*/
void GPS_Process(void);
/**
* @brief 获取GPS数据
* @param gps_data: 指向GPS数据结构体的指针
* @retval 1=数据有效, 0=数据无效或超时
*/
uint8_t GPS_GetData(GPS_Data_t *gps_data);
/**
* @brief 检查GPS数据是否有效
* @retval 1=有效, 0=无效
*/
uint8_t GPS_IsDataValid(void);
/**
* @brief 获取GPS时间字符串
* @param buffer: 输出缓冲区
* @param size: 缓冲区大小
* @retval None
*/
void GPS_GetTimeString(char *buffer, uint16_t size);
/**
* @brief 获取GPS位置字符串
* @param buffer: 输出缓冲区
* @param size: 缓冲区大小
* @retval None
*/
void GPS_GetPositionString(char *buffer, uint16_t size);
/**
* @brief UART接收完成回调函数在stm32f4xx_it.c中调用
* @param huart: UART句柄
* @retval None
*/
void GPS_UART_RxCpltCallback(UART_HandleTypeDef *huart);
/**
* @brief UART空闲中断回调函数在stm32f4xx_it.c中调用
* @param huart: UART句柄
* @retval None
*/
void GPS_UART_IdleCallback(UART_HandleTypeDef *huart);
#ifdef __cplusplus
}
#endif
#endif /* __GPS_DRIVER_H */