#ifndef _DRV_CAN_H_ #define _DRV_CAN_H_ #ifdef __cplusplus extern "C" { #endif #include "kit_macro.h" #define CAN_DATA_LEN (8u) typedef enum { kCanDev_1, #if defined(STM32F10X_CL) || defined(STM32F40_41xxx) || defined(STM32F429_439xx) kCanDev_2, #endif kCanDev_End, }CanDev; typedef enum { kCanInterrupt_Rx = 0, kCanInterrupt_Tx, kCanInterrupt_End, }CanInterrupt; typedef enum { kCanIde_Std = 0, kCanIde_Ext, kCanIde_End, } CanIde; //1远程帧 0数据帧 typedef enum { kCanRtr_Data = 0, kCanRtr_Remote, kCanRtr_End, }CanRtr; typedef enum { kCanFilter_Mask, kCanFilter_List, kCanFilter_End, }CanFilter; typedef union { uint32_t value; struct { uint8_t b0; uint8_t b1; uint8_t b2; uint8_t b3; }b; }CanId; typedef union { uint8_t byte[CAN_DATA_LEN]; uint32_t value[2]; }CanData; typedef struct { CanId id; uint8_t len; CanIde ide; //标示符类型 CanRtr rtr; //远程数据类型 CanData data; }CanMsg; KitResult drv_can_init(CanDev dev, uint32_t baud_rate, uint16_t rx_idx, uint16_t tx_idx); KitResult drv_can_send(CanDev dev, CanMsg *msg); KitResult drv_can_receive(CanDev dev, CanMsg *msg); uint8_t drv_can_get_mailbox(CanDev dev); KitResult drv_can_set_interrupt(CanDev dev, CanInterrupt it_type, uint16_t priority, KitIrqCall call); KitResult drv_can_set_filter(uint8_t channel, CanFilter mode, CanIde ide, uint32_t rcv_id, uint32_t mask_id); KitResult drv_can_ctrl_interrupt(CanDev dev, CanInterrupt it_type, bool is_enable); #ifdef __cplusplus } #endif #endif