#ifndef _SOFT_CAN_H_ #define _SOFT_CAN_H_ #include #include "hpm_can_drv.h" /*----------------------------- 飞控自定义 CAN 组成协议格式 * ---------------------*/ // CAN协议使用扩展ID进行过滤,总共29位, 0x1FFFFFFF,禁止高7位全为1 // 第28~26位,帧类型 #define FRAME_TYPE_MASK 0xE0000000 // 1110 0000 0000 0000 0000 0000 0000 0000 #define CAN_FRAME_TYPE_DATA 0x00 // 数据帧 #define CAN_FRAME_TYPE_REQ 0x01 // 请求帧 // 第25~19位,消息ID #define MSG_ID_MASK 0x1FC00000 // 0001 1111 1100 0000 0000 0000 0000 0000 // 飞控发出的消息序号 #define CAN_MSGID_CONTROLLER_TO_LED_TEST 0X00 // 测试消息 #define CAN_MSGID_CONTROLLER_TO_LED_BLINK 0x01 // 灯闪烁 // led发出的消息序号 #define CAN_MSGID_LED_TO_CONTROLLER_VOLTAGE 0x01 // 电压监测 // 第18~12位,目标nodeID,11~5位,源nodeID, ID最大0x7F #define DESTINATION_ID_MASK \ 0x003F8000 // 0000 0000 0011 1111 1000 0000 0000 0000 #define SOURCE_ID_MASK 0x00007F00 // 0000 0000 0000 0000 0111 1111 0000 0000 #define CAN_NODEID_CONTROLLER 0x01 // 主控CANID #define CAN_NODEID_LED 0x02 // led灯板nodeid // 第4位帧开始标志,第3位帧结束标志 #define CAN_MSG_STA 0x00000080 #define CAN_MSG_END 0x00000040 // 第2~0位,帧序号 #define FRAME_SEQ_MASK 0x00000031 // 0000 0000 0000 0000 0000 0000 0011 1000 //////////////////////////////////////////////////////////////////////////////// // CANmaskID, // maskID中为1的位,需要filterID和消息帧中对应位的值完全一样,才能通过过滤 // 因此目标nodeID的位全置1, 其它位置暂不过滤 #define CAN_CONTROLLER_MASK_ID 0x003F8006 #define CAN_CONTROLLER_FILTER_ID ((unsigned int)CAN_NODEID_CONTROLLER << 15) enum can_ext_id_set { //莫之比智能-避障雷达UAVR20 前向 CAN_UAVR20_1_MSG = (0x000EFF01), //莫之比智能-避障雷达UAVR20 后向 CAN_UAVR20_2_MSG = (0x000EFF02), //莫之比智能-定高雷达UAVH30 CAN_UAVH30_MSG = (0x000EFF0B), //莫之比智能-避障雷达UAVR21 前向 CAN_UAVR21_1_MSG = 0x000EFF11, //莫之比智能-避障雷达UAVR21 后向 CAN_UAVR21_2_MSG = 0x000EFF12, //莫之比系列扩展ID CAN_MICOB_FILTER_ID = 0x000EFF01, CAN_MICOB_MASK_ID = 0x1FFFFFE0, // 格式智能电池 ID CAN_TATTU_BMS_ID = (0x01109216), // 视觉模块 CAN_VINS2FMU_MSG = (0X1662), CAN_FMU2VINS_MSG = (0X1661), // afc id CAN_MC2AFC_ID = 0x1664, CAN_AFC2MC_ID = 0x1663, // ulanding 雷达 CAN_ULANDING_MSG = (0x90002), // V7PMU CAN_V7_PMU = 528472 }; enum can_std_id_set { //标准帧 11位 组成16位后面要加5(RTR+IDE+EXID[17:15]位 CAN_NRA24_TARINFO = (0x70C), CAN_NRA24_TARSTAT = (0x70B), //标准帧 11位 组成16位后面要加5(RTR+IDE+EXID[17:15]位 CAN_MR72_GENERAL = (0x60B), CAN_MR72_STATUS = (0x60A), // 吉利发动机 can id can_id_version_msg = 0x1C0, can_id_status_msg = 0x1C1, can_id_fault_msg = 0x1C2, can_id_ack_msg = 0x1C3, can_id_worktime_msg = 0x1C4, can_id_ctl_msg = 0x1A0, }; /*----------------------------------------------------------------------------*/ void CAN_BusInit(void); int canSendVkMsg(unsigned char *data, unsigned char length, unsigned int extid, uint16_t time_out_ms); int canSendMsg(can_transmit_buf_t *pTxMsg); void CanTxRxServicePoll(void); #endif