Files
Frame-rate-optimization/App/app_math_info.h
2026-04-09 10:14:20 +08:00

122 lines
4.0 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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