yincheng.zhong
2 天以前 567085ead3f6adaabd884f16ab4b17c62e8f0403
STM32H743/APL/app.c
@@ -16,7 +16,15 @@
#include "SBUS.h"
#include "pwm_ctrol.h"
#include "PythonLink.h"
#include "motion_mode.h"
#include "motion_control_task.h"
#include "motion_calibration_task.h"
#include "MQTTClient.h"
#include "HIDO_Json.h"
#include "PathStorage.h"
#include "PathTest.h"
#include "HTTPClient.h"
osSemaphoreId_t g_semaphoreHandle = NULL;
TaskHandle_t g_app_task_handle = NULL;
@@ -39,15 +47,35 @@
    }
void app_task(void *pvParameters)
{
    HIDO_JsonInit();
    Shell_Init();
    GPS_Init();
    Internet_Init();
    UDPClient_Init();
    TCPClient_Init();
    MQTTClient_Init();
   BT_Init();
    SBUS_Init();
    PythonLink_Init();
    HTTPClient_Init();
    FileDownload_Init();
    // PathStorage_Init();  // 注释掉PathStorage,避免占用HTTPClient
    OTATest_Init();  // OTA升级测试(替换PathTest_Init)
#if (MOTION_ACTIVE_MODE == MOTION_MODE_CONTROL)
    MotionControl_TaskInit();
#elif (MOTION_ACTIVE_MODE == MOTION_MODE_CALIBRATION)
    MotionCalibration_TaskInit();
#else
#error "Unsupported MOTION_ACTIVE_MODE"
#endif
    /* ENU调试打印(非校准模式) */
    static HIDO_UINT32 debug_print_counter = 0;
    const HIDO_UINT32 DEBUG_PRINT_INTERVAL = 100; /* 每100次循环打印一次 (约500ms) */
    /* GPS GGA上传定时器 */
    static HIDO_UINT32 gps_upload_counter = 0;
    const HIDO_UINT32 GPS_UPLOAD_INTERVAL = 200; /* 每200次循环上传一次 (约1000ms) */
    while (1)
    {
        //HIDO_UINT32 timeout = HIDO_TimerGetNearestTimeout(1000);
@@ -63,6 +91,39 @@
        HIDO_ATLitePoll();
        Internet_Poll();
        GPS_Poll();
        HTTPClient_Poll();
        MQTTClient_Poll();
        OTATest_Poll();  // OTA升级测试(替换PathTest_Poll)
        /* 定时上传GGA报文到4G(每秒一次) */
        if (++gps_upload_counter >= GPS_UPLOAD_INTERVAL)
        {
            gps_upload_counter = 0;
            GPS_UploadGGA();
        }
        /* 周期性打印ENU坐标和IMU数据(用于调试GPS解析) */
#if (MOTION_ACTIVE_MODE != MOTION_MODE_CALIBRATION)
        if (++debug_print_counter >= DEBUG_PRINT_INTERVAL)
        {
            debug_print_counter = 0;
            ST_GPRMI gprmi;
            ST_GPIMU gpimu;
            float enu[3];
            if (GPS_GetGPRMI(&gprmi) == HIDO_OK &&
                GPS_GetGPIMU(&gpimu) == HIDO_OK &&
                GPS_GetCurrentENU(enu) == HIDO_OK)
            {
                HIDO_Debug2("$DEBUG,ENU,%.2f,%.2f,%.2f,HDG,%.2f,ACC,%.3f,%.3f,%.3f,GYRO,%.3f,%.3f,%.3f\r\n",
                            enu[0], enu[1], enu[2],  /* ENU坐标 (m) */
                            gprmi.m_fHeadingAngle,    /* 航向角 (度) */
                            gpimu.m_fAccelX, gpimu.m_fAccelY, gpimu.m_fAccelZ, /* 加速度 (m/s²) */
                            gpimu.m_fGyroX, gpimu.m_fGyroY, gpimu.m_fGyroZ);   /* 角速度 (rad/s) */
            }
        }
#endif
        UDPClient_Poll();
        TCPClient_Poll();
        IdleTask();
@@ -99,6 +160,7 @@
    parameter_init();
     
    {
        g_com_map[VERSION] = (1<<8)|(1);
        uint16_t dev_id = g_com_map[DEV_ID];
        uint16_t udp_port = g_com_map[UDP_PORT];
        uint16_t tcp_port = g_com_map[TCP_PORT];
@@ -110,14 +172,25 @@
        uint16_t tip1 = g_com_map[TCP_IP_1];
        uint16_t tip2 = g_com_map[TCP_IP_2];
        uint16_t tip3 = g_com_map[TCP_IP_3];
        g_com_map[MQTT_IP_0] = 39;
        g_com_map[MQTT_IP_1] = 99;
        g_com_map[MQTT_IP_2] = 43;
        g_com_map[MQTT_IP_3] = 227;
        g_com_map[MQTT_PORT] = 1883;
        uint16_t mip0 = g_com_map[MQTT_IP_0];
        uint16_t mip1 = g_com_map[MQTT_IP_1];
        uint16_t mip2 = g_com_map[MQTT_IP_2];
        uint16_t mip3 = g_com_map[MQTT_IP_3];
        uint16_t mqtt_port = g_com_map[MQTT_PORT];
         
        uint16_t version = g_com_map[VERSION];
        HIDO_Debug2("[BOOT] Version: %u\r\n", version);
        HIDO_Debug2("[BOOT] DeviceID: %u\r\n", dev_id);
        HIDO_Debug2("[BOOT] UDP Server: %u.%u.%u.%u:%u\r\n", ip0, ip1, ip2, ip3, udp_port);
        HIDO_Debug2("[BOOT] TCP Server: %u.%u.%u.%u:%u\r\n", tip0, tip1, tip2, tip3, tcp_port);
        HIDO_Debug("[BOOT] Version: %u\r\n", version);
        HIDO_Debug("[BOOT] DeviceID: %u\r\n", dev_id);
        HIDO_Debug("[BOOT] UDP Server: %u.%u.%u.%u:%u\r\n", ip0, ip1, ip2, ip3, udp_port);
        HIDO_Debug("[BOOT] TCP Server: %u.%u.%u.%u:%u\r\n", tip0, tip1, tip2, tip3, tcp_port);
        HIDO_Debug("[BOOT] MQTT Server: %u.%u.%u.%u:%u\r\n", mip0, mip1, mip2, mip3, mqtt_port);
    }
    osSemaphoreAttr_t semaphore_attr = {
        .name = "MySemaphore",