/*! \file can.h \brief CAN配置头文件 \version 2026-03-09, V1.4.0, firmware for GD32H7xx */ #ifndef CAN_H #define CAN_H #include #ifdef __cplusplus extern "C" { #endif #define CAN_RX_BUFFER_SIZE 32U typedef enum { E_CAN_0 = 0, E_CAN_1 = 1, E_CAN_2 = 2 } E_CAN_ID; typedef struct { uint32_t ID; uint8_t Len; uint8_t Data[8U]; } CAN_DATA; /* CAN统一初始化接口 */ void v_can_interface_init(void); uint8_t u8_can_is_initialized(void); /* CAN 中断分发(供 gd32h7xx_it.c 复用) */ void v_can_irq_handler(uint8_t can_port); /* 对外统一发送/接收接口(扩展帧、数据帧) */ void v_can_tx(E_CAN_ID can_id, const CAN_DATA *can_data); uint8_t u8_can_rx(E_CAN_ID can_id, CAN_DATA *can_data); /* 兼容当前工程的原统一接口 */ uint8_t can_send_data(uint8_t can_port, uint32_t id, uint8_t *data, uint8_t dlc, uint8_t ide, uint8_t rtr); uint8_t can_receive_data(uint8_t can_port, uint32_t *id, uint8_t *data, uint8_t *dlc, uint8_t *ide, uint8_t *rtr); /* 扩展帧ID打包/解析工具 */ uint32_t u32_get_can_ID(uint8_t prior, uint8_t cmd, uint8_t desAddr, uint8_t oriAddr); uint8_t u8_can_ID_unpack(uint32_t u32_id, uint8_t *prior, uint8_t *cmd, uint8_t *desAddr, uint8_t *oriAddr); #ifdef __cplusplus } #endif #endif /* CAN_H */