#ifndef __CAN_APP_H #define __CAN_APP_H #include "common.h" extern u16 CAN_AppUpdata_time; void Can1_CommunicationInit(void); void Can1_CommunicationTask(void); //qiuadd typedef struct { uint8_t motorMcu1ProgState : 1; // Startbit=0, Length=1: 电机MCU1程序状态 uint8_t motorMcu2ProgState : 1; // Startbit=1, Length=1: 电机MCU2程序状态 uint8_t motorAssistMode : 2; // Startbit=2, Length=2: 电机的助力模式(0:无助力 1:踩踏助力 2:转把助力 ) uint8_t motorState : 4; // Startbit=4, Length=4: 电机状态(Min=0, Max=15) uint8_t motorMaxFaultLevel : 2; // Startbit=8, Length=2: 电机最高故障等级(Min=0, Max=3) uint8_t pedalAssistRatio : 8; // Startbit=10, Length=8: 踩踏助力比例(Unit=%,Min=0, Max=255 → 0~255%) uint8_t motorAssistRatio : 8; // Startbit=18, Length=8: 踩踏助力比例(同上面表格可能重复,按实际调整) // 若表格是“踩踏助力比例”重复,这里需确认;假设是新字段: uint16_t systemAssistTorque : 14; // Startbit=26, Length=14: 系统助力扭矩(Unit=NM,Min=0, Max=1638.3 → 0~16383/10) int16_t motorBusVoltage : 12; // Startbit=40, Length=12: 电机母线电压(Unit=V,Factor=0.1 → 实际值=raw*0.1,Min=-200, Max=200)// 有符号,因 Min=-200 int16_t motorBusCurrent : 12; // Startbit=52, Length=12: 电机母线电流(Unit=A,Factor=0.1 → 实际值=raw*0.1) }MCUCanSend01; typedef union { MCUCanSend01 Part01; } MCUCanUnion01; typedef struct { uint8_t mosUpperShortFault : 1; // 0:MOS 上管击穿故障 uint8_t mosLowerShortFault : 1; // 1:MOS 下管击穿故障 uint8_t hardwareOverCurrent : 1; // 2:硬件过流故障 uint8_t opAmpFault : 1; // 3:运放故障 uint8_t hallFault : 1; // 4:霍尔故障 uint8_t motorPhaseLoss : 1; // 5:电机缺相故障 uint8_t opAmpSeriousFault : 1; // 6:运放严重故障 uint8_t brakeFault : 1; // 7:刹车故障 uint8_t motorEncoderCommFault : 1; // 8:电机编码器通信故障 uint8_t motorEncoderLearnFault : 1; // 9:电机编码器强拉学习故障 uint8_t throttleFault : 1; // 10:转把故障 uint8_t hallAngleBigFault : 1; // 11:霍尔角度偏大故障 uint8_t powerDownFault : 1; // 12:掉电故障 uint8_t seriousUnderVoltage : 1; // 13:严重欠压故障 uint8_t headLightFault : 1; // 14:大灯故障 uint8_t turnSignalLightFault : 1; // 15:转向灯故障 uint8_t chipLowVoltage : 1; // 16:芯片低压故障 uint8_t clockSlowFault : 1; // 17:时钟频率慢故障 uint8_t clockFastFault : 1; // 18:时钟频率快故障 uint8_t clockAbnormalFault : 1; // 19:时钟异常故障 uint8_t stackAbnormalFault : 1; // 20:堆栈异常故障 uint8_t ramAbnormalFault : 1; // 21:RAM 异常故障 uint8_t flashAbnormal : 1; // 22: Flash 异常故障 uint8_t watchdogReset : 1; // 23: 看门狗复位故障 uint8_t cpuAbnormal : 1; // 24: CPU 异常故障 uint8_t driverSelfCheck : 1; // 25: 驱动 IC 使能口回检故障 uint8_t tailLampFault : 1; // 26: 尾灯故障 uint8_t ntcShort : 1; // 27: NTC 短路故障 uint8_t ntcOpen : 1; // 28: NTC 断路故障 uint8_t crankAngleComTimeOut : 1; // 29: 曲柄角度编码通信超时异常故障 uint8_t crankAngleFieldErr : 1; // 30: 曲柄角度编码磁场强度异常故障 uint8_t motorAngleComOverTimeOut : 1; // 31: 电机角度编码通信超时异常故障 uint8_t motorAngleFieldErr : 1; // 32: 电机角度编码磁场强度异常故障 uint8_t torqueComTimeOut : 1; // 33: 扭矩传感器通信超时故障 uint8_t torqueRangeErr : 1; // 34: 扭矩传感器超范围故障 uint8_t torqueDataErr : 1; // 35: 扭矩传感器数据有效性故障 uint8_t torqueDataNoChange : 1; // 36: 扭矩传感器数据不变故障 uint8_t torqueInitErr : 1; // 37: 扭矩传感器初始化故障 uint8_t wheelSpeedFault : 1; // 38: 轮速传感器故障 uint8_t CenElecCrolSpiHardErr : 1; // 39: 中控与电控 SPI 硬件故障 uint8_t CenElecCtrlSpiOverTimeOut : 1; // 40: 中控与电控 SPI 通信超时故障 uint8_t CenElecCtrlSpiCrcErr : 1; // 41: 中控与电控 SPI CRC 故障 uint8_t threePhaseZeroErr : 1; // 42: 三相零点故障 uint8_t busCurrentZeroErr : 1; // 43: 母线电流零点故障 uint8_t driverFault : 1; // 44: 驱动 IC 故障 uint8_t softwareOverCurrent : 1; // 45: 软件过流故障 uint8_t busUnderVolt : 1; // 46: 母线欠压故障 uint8_t busOverVolt : 1; // 47: 母线过压故障 uint8_t ElecCtrlLightOverTemp : 1; // 48: 电控一般过温故障 uint8_t ElecCtrlSeriousOverTemp : 1; // 49: 电控严重过温故障 uint8_t motorStallFault : 1; // 50: 电机堵转故障 uint8_t eepromFault : 1; // 51: EEPROM 故障 uint8_t dialKeyShort : 1; // 52: 指拨按键短路故障 uint8_t threePhaseUnbalance : 1; // 53: 三相不平衡故障 uint8_t batteryComTimeOut : 1; // 54: 电池通信超时故障 uint8_t batteryCrcErr : 1; // 55: 电池通信 CRC 故障 uint8_t reserved : 2; // 56: 预留 uint8_t dialComTimeOut : 1; // 58: 指拨通信超时故障 } MCUCanSend02; typedef union { MCUCanSend02 Part02; } MCUCanUnion02; typedef struct { uint8_t motorGeneralOverload : 1; // 0: 电机一般过载故障 uint8_t motorSeriousOverload : 1; // 1: 电机严重过载故障 uint8_t batteryPlugGeneral : 1; // 2: 电池接插件电流一般过载故障 uint8_t batteryPlugSerious : 1; // 3: 电池接插件电流严重过载故障 uint8_t crankAngleValidErr : 1; // 4: 曲柄角度编码数据有效性故障 uint8_t crankSpeedOverRange : 1; // 5: 曲柄速度超范围故障 uint8_t motorAngleValidErr : 1; // 6: 电机角度编码数据有效性故障 uint8_t currentSensorErr : 1; // 7: 电流传感器故障 uint8_t power5VGood : 1; // 8: 5VPowerGood uint8_t power12VGood : 1; // 9: 12VPowerGood uint32_t warnCode : 16; // 32~47: 警告码(示例行 10 对应值 4194303) uint32_t faultCode : 16; // 48~63: 故障码(示例行 32、48 对应值 65535) } MCUCanSend03; typedef union { MCUCanSend03 Part03; } MCUCanUnion03; typedef struct { uint16_t pedalSpeed;//踏频转速 uint16_t motorSpeed;//电机转速 uint16_t wheelSpeed;//轮速 uint16_t vehicleSpeed;//瞬时车速 } MCUCanSend04; typedef union { MCUCanSend04 Part04; } MCUCanUnion04; typedef struct { uint16_t averageSpeed;//平均车速 uint16_t maxSpeed;//最大车速 uint16_t wheelDiameter;//周长 } MCUCanSend05; typedef union { MCUCanSend05 Part05; } MCUCanUnion05; typedef struct { uint8_t gear1Ratio;//1档比例 uint8_t gear2Ratio;//2档比例 uint8_t gear3Ratio;//3档比例 uint8_t gear4Ratio;//4档比例 uint8_t gear5Ratio;//5档比例 uint8_t gear6Ratio;//6档比例 uint16_t reserved;//预留 } MCUCanSend06; typedef union { MCUCanSend06 Part06; } MCUCanUnion06; typedef struct { uint16_t gear1RemainMile;//1档比例剩余里程 uint16_t gear2RemainMile;//2档比例剩余里程 uint16_t gear3RemainMile;//3档比例剩余里程 uint16_t gear4RemainMile;//4档比例剩余里程 uint16_t gear5RemainMile;//5档比例剩余里程 uint16_t gear6RemainMile;//6档比例剩余里程 uint16_t reserved;//预留 } MCUCanSend07; typedef union { MCUCanSend07 Part07; } MCUCanUnion07; typedef struct { uint32_t pedalTurnAll;//踩踏总圈数 uint32_t wheelTurnAll;//轮圈总群数 } MCUCanSend08; typedef union { MCUCanSend08 Part08; } MCUCanUnion08; typedef struct { uint32_t ridingSingleTime;//骑行单词时间 uint32_t ridingAllTime;//骑行总时间 } MCUCanSend09; typedef union { MCUCanSend09 Part09; } MCUCanUnion09; typedef struct { uint32_t ridingSingleMile;//骑行单词里程 uint32_t ridingAllMile;//骑行总里程 } MCUCanSend0A; typedef union { MCUCanSend0A Part0A; } MCUCanUnion0A; typedef struct { uint16_t pedalTorqueFilter;//踏板滤波扭矩 uint16_t motorTorque;//电机输出扭矩 uint16_t torqueZeroFst;//扭矩零点1 uint16_t torqueZeroSed;//扭矩零点2 } MCUCanSend0B; typedef union { MCUCanSend0B Part0B; } MCUCanUnion0B; typedef struct { uint8_t blindingFlag;//仪表连接成功标志 uint8_t authenticationFlag;//鉴权成功标志 uint32_t bootTime;//开机次数 uint16_t duNTC;//三合一NTC } MCUCanSend0C; typedef union { MCUCanSend0C Part0C; } MCUCanUnion0C; typedef struct { uint8_t gearMaxLevel;//档位配置最大扭矩 uint8_t gearAuxiliaryLevel;//档位配置辅助等级 uint8_t gearRoadCondition;//档位路况识别灵敏度 uint8_t gearStartupSensitivity;//档位配置启动响应 } MCUCanSend0D; typedef union { MCUCanSend0D Part0D; } MCUCanUnion0D; typedef struct { uint16_t motorTemperature;//电机温度 uint16_t mcuTemperature;//控制器温度 uint16_t rotorAngleZero;//转子零位角度 uint16_t rotorAngle;//转子实时角度 } MCUCanSend0E; typedef union { MCUCanSend0E Part0E; } MCUCanUnion0E; typedef struct { uint16_t leftPedalAD;//左踏板原始AD值 uint16_t rightPedalAD;//右踏板原始AD值 uint16_t torqueSeorTemperature1;//扭矩传感器温度数据1 uint16_t torqueSeorTemperature2;//扭矩传感器温度数据2 } MCUCanSend0F; typedef union { MCUCanSend0F Part0F; } MCUCanUnion0F; typedef struct { uint16_t pedalAngle;//曲柄角度 uint16_t motorMaxTorque;//电机最大允许扭矩 uint16_t faultLimit;//故障允许输出 uint16_t gearRatio;//齿轮变速比 } MCUCanSend10; typedef union { MCUCanSend10 Part10; } MCUCanUnion10; typedef struct { uint32_t sysClock;//系统运行时钟 } MCUCanSend11; typedef union { MCUCanSend11 Part11; } MCUCanUnion11; typedef struct { uint16_t gear1Range :12;//档位1自学习剩余续航里程 uint16_t gear2Range :12;//档位2自学习剩余续航里程 uint16_t gear3Range :12;//档位3自学习剩余续航里程 uint16_t gear4Range :12;//档位4自学习剩余续航里程 uint16_t gear5Range :12;//Autio自学习剩余续航里程 } MCUCanSend13; typedef union { MCUCanSend13 Part13; } MCUCanUnion13; typedef struct { uint8_t funcCode;//功能码 uint16_t regsAddr;//寄存器地址 uint8_t regsNum;//返回数据个数 uint16_t regs1Data;//数据1 uint16_t regs2Data;//数据2 } MCUCanSend4F; typedef union { MCUCanSend4F Part4F; } MCUCanUnion4F; typedef struct { uint8_t idle :2; //是否空闲 0:工作 1:空闲 uint32_t heartbeatCnt :32;//心跳 uint32_t reserved :28;//保留 } MCUCanSend25; typedef union { MCUCanSend25 Part25; } MCUCanUnion25; typedef struct { uint8_t resetAck :8; //恢复出厂设置应答 } MCUCanSend2A; typedef union { MCUCanSend2A Part2A; } MCUCanUnion2A; typedef struct { uint32_t singleCalorie :32; //单次卡路里 uint32_t totalCalorie :32; //总卡路里 } MCUCanSend15; typedef union { MCUCanSend15 Part15; } MCUCanUnion15; typedef struct { uint8_t bikeCode[4]; //车型编码 uint16_t perimeter; //轮胎周长 uint16_t diskTorque; //牙盘扭矩 } MCUCanSend16; typedef union { MCUCanSend16 Part16; } MCUCanUnion16; typedef struct { uint16_t crankRealTimeTorque; //曲柄实时力矩 uint16_t loopAverTorque; //圈平均力矩 uint16_t realTimeSpeed; //实时速度 uint8_t crankRealTimeAngle; //曲柄实时角度 uint8_t pedalSpeed; //踏频 } MCUCanSend17; typedef union { MCUCanSend17 Part17; } MCUCanUnion17; typedef struct { uint16_t pulseRechgCurr :16; //回馈电流 uint8_t shifterGear :8; //后变速器档位 uint8_t throttle :2; //是否存在转把 uint16_t throttleVolt :14; //是否存在转把 uint8_t halfSlopeStartSens :4; //半坡起步灵敏度 uint8_t sensorMode :2; //助力模式状态 } MCUCanSend18; typedef union { MCUCanSend18 Part18; } MCUCanUnion18; typedef struct { uint8_t autoYorN :1; //是否支持auto模式 uint8_t holdYorN :1; //是否支持hold模式 uint8_t rearGearShiftYorN :1; //是否支持后变速档位 uint8_t sellAreaYorN :1; //是否支持销售区域配置 uint8_t halfSlopeStart :1; //是否支持半坡起步功能 uint8_t boostYorN :1; //是否支持Boost模式 uint8_t sensorMode :1; //是否支持助理传感器模式切换 uint8_t cruiseControl :1; //是否支持定速巡航功能 } MCUCanSend19; typedef union { MCUCanSend19 Part19; } MCUCanUnion19; typedef struct { uint16_t areaSitua :16; //销售地区状态 } MCUCanSend1A; typedef union { MCUCanSend1A Part1A; } MCUCanUnion1A; typedef struct { uint8_t boostAllow :1; //当前是否允许进入Boost模式,会动态变化 uint16_t boostLeftTime :11; //当前boost模式的剩余时间,单位:秒,给以后动态显示倒记时用。 uint16_t boostNextAllowTime :12; //距离下次允许Boost的时间 uint8_t cruiseControlFlag :1; //是否处于定速巡航状态 uint8_t cruiseControlOutCase :4; //定速巡航退出原因 uint16_t cruiseControlSpeed :16; //定速巡航速度 } MCUCanSend1B; typedef union { MCUCanSend1B Part1B; } MCUCanUnion1B; typedef struct { uint16_t handLearnRemainMile :12; //转把自学习剩余续航里程 } MCUCanSend1C; typedef union { MCUCanSend1C Part1C; } MCUCanUnion1C; typedef struct { uint16_t motor_torque_red :16; //电机输出经减速器后的扭矩 uint16_t motor_speed_red :16; //电机输出经减速器后的转速 uint32_t reserved :32; //踏频AB脉冲 } MCUCanSend1D; typedef union { MCUCanSend1D Part1D; } MCUCanUnion1D; typedef struct { uint8_t number :8; uint8_t gear :8; uint8_t total_gears :8; } MCUCanSendS40; //s2a_shifter_status typedef union { MCUCanSendS40 PartS40; } MCUCanUnionS40; typedef struct { uint8_t pedal_pulse_param :8; //踏板转一圈时的脉冲个数(属于配置项,随硬件变化,A+B相单边沿触发方式) uint8_t wheel_pulse_param :8; //轮子转一圈时的脉冲个数(属于配置项,随硬件变化,A+B相单边沿触发方式) uint8_t wheel_pulse_delta :8; //踏板脉冲数达到一圈时的轮子脉冲数增量(比如踏板单圈36个脉冲,当踏板脉冲数达到36个时记录当前轮子脉冲个数,然后计算上一次踏板脉冲达到36个时记录的轮子脉冲个数的差值,并上报此帧) } MCUCanSend6B; //新增时间帧:踏频满一圈后触发 typedef union { MCUCanSend6B Part6B; } MCUCanUnion6B; typedef struct { MCUCanUnion01 CanUnion01; MCUCanUnion02 CanUnion02; MCUCanUnion03 CanUnion03; MCUCanUnion04 CanUnion04; MCUCanUnion05 CanUnion05; MCUCanUnion06 CanUnion06; MCUCanUnion07 CanUnion07; MCUCanUnion08 CanUnion08; MCUCanUnion09 CanUnion09; MCUCanUnion0A CanUnion0A; MCUCanUnion0B CanUnion0B; MCUCanUnion0C CanUnion0C; MCUCanUnion0D CanUnion0D; MCUCanUnion0E CanUnion0E; MCUCanUnion0F CanUnion0F; MCUCanUnion10 CanUnion10; MCUCanUnion11 CanUnion11; MCUCanUnion13 CanUnion13; MCUCanUnion4F CanUnion4F; MCUCanUnion25 CanUnion25; MCUCanUnion2A CanUnion2A; MCUCanUnion15 CanUnion15; MCUCanUnion16 CanUnion16; MCUCanUnion17 CanUnion17; MCUCanUnion18 CanUnion18; MCUCanUnion19 CanUnion19; MCUCanUnion1A CanUnion1A; MCUCanUnion1B CanUnion1B; MCUCanUnion1C CanUnion1C; MCUCanUnion1D CanUnion1D; MCUCanUnionS40 CanUnionS40; MCUCanUnion6B CanUnion6B; } MCUCanSend_DataDef; /*********以下为MCU多包内容********/ typedef struct { u32 vehicle_name[128]; u32 tire_specification[128]; u32 battery_voltage; u32 motor_power; u32 battery_capacity; u32 vehiclemodel_code; u16 tire_circumference; u8 support_password; u16 sales_territory; } MULECUtoMCU_ConfigInfo_DataDef; typedef struct { uint16_t part_code_char1 : 16; // Startbit=0, Length=16: 部件编码第1个字符 uint16_t part_code_char2 : 16; // Startbit=16, Length=16: 部件编码第2个字符 uint16_t part_code_char3 : 16; // Startbit=32, Length=16: 部件编码第3个字符 uint16_t software_version : 16; // Startbit=48, Length=16: 软件版本 uint16_t protocol_version : 16; // Startbit=64, Length=16: 协议版本 uint16_t timestampL : 16; uint16_t timestampH : 16; // uint32_t timestamp : 32; // Startbit=80, Length=32: 时间戳 uint8_t assembly_code[14]; // Startbit=112, Length=112: 三合一总成编码 112/8=14 }MULMCUCanSend01; typedef union { MULMCUCanSend01 Part01; } MULMCUCanUnion01; // 定义 mcu_fault_snapshot 结构体 typedef struct { uint16_t software_version; // 软件版本号 (16位) uint16_t device_address; // 设备地址 (16位) uint8_t packets_per_block; // 每块数据包数 (8位) uint8_t block_position; // 块位置 (8位) uint8_t packet_count; // 数据包数 (8位) uint8_t packet_size; // 数据包大小 (8位) uint16_t total_fault_count; // 保存的故障总次数 (16位) uint8_t reserved[6]; // 预留 (48位 = 6字节) uint16_t bus_voltage; // 母线电压 (16位) uint16_t bus_current; // 母线电流 (16位) uint16_t bus_current_zero; // 母线电流零点 (16位) uint16_t phase_a_current; // A相电流 (16位) uint16_t phase_b_current; // B相电流 (16位) uint16_t phase_c_current; // C相电流 (16位) uint16_t phase_a_current_zero;// A相电流零点 (16位) uint16_t phase_b_current_zero;// B相电流零点 (16位) uint16_t phase_c_current_zero;// C相电流零点 (16位) uint16_t ntc_temperature; // 电控板NTC温度 (16位) uint16_t ad_reserved; // AD口预留 (16位) uint16_t vq_command; // Vq给定值 (16位) uint16_t vq_feedback; // Vq反馈值 (16位) uint16_t iq_command; // Iq给定值 (16位) uint16_t iq_feedback; // Iq反馈值 (16位) uint16_t id_command; // Id给定值 (16位) uint16_t id_feedback; // Id反馈值 (16位) uint16_t vd_feedback; // Vd反馈值 (16位) uint16_t motor_speed; // 电机转速 (16位) uint16_t max_phase_current; // 上电出现过的最大相电流 (16位) uint16_t fault_code1; // 电控故障码1 (16位) uint16_t fault_code2; // 电控故障码2 (16位) uint16_t fault_code3; // 电控故障码3 (16位) uint16_t fault_code4; // 电控故障码4 (16位) uint16_t fault_code5; // 电控故障码5 (16位) uint16_t system_time; // 系统时间 (16位) uint16_t torque_data1; // 扭矩数据1 (16位) uint16_t torque_data2; // 扭矩数据2 (16位) uint16_t crankshaft_speed; // 曲柄转速 (16位) uint16_t vehicle_speed; // 车速 (16位) - 注意:单位是0.1 km/h } MULMCUCanSend02;; typedef union { MULMCUCanSend02 Part02; } MULMCUCanUnion02; // 定义 Riding_gear1_cfg 结构体 typedef struct { // 完整范围配置 uint8_t full_range_assist_level_min; // 完整范围-辅助等级最小值 (8位) uint8_t full_range_assist_level_max; // 完整范围-辅助等级最大值 (8位) uint8_t full_range_max_torque_min; // 完整范围-最大扭矩最小值 (8位) uint8_t full_range_max_torque_max; // 完整范围-最大扭矩最大值 (8位) uint8_t full_range_start_response_min; // 完整范围-启动响应最小值 (8位) uint8_t full_range_start_response_max; // 完整范围-启动响应最大值 (8位) // 档位控制 uint8_t gear_count; // 档位数量 (8位) uint8_t current_gear_setting; // 设置/读取档位 (8位) // 档位1 详细配置 uint8_t gear1_assist_level_min; // 档位1-辅助等级可配置范围最小值 (8位) uint8_t gear1_assist_level_max; // 档位1-辅助等级可配置范围最大值 (8位) uint8_t gear1_assist_level_step; // 档位1-辅助等级配置步长 (8位) uint8_t gear1_assist_level_default; // 档位1-辅助等级默认值 (8位) uint8_t gear1_assist_level_current; // 档位1-辅助等级当前值 (8位) uint8_t gear1_max_torque_min; // 档位1-最大扭矩可配置范围最小值 (8位) uint8_t gear1_max_torque_max; // 档位1-最大扭矩可配置范围最大值 (8位) uint8_t gear1_max_torque_step; // 档位1-最大扭矩配置步长 (8位) uint8_t gear1_max_torque_default; // 档位1-最大扭矩默认值 (8位) uint8_t gear1_max_torque_current; // 档位1-最大扭矩当前值 (8位) uint8_t gear1_start_response_min; // 档位1-启动响应可配置范围最小值 (8位) uint8_t gear1_start_response_max; // 档位1-启动响应可配置范围最大值 (8位) uint8_t gear1_start_response_step; // 档位1-启动响应配置步长 (8位) uint8_t gear1_start_response_default; // 档位1-启动响应默认值 (8位) uint8_t gear1_start_response_current; // 档位1-启动响应当前值 (8位) } MULMCUCanSend03; typedef union { MULMCUCanSend03 Part03; } MULMCUCanUnion03; // 定义 Riding_gear2_cfg 结构体 typedef struct { // 完整范围配置 uint8_t full_range_assist_level_min; // 完整范围-辅助等级最小值 (8位) uint8_t full_range_assist_level_max; // 完整范围-辅助等级最大值 (8位) uint8_t full_range_max_torque_min; // 完整范围-最大扭矩最小值 (8位) uint8_t full_range_max_torque_max; // 完整范围-最大扭矩最大值 (8位) uint8_t full_range_start_response_min; // 完整范围-启动响应最小值 (8位) uint8_t full_range_start_response_max; // 完整范围-启动响应最大值 (8位) // 档位控制 uint8_t gear_count; // 档位数量 (8位) uint8_t current_gear_setting; // 设置/读取档位 (8位) // 档位2 详细配置 uint8_t gear2_assist_level_min; // 档位2-辅助等级可配置范围最小值 (8位) uint8_t gear2_assist_level_max; // 档位2-辅助等级可配置范围最大值 (8位) uint8_t gear2_assist_level_step; // 档位2-辅助等级配置步长 (8位) uint8_t gear2_assist_level_default; // 档位2-辅助等级默认值 (8位) uint8_t gear2_assist_level_current; // 档位2-辅助等级当前值 (8位) uint8_t gear2_max_torque_min; // 档位2-最大扭矩可配置范围最小值 (8位) uint8_t gear2_max_torque_max; // 档位2-最大扭矩可配置范围最大值 (8位) uint8_t gear2_max_torque_step; // 档位2-最大扭矩配置步长 (8位) uint8_t gear2_max_torque_default; // 档位2-最大扭矩默认值 (8位) uint8_t gear2_max_torque_current; // 档位2-最大扭矩当前值 (8位) uint8_t gear2_start_response_min; // 档位2-启动响应可配置范围最小值 (8位) uint8_t gear2_start_response_max; // 档位2-启动响应可配置范围最大值 (8位) uint8_t gear2_start_response_step; // 档位2-启动响应配置步长 (8位) uint8_t gear2_start_response_default; // 档位2-启动响应默认值 (8位) uint8_t gear2_start_response_current; // 档位2-启动响应当前值 (8位) } MULMCUCanSend04; typedef union { MULMCUCanSend04 Part04; } MULMCUCanUnion04; // 定义 Riding_gear3_cfg 结构体 typedef struct { // 完整范围配置 uint8_t full_range_assist_level_min; // 完整范围-辅助等级最小值 (8位) uint8_t full_range_assist_level_max; // 完整范围-辅助等级最大值 (8位) uint8_t full_range_max_torque_min; // 完整范围-最大扭矩最小值 (8位) uint8_t full_range_max_torque_max; // 完整范围-最大扭矩最大值 (8位) uint8_t full_range_start_response_min; // 完整范围-启动响应最小值 (8位) uint8_t full_range_start_response_max; // 完整范围-启动响应最大值 (8位) // 档位控制 uint8_t gear_count; // 档位数量 (8位) uint8_t current_gear_setting; // 设置/读取档位 (8位) // 档位3 详细配置 uint8_t gear3_assist_level_min; // 档位3-辅助等级可配置范围最小值 (8位) uint8_t gear3_assist_level_max; // 档位3-辅助等级可配置范围最大值 (8位) uint8_t gear3_assist_level_step; // 档位3-辅助等级配置步长 (8位) uint8_t gear3_assist_level_default; // 档位3-辅助等级默认值 (8位) uint8_t gear3_assist_level_current; // 档位3-辅助等级当前值 (8位) uint8_t gear3_max_torque_min; // 档位3-最大扭矩可配置范围最小值 (8位) uint8_t gear3_max_torque_max; // 档位3-最大扭矩可配置范围最大值 (8位) uint8_t gear3_max_torque_step; // 档位3-最大扭矩配置步长 (8位) uint8_t gear3_max_torque_default; // 档位3-最大扭矩默认值 (8位) uint8_t gear3_max_torque_current; // 档位3-最大扭矩当前值 (8位) uint8_t gear3_start_response_min; // 档位3-启动响应可配置范围最小值 (8位) uint8_t gear3_start_response_max; // 档位3-启动响应可配置范围最大值 (8位) uint8_t gear3_start_response_step; // 档位3-启动响应配置步长 (8位) uint8_t gear3_start_response_default; // 档位3-启动响应默认值 (8位) uint8_t gear3_start_response_current; // 档位3-启动响应当前值 (8位) } MULMCUCanSend05; typedef union { MULMCUCanSend05 Part05; } MULMCUCanUnion05; // 定义 Riding_gear4_cfg 结构体 typedef struct { // 完整范围配置 uint8_t full_range_assist_level_min; // 完整范围-辅助等级最小值 (8位) uint8_t full_range_assist_level_max; // 完整范围-辅助等级最大值 (8位) uint8_t full_range_max_torque_min; // 完整范围-最大扭矩最小值 (8位) uint8_t full_range_max_torque_max; // 完整范围-最大扭矩最大值 (8位) uint8_t full_range_start_response_min; // 完整范围-启动响应最小值 (8位) uint8_t full_range_start_response_max; // 完整范围-启动响应最大值 (8位) // 档位控制 uint8_t gear_count; // 档位数量 (8位) uint8_t current_gear_setting; // 设置/读取档位 (8位) // 档位4 详细配置 uint8_t gear4_assist_level_min; // 档位4-辅助等级可配置范围最小值 (8位) uint8_t gear4_assist_level_max; // 档位4-辅助等级可配置范围最大值 (8位) uint8_t gear4_assist_level_step; // 档位4-辅助等级配置步长 (8位) uint8_t gear4_assist_level_default; // 档位4-辅助等级默认值 (8位) uint8_t gear4_assist_level_current; // 档位4-辅助等级当前值 (8位) uint8_t gear4_max_torque_min; // 档位4-最大扭矩可配置范围最小值 (8位) uint8_t gear4_max_torque_max; // 档位4-最大扭矩可配置范围最大值 (8位) uint8_t gear4_max_torque_step; // 档位4-最大扭矩配置步长 (8位) uint8_t gear4_max_torque_default; // 档位4-最大扭矩默认值 (8位) uint8_t gear4_max_torque_current; // 档位4-最大扭矩当前值 (8位) uint8_t gear4_start_response_min; // 档位4-启动响应可配置范围最小值 (8位) uint8_t gear4_start_response_max; // 档位4-启动响应可配置范围最大值 (8位) uint8_t gear4_start_response_step; // 档位4-启动响应配置步长 (8位) uint8_t gear4_start_response_default; // 档位4-启动响应默认值 (8位) uint8_t gear4_start_response_current; // 档位4-启动响应当前值 (8位) } MULMCUCanSend06; typedef union { MULMCUCanSend06 Part06; } MULMCUCanUnion06; // 定义 apack_sn 结构体 typedef struct { uint8_t sn_length; // 嘉宏SN码长度,不包含结束符 (8位) char JHEK0005_SN[33]; // char sn_part_material[13]; //物料编码 // char sn_separator_1[1]; //分隔符1 // char sn_part_reserve[2]; //预留 // char sn_part_prod_date[8]; //生产年月日 // char sn_separator_2[1]; //分隔符2 // char sn_part_batch[2]; //生产批次 // char sn_part_seq[6]; //六位编码 char padding[30]; // 补0字段:30字节(使总长度=64) } MULMCUCanSend07; typedef union { MULMCUCanSend07 Part07; } MULMCUCanUnion07; // 定义 frame_info 结构体 typedef struct { uint8_t frame_code[16]; // 车架码,字符串形式 (128位 = 16字节) } MULMCUCanSend08; typedef union { MULMCUCanSend08 Part08; } MULMCUCanUnion08; typedef struct { MULMCUCanUnion01 CanUnion01; MULMCUCanUnion02 CanUnion02; MULMCUCanUnion03 CanUnion03; MULMCUCanUnion04 CanUnion04; MULMCUCanUnion05 CanUnion05; MULMCUCanUnion06 CanUnion06; MULMCUCanUnion07 CanUnion07; MULMCUCanUnion08 CanUnion08; } MulPcksMCUCanSend_DataDef; extern MCUCanSend_DataDef MCUCanSend; extern MulPcksMCUCanSend_DataDef MULMCUCanSend; extern MULECUtoMCU_ConfigInfo_DataDef mulecutomcu; extern MULMCUCanSend01 mcu_prj_info; extern MULMCUCanSend02 mcu_fault_snapshot; extern MULMCUCanSend03 riding_gear1_cfg; extern MULMCUCanSend04 riding_gear2_cfg; extern MULMCUCanSend05 riding_gear3_cfg; extern MULMCUCanSend06 riding_gear4_cfg; extern MULMCUCanSend07 apack_sn; extern MULMCUCanSend08 frame_info; typedef struct { uint8_t vehicle_name[16]; // 车辆名称(16字节字符串) uint8_t tire_spec[16]; // 轮胎规格(16字节字符串) uint8_t battery_voltage[8]; // 电池电压(8字节无符号64位整数) uint8_t motor_power[8]; // 电机功率(8字节无符号64位整数) uint8_t battery_capacity[10]; // 电池容量(10字节数组) uint8_t model_code[10]; // 车型编码(10字节数组) uint16_t tire_circumference; // 轮胎周长(2字节无符号16位整数) uint8_t support_password; // 是否支持密码(1字节无符号8位整数) uint16_t sales_area; // 销售区域(2字节无符号16位整数) } MULMCUCanReceive61; extern MULMCUCanReceive61 config_info; typedef struct { uint8_t vin[16]; // 车辆名称(16字节字符串) } MULMCUCanReceive62; extern MULMCUCanReceive62 frame_info_rx; #endif