- 新增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驱动头文件包含
58 lines
2.8 KiB
C
58 lines
2.8 KiB
C
#ifndef DATA_PACKET_H
|
||
#define DATA_PACKET_H
|
||
|
||
#include <stdint.h>
|
||
|
||
#define PACKET_START_BYTE 0xFFFFFFFF
|
||
#define PACKET_END_BYTE 0x0000
|
||
|
||
// 数据包结构(精简版 - 有包头无校验和,含GPS)
|
||
typedef struct __attribute__((packed)) {
|
||
uint32_t start_byte; // 包头 (4字节) = 0xFFFFFFFF
|
||
uint32_t timestamp; // 系统时间戳 (4字节)
|
||
int32_t adc_data1; // ADC1 数据 (4字节)
|
||
int32_t adc_data2; // ADC2 数据 (4字节)
|
||
int32_t adc_data3; // ADC3 数据 (4字节)
|
||
uint32_t gps_time; // GPS时间戳 (4字节) HHMMSS格式
|
||
float gps_latitude; // GPS纬度 (4字节)
|
||
float gps_longitude; // GPS经度 (4字节)
|
||
} DataPacket_t;
|
||
|
||
// 校正后数据包结构(精简版 - 有包头无校验和,含GPS)
|
||
typedef struct __attribute__((packed)) {
|
||
uint32_t start_byte; // 包头 (4字节) = 0xFFFFFFFF
|
||
uint32_t timestamp; // 系统时间戳 (4字节)
|
||
float corrected_x; // 校正后X轴数据 (4字节)
|
||
float corrected_y; // 校正后Y轴数据 (4字节)
|
||
float corrected_z; // 校正后Z轴数据 (4字节)
|
||
uint32_t gps_time; // GPS时间戳 (4字节) HHMMSS格式
|
||
float gps_latitude; // GPS纬度 (4字节)
|
||
float gps_longitude; // GPS经度 (4字节)
|
||
} CorrectedDataPacket_t;
|
||
|
||
// 带GPS信息的校正数据包结构(精简版 - 有包头无校验和)
|
||
typedef struct __attribute__((packed)) {
|
||
uint32_t start_byte; // 包头 (4字节) = 0xFFFFFFFF
|
||
uint32_t timestamp; // 系统时间戳 (4字节)
|
||
float corrected_x; // 校正后X轴数据 (4字节)
|
||
float corrected_y; // 校正后Y轴数据 (4字节)
|
||
float corrected_z; // 校正后Z轴数据 (4字节)
|
||
uint32_t gps_time; // GPS时间戳 (4字节) HHMMSS格式
|
||
float gps_latitude; // GPS纬度 (4字节)
|
||
float gps_longitude; // GPS经度 (4字节)
|
||
} CorrectedDataPacketWithGPS_t;
|
||
|
||
// 函数声明
|
||
uint16_t Calculate_CRC16(const uint8_t *data, uint16_t len);
|
||
void PackData(DataPacket_t *packet, int32_t adc1, int32_t adc2, int32_t adc3,
|
||
uint32_t gps_time, float latitude, float longitude);
|
||
void PackCorrectedData(CorrectedDataPacket_t *packet, float x, float y, float z,
|
||
uint32_t gps_time, float latitude, float longitude);
|
||
void PackCorrectedDataWithGPS(CorrectedDataPacketWithGPS_t *packet, float x, float y, float z,
|
||
uint32_t gps_time, float latitude, float longitude);
|
||
uint8_t ValidatePacket(const DataPacket_t *packet);
|
||
uint8_t ValidateCorrectedPacket(const CorrectedDataPacket_t *packet);
|
||
uint8_t ValidateCorrectedPacketWithGPS(const CorrectedDataPacketWithGPS_t *packet);
|
||
|
||
#endif // DATA_PACKET_H
|