SWM320_can.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #ifndef __SWM320_CAN_H__
  2. #define __SWM320_CAN_H__
  3. #define CAN_FRAME_STD 0
  4. #define CAN_FRAME_EXT 1
  5. typedef struct
  6. {
  7. uint8_t Mode; //CAN_MODE_NORMAL、CAN_MODE_LISTEN、CAN_MODE_SELFTEST
  8. uint8_t CAN_BS1; //CAN_BS1_1tq、CAN_BS1_2tq、... ... 、CAN_BS1_16tq
  9. uint8_t CAN_BS2; //CAN_BS2_1tq、CAN_BS2_2tq、... ... 、CAN_BS2_8tq
  10. uint8_t CAN_SJW; //CAN_SJW_1tq、CAN_SJW_2tq、CAN_SJW_3tq、CAN_SJW_4tq
  11. uint32_t Baudrate; //波特率,即位传输速率,取值1--1000000
  12. uint8_t FilterMode; //CAN_FILTER_16b、CAN_FILTER_32b
  13. union
  14. {
  15. uint32_t FilterMask32b; //FilterCheck & (~FilterMask) == ID & (~FilterMask)的Message通过过滤
  16. struct
  17. { // 0 must match 1 don't care
  18. uint16_t FilterMask16b1;
  19. uint16_t FilterMask16b2;
  20. };
  21. };
  22. union
  23. {
  24. uint32_t FilterCheck32b;
  25. struct
  26. {
  27. uint16_t FilterCheck16b1;
  28. uint16_t FilterCheck16b2;
  29. };
  30. };
  31. uint8_t RXNotEmptyIEn; //接收FIFO非空,有数据可读
  32. uint8_t RXOverflowIEn; //接收FIFO溢出,有数据丢失
  33. uint8_t ArbitrLostIEn; //控制器丢失仲裁变成接收方
  34. uint8_t ErrPassiveIEn; //接收/发送错误计数值达到127
  35. } CAN_InitStructure;
  36. #define CAN_MODE_NORMAL 0 //常规模式
  37. #define CAN_MODE_LISTEN 1 //监听模式
  38. #define CAN_MODE_SELFTEST 2 //自测模式
  39. #define CAN_BS1_1tq 0
  40. #define CAN_BS1_2tq 1
  41. #define CAN_BS1_3tq 2
  42. #define CAN_BS1_4tq 3
  43. #define CAN_BS1_5tq 4
  44. #define CAN_BS1_6tq 5
  45. #define CAN_BS1_7tq 6
  46. #define CAN_BS1_8tq 7
  47. #define CAN_BS1_9tq 8
  48. #define CAN_BS1_10tq 9
  49. #define CAN_BS1_11tq 10
  50. #define CAN_BS1_12tq 11
  51. #define CAN_BS1_13tq 12
  52. #define CAN_BS1_14tq 13
  53. #define CAN_BS1_15tq 14
  54. #define CAN_BS1_16tq 15
  55. #define CAN_BS2_1tq 0
  56. #define CAN_BS2_2tq 1
  57. #define CAN_BS2_3tq 2
  58. #define CAN_BS2_4tq 3
  59. #define CAN_BS2_5tq 4
  60. #define CAN_BS2_6tq 5
  61. #define CAN_BS2_7tq 6
  62. #define CAN_BS2_8tq 7
  63. #define CAN_SJW_1tq 0
  64. #define CAN_SJW_2tq 1
  65. #define CAN_SJW_3tq 2
  66. #define CAN_SJW_4tq 3
  67. #define CAN_FILTER_16b 0 //两个16位过滤器
  68. #define CAN_FILTER_32b 1 //一个32位过滤器
  69. typedef struct
  70. {
  71. uint32_t id; //消息ID
  72. uint8_t format; //帧格式:CAN_FRAME_STD、CAN_FRAME_EXT
  73. uint8_t remote; //消息是否为远程帧
  74. uint8_t size; //接收到的数据个数
  75. uint8_t data[8]; //接收到的数据
  76. } CAN_RXMessage;
  77. void CAN_Init(CAN_TypeDef *CANx, CAN_InitStructure *initStruct);
  78. void CAN_Open(CAN_TypeDef *CANx);
  79. void CAN_Close(CAN_TypeDef *CANx);
  80. void CAN_Transmit(CAN_TypeDef *CANx, uint32_t format, uint32_t id, uint8_t data[], uint32_t size, uint32_t once);
  81. void CAN_TransmitRequest(CAN_TypeDef *CANx, uint32_t format, uint32_t id, uint32_t once);
  82. void CAN_Receive(CAN_TypeDef *CANx, CAN_RXMessage *msg);
  83. uint32_t CAN_TXComplete(CAN_TypeDef *CANx);
  84. uint32_t CAN_TXSuccess(CAN_TypeDef *CANx);
  85. void CAN_AbortTransmit(CAN_TypeDef *CANx);
  86. uint32_t CAN_TXBufferReady(CAN_TypeDef *CANx);
  87. uint32_t CAN_RXDataAvailable(CAN_TypeDef *CANx);
  88. void CAN_SetBaudrate(CAN_TypeDef *CANx, uint32_t baudrate, uint32_t CAN_BS1, uint32_t CAN_BS2, uint32_t CAN_SJW);
  89. void CAN_SetFilter32b(CAN_TypeDef *CANx, uint32_t check, uint32_t mask);
  90. void CAN_SetFilter16b(CAN_TypeDef *CANx, uint16_t check1, uint16_t mask1, uint16_t check2, uint16_t mask2);
  91. void CAN_INTRXNotEmptyEn(CAN_TypeDef *CANx);
  92. void CAN_INTRXNotEmptyDis(CAN_TypeDef *CANx);
  93. void CAN_INTTXBufEmptyEn(CAN_TypeDef *CANx);
  94. void CAN_INTTXBufEmptyDis(CAN_TypeDef *CANx);
  95. void CAN_INTErrWarningEn(CAN_TypeDef *CANx);
  96. void CAN_INTErrWarningDis(CAN_TypeDef *CANx);
  97. void CAN_INTRXOverflowEn(CAN_TypeDef *CANx);
  98. void CAN_INTRXOverflowDis(CAN_TypeDef *CANx);
  99. void CAN_INTRXOverflowClear(CAN_TypeDef *CANx);
  100. void CAN_INTWakeupEn(CAN_TypeDef *CANx);
  101. void CAN_INTWakeupDis(CAN_TypeDef *CANx);
  102. void CAN_INTErrPassiveEn(CAN_TypeDef *CANx);
  103. void CAN_INTErrPassiveDis(CAN_TypeDef *CANx);
  104. void CAN_INTArbitrLostEn(CAN_TypeDef *CANx);
  105. void CAN_INTArbitrLostDis(CAN_TypeDef *CANx);
  106. void CAN_INTBusErrorEn(CAN_TypeDef *CANx);
  107. void CAN_INTBusErrorDis(CAN_TypeDef *CANx);
  108. uint32_t CAN_INTStat(CAN_TypeDef *CANx);
  109. #endif //__SWM320_CAN_H__