#ifndef __APP_MATH_INFO_H #define __APP_MATH_INFO_H #include "at32a423.h" #include "at32a423_clock.h" #include "systick.h" #include "sysconfig.h" #include "main.h" #include "bsp_flash.h" #include "bsp_uart.h" #include "string.h" #include "stdint.h" #include "mx_frame_core.h" #include "mx_serial.h" #include "cali_process.h" #include "resi_math_lib.h" #define CALI_POINT_NUM 3 #define SINGLE_MATH_CALI_PARAMS_PARAMS_SECTOR_SIZE 1 // flash大小 #define ARRAY_RESI_INIT_PARAMS_LEN 6 //单片机返回给上位机的数据信息 // 显示相关默认值 #define DEFAULT_MIN_DISPLAY_VALUE 0 // 默认最小显示值 #define DEFAULT_MAX_DISPLAY_VALUE 255 // 默认最大显示值 #define MAX_ADC_VALUE 4095 // ADC最大采样值(12位ADC) // 电阻初始化默认值 #define DEFAULT_MIN_RESI_INIT_VALUE 2100 // 默认最小电阻初始值 #define DEFAULT_MAX_RESI_INIT_VALUE 25000 // 默认最大电阻初始值 #define DEFAULT_DIVID_RESI_VALUE 2700 // 默认电阻分压值 #define MAX_BUF_SIZE (CALI_POINT_NUM * AX_NUM * AY_NUM) #define ARRAY_RESI_INIT_PARAMS_ADDRS 0x0800B800 // 帧头标识(用于串口数据帧同步) #define HEAD 0xA55A // 传输类型和命令定义(用于区分不同功能的串口帧) #define ARRAY_RESI_INIT_TRAN_TYPE 0x04 // 电阻阵列初始化传输类型 #define ARRAY_RESI_VALUE_RETURN_CMD 0x2F // 电阻值返回命令 #define INIT_RESI_WRITE_CMD 0x3F // 初始化电阻写入命令 #define INIT_RESI_SAVE_CMD 0x3D // 初始化电阻保存命令 #define INIT_RESI_CLEAR_CMD 0x1A // 初始化电阻清除命令 #define SINGLE_RESI_CALI_TRAN_TYPE 0x03 // 单个电阻校准传输类型 #define SINGLE_CALI_RESI_WRITE_CMD 0x3F // 单个校准电阻写入命令 #define SINGLE_CALI_RESI_SAVE_CMD 0x3D // 单个校准电阻保存命令 #define CALI_RESI_VALUE_RETURN_CMD 0x2F // 校准电阻值返回命令 #define SINGLE_CALI_RESI_CLEAR_CMD 0x1A // 单个校准电阻清除命令 extern uint8_t array_resi_init_params_read_buf[MAX_BUF_SIZE]; extern uint8_t array_resi_init_params_write_buf[MAX_BUF_SIZE]; extern uint8_t array_resi_cali_params_write_buf[MAX_BUF_SIZE]; extern uint8_t array_resi_cali_params_read_buf[MAX_BUF_SIZE]; extern uint8_t success_protocal[ARRAY_RESI_INIT_PARAMS_LEN]; extern uint8_t fail_protocal[ARRAY_RESI_INIT_PARAMS_LEN]; //extern uint8_t success_protocal[ARRAY_RESI_INIT_PARAMS_LEN]; //extern uint8_t fail_protocal[ARRAY_RESI_INIT_PARAMS_LEN]; extern uint8_t frame_state;//电阻阵列指令帧状态 extern uint8_t cali_frame_state;//单个电阻校准指令帧状态 // 电阻阵列初始化模式枚举(用于标识初始化状态) typedef enum{ STATE = 0x73, // 状态模式(0x73是's'的ASCII码) DATA = 0x64, // 数据模式(0x64是'd'的ASCII码) }ARRAY_RESI_INIT_MODE_TYPE_T; // 电阻阵列校准模式枚举(用于标识校准状态) typedef enum{ CALI_SUCCESS = 0x01, // 校准成功 CALI_FAIL = 0x02, // 校准失败 CALI_INIT = 0x00, // 校准初始状态 CALI_RETURN = 0x4F, // 校准返回(0x4F是'O'的ASCII码) }ARRAY_RESI_CALI_MODE_TYPE_T; // 电阻阵列校准数据返回帧结构 typedef struct{ uint16_t sof; // 帧头 uint8_t tran_type; // 传输类型 uint16_t len; // 数据长度 uint8_t mode; // 校准模式 uint8_t cali_params[3 * AX_NUM * AY_NUM]; // 校准参数(3个点×X轴×Y轴) uint16_t checksum; // 校验和 }ARRAY_RESI_CALI_DATA_RETURN_SERIAL_FRAME_T; // 函数声明:设置电阻阵列初始化模式 void set_array_resi_init_mode_type(ARRAY_RESI_INIT_MODE_TYPE_T state); // 函数声明:获取电阻阵列初始化模式 ARRAY_RESI_INIT_MODE_TYPE_T get_resi_array_init_mode_type(void); // 函数声明:返回电阻阵列初始化信息 uint8_t return_array_resi_init_info(void *buf); void set_array_resi_cali_mode_type(ARRAY_RESI_CALI_MODE_TYPE_T state); ARRAY_RESI_CALI_MODE_TYPE_T get_resi_array_cali_mode_type(void); uint8_t array_resi_params_write(mx_frame_struct *buf); uint8_t array_resi_params_save(void *buf); uint8_t clear_array_init_info(void *buf); void math_resi_array_cali_write(void *buf); void math_resi_array_cali_save(void *buf); uint8_t cali_params_clear(void *buf); // ← 头文件是 void,源文件写成 uint8_t void cali_params_return(void *buf); #endif