#ifndef _INTERFACE_CAN_H_ #define _INTERFACE_CAN_H_ #include "regs_base.h" #include "irq_num.h" #include #define CAN_INDEX_0 FLEXCAN7 #define CAN_INDEX_1 FLEXCAN21 #define CAN_INDEX_2 FLEXCAN16 #define CAN_INDEX_3 FLEXCAN3 #define CAN_INDEX_4 FLEXCAN23 #define CAN_INDEX_5 FLEXCAN5 #define CAN_INDEX_6 FLEXCAN6 #define CAN_INDEX_7 FLEXCAN4 #define TX_MB_INDEX (USED_MB_FOR_FIFO) #define LEFT_FRONT_MOTOR_INPUT1 0x101 #define LEFT_FRONT_MOTOR_INPUT2 0x103//温度 #define LEFT_REAR_MOTOR2_INPUT1 0x102 #define LEFT_REAR_MOTOR2_INPUT2 0x104//温度 #define RIGHT_FRONT_MOTOR_INPUT1 0x101 #define RIGHT_FRONT_MOTOR_INPUT2 0x103//温度 #define RIGHT_REAR_MOTOR_INPUT1 0x102 #define RIGHT_REAR_MOTOR_INPUT2 0x104//温度 #define LEFT_FRONT_MOTOR_OUTPUT1 0x201 #define LEFT_FRONT_MOTOR_OUTPUT2 0x401 #define LEFT_REAR_MOTOR_OUTPUT1 0x202 #define LEFT_REAR_MOTOR_OUTPUT2 0x402 #define RIGHT_FRONT_MOTOR_OUTPUT1 0x201 #define RIGHT_FRONT_MOTOR_OUTPUT2 0x401 #define RIGHT_REAR_MOTOR_OUTPUT1 0x202 #define RIGHT_REAR_MOTOR_OUTPUT2 0x402 //#define MOTOR_INPUT_ID_1 0x15000003//采集模块 //#define MOTOR_INPUT_ID_2 0x10F92708//右前 //#define MOTOR_INPUT_ID_3 0x15000003//采集模块 //#define MOTOR_INPUT_ID_4 0x10F94708//右后 // // #define MOTOR_INPUT_ID_5 0x10F81708//左前 档位 #define MOTOR_INPUT_ID_6 0x10F82708//右前 #define MOTOR_INPUT_ID_7 0x10F83708//左后 #define MOTOR_INPUT_ID_8 0x10F84708//右后 #define BMS_INPUT_ID1 0x100 #define BMS_INPUT_ID2 0x101 #define REMOTE_ID 0x12000023 #define TEMP_MODULE_INPUT_ID_1 0x15000003 #define CAN_FIFO_SIZE 8 //#define TEMP_MODULE_INPUT_ID_2 0x302 // 故障信息 typedef struct _StrCanFault { uint8_t navigator_count; //导航仪计数器 uint8_t motor1_count; //手动数据计数器 uint8_t motor2_count; //手动数据计数器 uint8_t motor3_count; //手动数据计数器 uint8_t motor4_count; //手动数据计数器 uint8_t bms_count; //bms计数器 uint8_t temperature_count; //温度计数器 uint8_t remote_count; //遥控计数器 uint8_t navigator_state; //导航数据状态 uint8_t motor1_state; //电机1数据状态 uint8_t motor2_state; //电机2数据状态 uint8_t motor3_state; //电机1数据状态 uint8_t motor4_state; //电机2数据状态 uint8_t bms_state; //bms状态 uint8_t temperature_state; //温度计数器 uint8_t remote_state; //遥控状态 } StrCanFault; typedef union _UnCanFault { StrCanFault bit_data; // 使用定义的结构体变量名 uint8_t arr[sizeof(StrCanFault)]; // 通过结构体类型确定大小 } UnCanFault; // can缓存节点 typedef struct _StrCanBuffer { uint32_t id; //**< CAN Frame Identifier. */ uint8_t dataBuffer[8]; //数据缓存 unsigned int length : 7; //**< CAN frame payload length in bytes(Range: 0~8). */ unsigned int type : 1; //**< CAN Frame Type(DATA or REMOTE). */ unsigned int format : 1; //**< CAN Frame Identifier(STD or EXT format). */ }StrCanBuffer; typedef struct Fifo_Queue_Tag { StrCanBuffer Data[CAN_FIFO_SIZE];//缓存 uint8_t front;//头指针 uint8_t rear;//尾指针 }StrCanFifoQueue; #define ON 1 #define OFF 0 #define left_motor_fan(Value) un_inf_can_kgf_output1.bit_data.KGF01 = Value;//电机控制器风扇左 #define right_motor_fan(Value) un_inf_can_kgf_output1.bit_data.KGF03 = Value;//电机控制器风扇右 #define pre_charge_relay(Value) un_inf_can_kgf_output1.bit_data.KGF04 = Value;//预充 #define high_voltage_relay(Value) un_inf_can_kgf_output1.bit_data.KGF07 = Value;un_inf_can_kgf_output1.bit_data.KGF08 = Value//高压继电器 #define low_voltage_relay(Value) un_inf_can_kgf_output1.bit_data.KGF11 = Value;un_inf_can_kgf_output1.bit_data.KGF12 = Value//低压继电器 #define yellow_light(Value) un_inf_can_kgf_output1.bit_data.KGF06 = Value;//黄灯 #define red_light(Value) un_inf_can_kgf_output1.bit_data.KGF09 = Value;//红灯 #define left_vehicle_fan(Value) un_inf_can_kgf_output1.bit_data.KGF14 = Value;//车左风扇 #define right_vehicle_fan(Value) un_inf_can_kgf_output2.bit_data.KGF03 = Value;//车右风扇 #define computer(Value) un_inf_can_kgf_output2.bit_data.KGF01 = Value;un_inf_can_kgf_output2.bit_data.KGF02 = Value//自主计算机 #define network_switch(Value) un_inf_can_kgf_output2.bit_data.KGF05 = Value;un_inf_can_kgf_output2.bit_data.KGF06 = Value//网络交换机含路由器 //H桥 #define brake_motor_forward un_h_bridge_output.bit_data.channel_01 = ON ;un_h_bridge_output.bit_data.channel_04 = ON ;un_h_bridge_output.bit_data.channel_02 = OFF;un_h_bridge_output.bit_data.channel_03 = OFF;un_h_bridge_output.bit_data.sleep_01 = ON ;un_h_bridge_output.bit_data.sleep_02 = ON//正转 #define brake_motor_reversal un_h_bridge_output.bit_data.channel_01 = OFF;un_h_bridge_output.bit_data.channel_04 = OFF;un_h_bridge_output.bit_data.channel_02 = ON ;un_h_bridge_output.bit_data.channel_03 = ON ;un_h_bridge_output.bit_data.sleep_01 = ON ;un_h_bridge_output.bit_data.sleep_02 = ON//反转 #define brake_motor_off un_h_bridge_output.bit_data.channel_01 = OFF;un_h_bridge_output.bit_data.channel_04 = OFF;un_h_bridge_output.bit_data.channel_02 = OFF;un_h_bridge_output.bit_data.channel_03 = OFF;un_h_bridge_output.bit_data.sleep_01 = OFF;un_h_bridge_output.bit_data.sleep_02 = OFF//关闭 //外部函数 void flexcan_transfer_callback(flexcan_handle_t *handle,flexcan_status_e status, uint32_t result,void *userData); uint8_t flexcan_config_rx_fifo(flexcan_handle_t *handle,flexcan_rx_fifo_config_t *config); uint8_t CAN_Send_Msg( flexcan_handle_t *handle, uint32_t ID, flexcan_frame_format_e ide, flexcan_frame_type_e rtr, uint8_t *msg, uint8_t len, uint8_t tx_index); void flexcan_Busoff_Recovery(void); void initialization_All_Flexcan(void); //外部变量 extern flexcan_handle_t g_flexcan_handle; extern bool busoff_occur_flag;//标志量 extern bool WDTReFresh_flag;//更新标志 extern flexcan_handle_t g_flexcan_handle; extern uint16_t FrameHeader;//帧头 extern flexcan_handle_t can_handle_0;//can初始化结构体 extern flexcan_handle_t can_handle_1; extern flexcan_handle_t can_handle_2; extern flexcan_handle_t can_handle_3; extern flexcan_handle_t can_handle_4; extern flexcan_handle_t can_handle_5; extern flexcan_handle_t can_handle_6; extern flexcan_handle_t can_handle_7; extern UnCanFault can_fault_info; extern uint32_t time_elapsed; extern uint32_t time_elapsed1; //外部函数 void canInterfaceInit(void); #endif /* INTERFACE_CAN_H */