#ifndef _CAN_H #define _CAN_H #include #ifdef __cplusplus extern "C" { #endif #include "adc.h" #include "gd32c10x_can.h" #include "stdint.h" #include u8 can_gpio_init(void); void can_config(void); void canfd_config(void); void can_loopback_init(void); void can_loopback_test(void); // 定义一个联合体类型用于float和byte数组之间的转换 typedef union { float f; u8 b[4]; } float_union_t; /*! \brief CAN通信类 \note 封装CAN发送和接收功能 */ class CAN_transmiter { private: u8 controller_Mode; float_union_t limit_velocity_union; u16 limit_voltage; short mcu_temp; short motor_temp; u16 Power_Voltage; float_union_t rt_angle_union; float_union_t rt_velocity_union; u8 Status_code; float_union_t target_angle_union; u8 Target_Control_Mode; float_union_t target_velocity_union; float_union_t u_current_union; float_union_t w_current_union; float_union_t v_current_union; u8 transmit_mailbox; // 初始化为无mailbox状态 u32 timeout; // 默认超时为0xFFFF u8 transmit_data[64]; // CANFD最大64字节 can_trasnmit_message_struct transmit_message; can_receive_message_struct receive_message; can_fdframe_struct can_fd_parameter; can_fd_tdc_struct can_fd_tdc_parameter; public: // 添加构造函数声明 CAN_transmiter(); u8 CAN_Send(u32 ID, u8 length, u8 *data); u8 CANFD_Send(u32 ID, u8 length, u8 *data); void update(); u8 CAN_all_Send(); u8 CANFD_all_Send(); u8 CAN_Receive(); u8 CANFD_Receive(); }; #ifdef __cplusplus } #endif #endif