1 #ifndef __SWM341_CAN_H__ 2 #define __SWM341_CAN_H__ 3 4 5 typedef struct { 6 uint8_t Mode; //CAN_MODE_NORMAL、CAN_MODE_LISTEN、CAN_MODE_SELFTEST 7 uint8_t CAN_bs1; //CAN_BS1_1tq、CAN_BS1_2tq、... ... 、CAN_BS1_16tq 8 uint8_t CAN_bs2; //CAN_BS2_1tq、CAN_BS2_2tq、... ... 、CAN_BS2_8tq 9 uint8_t CAN_sjw; //CAN_SJW_1tq、CAN_SJW_2tq、CAN_SJW_3tq、CAN_SJW_4tq 10 uint32_t Baudrate; //波特率,即位传输速率,取值1--1000000 11 uint8_t RXNotEmptyIEn; //接收FIFO非空,有数据可读 12 uint8_t ArbitrLostIEn; //控制器丢失仲裁变成接收方 13 uint8_t ErrPassiveIEn; //接收/发送错误计数值达到127 14 } CAN_InitStructure; 15 16 17 #define CAN_MODE_NORMAL 0 //常规模式 18 #define CAN_MODE_LISTEN 1 //监听模式 19 #define CAN_MODE_SELFTEST 2 //自测模式 20 21 #define CAN_BS1_1tq 0 22 #define CAN_BS1_2tq 1 23 #define CAN_BS1_3tq 2 24 #define CAN_BS1_4tq 3 25 #define CAN_BS1_5tq 4 26 #define CAN_BS1_6tq 5 27 #define CAN_BS1_7tq 6 28 #define CAN_BS1_8tq 7 29 #define CAN_BS1_9tq 8 30 #define CAN_BS1_10tq 9 31 #define CAN_BS1_11tq 10 32 #define CAN_BS1_12tq 11 33 #define CAN_BS1_13tq 12 34 #define CAN_BS1_14tq 13 35 #define CAN_BS1_15tq 14 36 #define CAN_BS1_16tq 15 37 38 #define CAN_BS2_1tq 0 39 #define CAN_BS2_2tq 1 40 #define CAN_BS2_3tq 2 41 #define CAN_BS2_4tq 3 42 #define CAN_BS2_5tq 4 43 #define CAN_BS2_6tq 5 44 #define CAN_BS2_7tq 6 45 #define CAN_BS2_8tq 7 46 47 #define CAN_SJW_1tq 0 48 #define CAN_SJW_2tq 1 49 #define CAN_SJW_3tq 2 50 #define CAN_SJW_4tq 3 51 52 #define CAN_FRAME_STD 0 53 #define CAN_FRAME_EXT 1 54 55 #define CAN_FILTER_1 0 56 #define CAN_FILTER_2 1 57 #define CAN_FILTER_3 2 58 #define CAN_FILTER_4 3 59 #define CAN_FILTER_5 4 60 #define CAN_FILTER_6 5 61 #define CAN_FILTER_7 6 62 #define CAN_FILTER_8 7 63 #define CAN_FILTER_9 8 64 #define CAN_FILTER_10 9 65 #define CAN_FILTER_11 10 66 #define CAN_FILTER_12 11 67 #define CAN_FILTER_13 12 68 #define CAN_FILTER_14 13 69 #define CAN_FILTER_15 14 70 #define CAN_FILTER_16 15 71 72 73 /* Interrupt Type */ 74 #define CAN_IT_RX_NOTEMPTY (0x01 << 0) //RX Buffer Not Empty 75 #define CAN_IT_RX_OVERFLOW (0x01 << 3) //RX Buffer Overflow 76 #define CAN_IT_TX_EMPTY (0x01 << 1) //TX Buffer Empty 77 #define CAN_IT_ARBLOST (0x01 << 6) //Arbitration lost 78 #define CAN_IT_ERR (0x01 << 7) 79 #define CAN_IT_ERR_WARN (0x01 << 2) //TXERR/RXERR计数值达到Error Warning Limit 80 #define CAN_IT_ERR_PASS (0x01 << 5) //TXERR/RXERR计数值达到127 81 #define CAN_IT_WAKEUP (0x01 << 4) 82 83 84 85 typedef struct { 86 uint32_t id; //消息ID 87 uint8_t format; //帧格式:CAN_FRAME_STD、CAN_FRAME_EXT 88 uint8_t remote; //消息是否为远程帧 89 uint8_t size; //接收到的数据个数 90 uint8_t data[8]; //接收到的数据 91 } CAN_RXMessage; 92 93 94 void CAN_Init(CAN_TypeDef * CANx, CAN_InitStructure * initStruct); 95 void CAN_Open(CAN_TypeDef * CANx); 96 void CAN_Close(CAN_TypeDef * CANx); 97 98 void CAN_Transmit(CAN_TypeDef * CANx, uint32_t format, uint32_t id, uint8_t data[], uint32_t size, uint32_t once); 99 void CAN_TransmitRequest(CAN_TypeDef * CANx, uint32_t format, uint32_t id, uint32_t once); 100 void CAN_Receive(CAN_TypeDef * CANx, CAN_RXMessage *msg); 101 102 uint32_t CAN_TXComplete(CAN_TypeDef * CANx); 103 uint32_t CAN_TXSuccess(CAN_TypeDef * CANx); 104 105 void CAN_AbortTransmit(CAN_TypeDef * CANx); 106 107 uint32_t CAN_TXBufferReady(CAN_TypeDef * CANx); 108 uint32_t CAN_RXDataAvailable(CAN_TypeDef * CANx); 109 110 void CAN_SetBaudrate(CAN_TypeDef * CANx, uint32_t baudrate, uint32_t CAN_bs1, uint32_t CAN_bs2, uint32_t CAN_sjw); 111 112 void CAN_SetFilter32b(CAN_TypeDef * CANx, uint32_t filter, uint32_t check, uint32_t mask); 113 void CAN_SetFilter16b(CAN_TypeDef * CANx, uint32_t filter, uint16_t check1, uint16_t mask1, uint16_t check2, uint16_t mask2); 114 115 void CAN_INTEn(CAN_TypeDef * CANx, uint32_t it); 116 void CAN_INTDis(CAN_TypeDef * CANx, uint32_t it); 117 void CAN_INTClr(CAN_TypeDef * CANx, uint32_t it); 118 uint32_t CAN_INTStat(CAN_TypeDef * CANx); 119 120 121 #endif //__SWM341_CAN_H__ 122