yincheng.zhong
2025-11-23 212ccb49d3e7c7fa138c5f9d335d0b8c5a08d2a3
STM32H743/FML/PythonLink.h
@@ -23,9 +23,9 @@
#define PYTHONLINK_FRAME_FOOTER1        0x0D    // 帧尾1 (CR)
#define PYTHONLINK_FRAME_FOOTER2        0x0A    // 帧尾2 (LF)
// 数据类型定义
#define PYTHONLINK_TYPE_GPS             0x01    // GPS数据包 (10Hz)
#define PYTHONLINK_TYPE_IMU             0x02    // IMU数据包 (100Hz)
// 数据类型定义 (保留以兼容旧版)
#define PYTHONLINK_TYPE_GPS             0x01    // GPS数据包 (已停用)
#define PYTHONLINK_TYPE_IMU             0x02    // IMU数据包 (已停用)
#define PYTHONLINK_TYPE_CONTROL         0x10    // 控制命令包 (Python->STM32)
// 缓冲区大小
@@ -35,6 +35,12 @@
// 调试选项: 置1则发送固定内容以排查乱码
#define PYTHONLINK_FORCE_FIXED_PAYLOAD  0
// ASCII 输出关键字
#define PYTHONLINK_ASCII_KEY_CTRL       "CTRL"
#define PYTHONLINK_ASCII_KEY_POSE       "POSE"
#define PYTHONLINK_ASCII_KEY_STACK      "STACK"
#define PYTHONLINK_ASCII_KEY_STATE      "STATE"
/*******************************************************************************
 *                             Type Definition                                 *
 *******************************************************************************/
@@ -107,6 +113,12 @@
    HIDO_UINT16 m_u16ThrottlePWM;        // 油门PWM值 (1000~2000us)
} ST_PythonLink_Control;
typedef struct __attribute__((packed))
{
    HIDO_FLOAT m_fForwardMps;
    HIDO_FLOAT m_fTurnRate;
} ST_PythonLink_ControlFeedback;
/*******************************************************************************
 *                             Global Function                                 *
 *******************************************************************************/
@@ -157,6 +169,40 @@
HIDO_INT32 PythonLink_SendIMUData(const ST_GPIMU *_pstGPIMU);
/**
 * @brief ASCII 输出:控制量/频率/阶段
 */
HIDO_VOID PythonLink_ReportControl(HIDO_FLOAT _forward_mps,
                                   HIDO_FLOAT _turn_rate,
                                   HIDO_FLOAT _freq_hz,
                                   HIDO_UINT16 _steering_pwm,
                                   HIDO_UINT16 _throttle_pwm,
                                   const HIDO_CHAR *_pcStage,
                                   HIDO_UINT32 _timestamp_ms);
/**
 * @brief ASCII 输出:姿态/位置/目标点
 */
HIDO_VOID PythonLink_ReportPose(const HIDO_FLOAT _enu[3],
                                HIDO_FLOAT _heading_deg,
                                HIDO_FLOAT _pitch_deg,
                                HIDO_FLOAT _roll_deg,
                                const HIDO_FLOAT _target_xy[2],
                                HIDO_UINT32 _timestamp_ms);
/**
 * @brief ASCII 输出:算法状态(阶段+误差)
 */
HIDO_VOID PythonLink_ReportState(const HIDO_CHAR *_pcStage,
                                 HIDO_FLOAT _xte_m,
                                 HIDO_FLOAT _heading_err_deg,
                                 HIDO_UINT32 _timestamp_ms);
/**
 * @brief ASCII 输出:堆栈/堆监测
 */
HIDO_VOID PythonLink_ReportStack(const HIDO_CHAR *_pcTaskName,
                                 HIDO_UINT32 _u32StackHighWaterWords,
                                 HIDO_UINT32 _u32HeapFreeBytes,
                                 HIDO_UINT32 _u32HeapMinBytes);
/**
 * @brief 获取发送统计信息
 * @param _pu32GPSCount: GPS数据包发送计数
 * @param _pu32IMUCount: IMU数据包发送计数