✨ feat(gps): 新增GPS海拔数据支持并优化系统配置
- 在数据包结构中新增gps_altitude字段以支持海拔数据存储 - 更新PackData和PackCorrectedData系列函数,增加altitude参数 - 移除timestamp字段以精简数据包结构,提高传输效率 - 优化GPS数据处理逻辑,取消GPS有效性检查,直接使用原始GPS数据 - 将调试输出和监控保存间隔统一调整为30秒,降低系统负载 - 将数据存储文件最大大小从20MB提升至100MB,支持更长时间数据采集 - 将GPS数据超时时间从2秒延长至10秒,提高在弱信号环境下的稳定性 🔧 chore(spi): 调整SPI配置以优化通信稳定性 - 将所有SPI接口的时钟相位从SPI_PHASE_1EDGE调整为SPI_PHASE_2EDGE - 将SPI1的波特率预分频器从4调整为8,降低通信速率以提高稳定性 - 更新STM32CubeMX配置文件(.ioc)以反映SPI配置变更 📝 docs(script): 新增高性能数据分析工具脚本 - 创建atem_parse.py脚本,提供数据解析和可视化功能 - 支持V1/V2数据格式解析,V2版本包含GPS经纬度和海拔数据 - 实现串口实时数据接收和GPS动态模拟输出功能 - 提供波形图、轨迹图和海拔曲线等多标签可视化界面 - 包含数据表格展示和CSV导出功能,支持高性能大数据处理
This commit is contained in:
+19
-11
@@ -50,8 +50,8 @@
|
||||
/* USER CODE BEGIN PD */
|
||||
// 监控功能宏开关(统一控制串口输出和文件存储)
|
||||
#define ENABLE_SYSTEM_MONITOR 1 // 系统监控开关
|
||||
#define DEBUG_OUTPUT_INTERVAL_MS 1000 // 调试输出间隔(毫秒)
|
||||
#define MONITOR_SAVE_INTERVAL_MS 10000 // 监控状态保存间隔(毫秒) - 10秒
|
||||
#define DEBUG_OUTPUT_INTERVAL_MS 30000 // 调试输出间隔(毫秒)
|
||||
#define MONITOR_SAVE_INTERVAL_MS 30000 // 监控状态保存间隔(毫秒) - 30秒
|
||||
|
||||
// 数据输出模式选择(运行时配置,从SD卡加载)
|
||||
// 注意:DATA_OUTPUT_MODE_UART 和 DATA_OUTPUT_MODE_STORAGE 已改为运行时配置
|
||||
@@ -185,8 +185,12 @@ static void ProcessAdcData(void)
|
||||
&correction_result, &g_correction_params) == HAL_OK) {
|
||||
|
||||
// 4a. 打包校正后的数据(带GPS关键信息:仅经纬度)
|
||||
float lat = gps_valid ? (float)current_gps_data.position.latitude : 0.0f;
|
||||
float lon = gps_valid ? (float)current_gps_data.position.longitude : 0.0f;
|
||||
// float lat = gps_valid ? (float)current_gps_data.position.latitude : 0.0f;
|
||||
// float lon = gps_valid ? (float)current_gps_data.position.longitude : 0.0f;
|
||||
// float alt = gps_valid ? (float)current_gps_data.position.altitude : 0.0f;
|
||||
float lat = (float)current_gps_data.position.latitude;
|
||||
float lon = (float)current_gps_data.position.longitude;
|
||||
float alt = (float)current_gps_data.position.altitude;
|
||||
uint32_t gps_time = gps_valid ? (current_gps_data.time.hour * 10000 +
|
||||
current_gps_data.time.minute * 100 +
|
||||
current_gps_data.time.second) : 0;
|
||||
@@ -197,7 +201,8 @@ static void ProcessAdcData(void)
|
||||
correction_result.corrected_z,
|
||||
gps_time,
|
||||
lat,
|
||||
lon);
|
||||
lon,
|
||||
alt);
|
||||
|
||||
correction_applied = 1;
|
||||
|
||||
@@ -209,13 +214,17 @@ static void ProcessAdcData(void)
|
||||
} else {
|
||||
|
||||
// 4b. 校正失败或未启用,使用原始数据
|
||||
float lat = gps_valid ? (float)current_gps_data.position.latitude : 0.0f;
|
||||
float lon = gps_valid ? (float)current_gps_data.position.longitude : 0.0f;
|
||||
// float lat = gps_valid ? (float)current_gps_data.position.latitude : 0.0f;
|
||||
// float lon = gps_valid ? (float)current_gps_data.position.longitude : 0.0f;
|
||||
// float alt = gps_valid ? (float)current_gps_data.position.altitude : 0.0f;
|
||||
float lat = (float)current_gps_data.position.latitude;
|
||||
float lon = (float)current_gps_data.position.longitude;
|
||||
float alt = (float)current_gps_data.position.altitude;
|
||||
uint32_t gps_time = gps_valid ? (current_gps_data.time.hour * 10000 +
|
||||
current_gps_data.time.minute * 100 +
|
||||
current_gps_data.time.second) : 0;
|
||||
|
||||
PackData(&g_data_packet, raw_adc[0], raw_adc[1], raw_adc[2], gps_time, lat, lon);
|
||||
PackData(&g_data_packet, raw_adc[0], raw_adc[1], raw_adc[2], gps_time, lat, lon, alt);
|
||||
|
||||
// 发送原始数据包到串口(运行时配置)
|
||||
if (Config_IsUartOutputEnabled()) {
|
||||
@@ -698,10 +707,9 @@ void SystemClock_Config(void)
|
||||
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
|
||||
{
|
||||
static uint32_t cnt = 0;
|
||||
if(LTC2508_IsInited() == 0) return;
|
||||
|
||||
if(LTC2508_IsInited() == 0) return;
|
||||
cnt ++;
|
||||
// if(cnt % 5 == 0)
|
||||
// if(cnt % 2 == 0)
|
||||
{
|
||||
// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);
|
||||
if (GPIO_Pin == ADC_DRY_Pin) {
|
||||
|
||||
+4
-4
@@ -48,9 +48,9 @@ void MX_SPI1_Init(void)
|
||||
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
|
||||
hspi1.Init.DataSize = SPI_DATASIZE_16BIT;
|
||||
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
|
||||
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||||
hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
|
||||
hspi1.Init.NSS = SPI_NSS_SOFT;
|
||||
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
|
||||
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
|
||||
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||||
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
|
||||
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
||||
@@ -80,7 +80,7 @@ void MX_SPI2_Init(void)
|
||||
hspi2.Init.Direction = SPI_DIRECTION_2LINES_RXONLY;
|
||||
hspi2.Init.DataSize = SPI_DATASIZE_16BIT;
|
||||
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
|
||||
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||||
hspi2.Init.CLKPhase = SPI_PHASE_2EDGE;
|
||||
hspi2.Init.NSS = SPI_NSS_SOFT;
|
||||
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||||
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
|
||||
@@ -111,7 +111,7 @@ void MX_SPI3_Init(void)
|
||||
hspi3.Init.Direction = SPI_DIRECTION_2LINES_RXONLY;
|
||||
hspi3.Init.DataSize = SPI_DATASIZE_16BIT;
|
||||
hspi3.Init.CLKPolarity = SPI_POLARITY_LOW;
|
||||
hspi3.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||||
hspi3.Init.CLKPhase = SPI_PHASE_2EDGE;
|
||||
hspi3.Init.NSS = SPI_NSS_SOFT;
|
||||
hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||||
hspi3.Init.TIMode = SPI_TIMODE_DISABLE;
|
||||
|
||||
Reference in New Issue
Block a user