soft_can.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. #ifndef _SOFT_CAN_H_
  2. #define _SOFT_CAN_H_
  3. #include "stm32f1xx_hal.h"
  4. #include "stdbool.h"
  5. extern CAN_RxHeaderTypeDef RxHeader;
  6. extern CAN_TxHeaderTypeDef TxHeader;
  7. extern uint32_t update_count;
  8. #pragma pack(1)
  9. typedef struct
  10. {
  11. bool U7E1;
  12. bool U7E3;
  13. bool U7E6;
  14. bool buf_flag;
  15. bool update_flag; //与AG不兼容 一个判断标志
  16. uint8_t update_buf[8];
  17. }Radar;
  18. #pragma pack()
  19. extern Radar Rupdate;
  20. //正方
  21. #define CAN_ZHENGFANG (0x15359826)
  22. #define CAN_ZHENGFANG_MASk (0x1FFF0000)
  23. //木牛
  24. #define CAN_MUNIU (0x00090002)
  25. //莫之比避障前后
  26. #define CAN_OBSTACLE_1 (0x000EFF11)
  27. #define CAN_OBSTACLE_2 (0x000EFF12)
  28. //莫之比仿地
  29. #define CAN_UAVH30_MSG (0x000EFF0B)
  30. //莫之比雷达SN号ID
  31. #define CAN_OBSTARCLE11_SN 0x410
  32. #define CAN_OBSTARCLE12_SN 0x420
  33. #define CAN_OBSTARCLE56_SN 0x430
  34. //好盈电调
  35. #define CAN_HOBBYWING_MSG_ESC_START 0x1F4E2000
  36. #define CAN_HOBBYWING_MSG_ESC_END 0x1F4F1A00
  37. #define CAN_HOBBYWING_SET_ESC_START 0x1FC800
  38. #define CAN_HOBBYWING_SET_ESC_END 0x1FF200
  39. //莫之比MASK
  40. #define CAN_MICOB_FILTER_ID (0x000EFF01)
  41. #define CAN_MICOB_MASK_ID ((uint32_t)0x1F0FFFE0)
  42. //莫之比升级系列扩展ID
  43. #define CAN_UAVRH_FILTER_ID (0x000007E0)
  44. #define CAN_UAVRH_MASK_ID ((uint32_t)0x1FFFFFE0) //最后5位加版本位不过滤
  45. //恩曌仿地
  46. #define CAN_MIMO_T_ID (0x300)
  47. //恩曌分区仿地
  48. #define CAN_MIMO_T_ID1 (0x311)
  49. #define CAN_MIMO_T_ID2 (0x312)
  50. #define CAN_MIMO_T_ID3 (0x313)
  51. //恩曌前避障(多点)
  52. #define CAN_MIMO_FOBS_ID1 (0x401)
  53. #define CAN_MIMO_FOBS_ID2 (0x402)
  54. #define CAN_MIMO_FOBS_ID3 (0x403)
  55. //恩曌后避障(多点)
  56. #define CAN_MIMO_BOBS_ID1 (0x411)
  57. #define CAN_MIMO_BOBS_ID2 (0x412)
  58. #define CAN_MIMO_BOBS_ID3 (0x413)
  59. //恩曌前避障(单点)
  60. #define CAN_MIMO_FOBS_SIG (0x301)
  61. //恩曌后避障(单点)
  62. #define CAN_MIMO_BOBS_SIG (0x302)
  63. //恩曌前后避障掩码
  64. #define CAN_MIMO_OBS_MASK (0X5E2)
  65. //恩曌雷达版本信息应答
  66. #define CAN_MIMO_VERSION (0XFB)
  67. //恩曌360雷达新协议
  68. #define CAN_360MIMO_1ID (0x501)
  69. #define CAN_360MIMO_2ID (0x502)
  70. //恩曌360雷达
  71. #define CAN_HEAD_MIMO360_ID (0x301)
  72. #define CAN_INFO_MIMO360_ID (0x302)
  73. #define CAN_MIMO_FLOW (0x210)
  74. #define CAN_MIMO_FLOW_K (0xFB)
  75. #define CAN_BX_RADAR (0X003)
  76. //格式
  77. #define CAN_TATTU_MSG (0x01109216)
  78. #define CAN_NEWTATTU_MSG (0x01109200)
  79. #define CAN_NEWTATTU_MSG2 (0x011092FF)
  80. //EFT流量计 恩曌
  81. #define CAN_EFT_MIMO_FLOW (0x262202)
  82. #define EFT_FILTER_ID 0x00008851U
  83. #define EFT_MASK_ID 0xFFFFFF00U
  84. // 第2~0位,发送端ID,默认3
  85. #define CAN_FULLY_SENDNODE_ID_MASK 0x00000007 // 0 0000 0000 0000 0000 0000 0000 0111(29位扩展ID)
  86. // 第3位,最后一包标志,最后一包设置为1,其他设置为0
  87. #define FULLY_ENDPACK_FLAG_MASK 0x00000008 // 0 0000 0000 0000 0000 0000 0000 1000(29位扩展ID)
  88. // 第9~4位,包计数:从0开始递增,第一包是0
  89. #define FULLY_PACK_NUM_MASK 0x000003F0 // 0 0000 0000 0000 0000 0011 1111 0000(29位扩展ID)
  90. // 第16~10位,包ID:默认值 1
  91. #define FULLY_PACK_ID_MASK 0x0001FC00 // 0 0000 0000 0001 1111 1100 0000 0000(29位扩展ID)
  92. // 第18~17位,发送形式: 默认值 2
  93. #define CAN_FULLY_SEND_TYPE 0x00060000 // 0 0000 0000 0110 0000 0000 0000 0000(29位扩展ID)
  94. // 第28~19位,消息ID:
  95. #define CAN_FULLY_MSG_ID 0x1FF80000 // 1 1111 1111 1000 0000 0000 0000 0000(29位扩展ID)
  96. //富力电池ID及MASK
  97. #define FULLY_CELL_FILTER_ID 0x16040403 // 1 0110 0000 0100 0000 0100 0000 0011(29位扩展ID)
  98. #define FULLY_CELL_MASK_ID 0x1e07fc07 // 1 1110 0000 0111 1111 1100 0000 0111(29位扩展ID)
  99. //富力握手ID(740)
  100. #define FULLY_CELL_HANDSHAKE 0x1724040b // 1 0111 0010 0100 0000 0100 0000 1011(29位扩展ID)
  101. //富力SHA1写入(741)
  102. #define FULLY_CELL_SHA1W 0x172c040b‬ // 1 0111 0010 1100 0000 0100 0000 1011(29位扩展ID)
  103. //富力SHA1查询(742)
  104. #define FULLY_CELL_SHA1R 0x1734040b // 1 0111 0011 0100 0000 0100 0000 1011(29位扩展ID)
  105. //极目电池
  106. #define CAN_POWERAMP (0x188)
  107. //EZ雷达协议升级
  108. #define CAN_EZ_R_UPDATE (0x3D)
  109. //羽人电池
  110. #define CAN_YRPOWER (0x7D0)
  111. //吉利发动机
  112. #define GEELY_ENGINE_START_ID 0x1C0
  113. #define GEELY_ENGINE_END_ID 0X1C4
  114. #define GEELY_ENGINE_ID_MASK 0x7F8
  115. //吉利发动机2版协议
  116. #define GEELY_ENGINE_START_ID2 0x1E0
  117. #define GEELY_ENGINE_END_ID2 0X1EF
  118. //海盈智能电池
  119. #define HEREWIN_FILTER_ID 0x0000FE00 // 1111 1110 0000 0000
  120. #define HEREWIN_MASK_ID 0x0300F0FF //0011 0000 0000 1111 0000 1111 1111
  121. // 1111 0000 0000 0000
  122. //极目播撒本撒设备
  123. #define POWERAMP_START_ID 0x52
  124. #define POWERAMP_END_ID 0x67
  125. //VK协议
  126. #define FRAME_TYPE_MASK 0x1C000000 // 1 1100 0000 0000 0000 0000 0000 0000(29位扩展ID)
  127. #define CAN_FMTYPE_DATA 0x00 // 数据帧
  128. #define CAN_FMTYPE_REQ 0x01 // 请求帧
  129. // 第18~12位,目标nodeID,, ID最大0x7F
  130. // 第11~5位, 源nodeID, ID最大0x7F
  131. #define DES_ID_MASK 0x0007F000 // 0 0000 0000 0111 1111 0000 0000 0000(29位扩展ID)
  132. #define SRC_ID_MASK 0x00000FE0 // 0 0000 0000 0000 0000 1111 1110 0000(29位扩展ID)
  133. #define CAN_NODEID_MC 0x01 // 主控nodeid
  134. #define CAN_NODEID_LED 0x02 // led灯板nodeid
  135. #define CAN_NODEID_4G 0x03 // 4G模块nodeid
  136. #define CAN_NODEID_LIQUED 0x15 //液位计nodeid
  137. #define CAN_NODEID_FLOW 0x16 //流量计nodeid
  138. #define CAN_NODEID_ENGINE 0x17 //发动机nodeid
  139. #define CAN_NODEID_LASER 0x18 //雷达nodeid
  140. #define CAN_NODEID_WEIGHT 0x19 //称重传感器、播撒器 nodeid
  141. #define CAN_NODEID_RADAR_UPDATE 0x20 //设备升级
  142. #define CAN_NODEID_DISTRIBUTOR 0x21 //分电板
  143. #define CAN_NODEID_PUMP_NOZZLE 0x22 //水泵离心喷头
  144. // 第25~19位,消息ID
  145. #define MSG_ID_MASK 0x03F80000 // 0 0011 1111 1000 0000 0000 0000 0000(29位扩展ID)
  146. // 飞控发出给LED的消息序号
  147. #define CAN_MSGID_MCTOLED_BLINK 0x01 // 灯闪烁
  148. // 飞控发出给LED的配置消息序号
  149. #define CAN_MSGID_MCTOLED_CONF 0x02 // 底板配置
  150. // 飞控发出给LED的AD状态消息序号
  151. #define CAN_MSGID_MCTOLED_ADOC 0x03 // AD开关
  152. // LED发出给飞控的消息序号
  153. #define CAN_MSGID_LEDTOMC_VOLT 0x01 // 电压监测
  154. // LED发出给飞控的版本序号
  155. #define CAN_MSGID_LEDTOMC_VER 0x02 // 版本信息
  156. // 液位计发出给飞控的消息
  157. #define CAN_MSGID_LEDTOMC_LIQUID 0x03 // 液位计信息(目前没有到)
  158. //流量计发出给飞控的信息
  159. #define CAN_MSGID_FLOWTOMC_INFO 0x04 //流量计信息 0x2012c0
  160. #define CAN_MSGID_FLOWTOMC_ACK 0x05 //流量计ACK
  161. //发动机发出给飞控的信息
  162. #define CAN_MSGID_ENGINE_INFO 0x06 //CAN发动机信息(目前没有到)
  163. #define CAN_MSGID_RADAR_START 0X07 //雷达升级开始
  164. #define CAN_MSGID_RADAR_ING 0X08 //雷达升级中
  165. #define CAN_MSGID_RADAR_END 0X09 //雷达升级结束 1000 0001 0100 0010 0000
  166. //水泵信息
  167. #define CAN_MSGID_PUMP 0x10
  168. //离心喷头信息
  169. #define CAN_MSGID_NOZZLE 0x11
  170. //防地雷达发出给飞控的信息0x901300
  171. #define CAN_MSGID_RADAR_INFO 0x12
  172. //飞控发出给防地雷达的信息0x981300
  173. #define CAN_MSGID_RADAR_VERSION_INFO 0x13
  174. //前避障雷达发出给飞控的信息
  175. #define CAN_MSGID_FRADAR_INFO 0x14
  176. //飞控发出给前避障雷达的信息
  177. #define CAN_MSGID_FRADAR_VERSION_INFO 0x15
  178. //后避障雷达发出给飞控的信息
  179. #define CAN_MSGID_BRADAR_INFO 0x16
  180. //飞控发出给后避障雷达的信息
  181. #define CAN_MSGID_BRADAR_VERSION_INFO 0x17
  182. // CANfilterID,(扩展帧 29位)
  183. // filterID中,按照目标和源ID进行过滤,目标ID为自己的固定不变,源ID需要把所有的需要接收的node合并一起组成
  184. #define CAN_MC_FILTER_ID ((unsigned int)(CAN_FMTYPE_DATA<<26 | CAN_MSGID_LEDTOMC_VOLT<<19 | \
  185. CAN_NODEID_MC<<12 | CAN_NODEID_LED<<5))
  186. // CANmaskID, (扩展帧 29位) 0 0x12 0x18
  187. // maskID中为1的位,需要filterID和消息帧中对应位的值完全一样,才能通过过滤
  188. // 消息类型位全置1,目标nodeID的位全置1, 消息ID以及源节点ID处寻找相同位的做过滤
  189. #define CAN_MC_MASK_ID ((unsigned int)(FRAME_TYPE_MASK | \
  190. (MSG_ID_MASK & (((0x7f & (~(0x00 | CAN_MSGID_LEDTOMC_VOLT | CAN_MSGID_LEDTOMC_VER | CAN_MSGID_ENGINE_INFO \
  191. | CAN_MSGID_FLOWTOMC_INFO | CAN_MSGID_FLOWTOMC_ACK | CAN_MSGID_RADAR_INFO | CAN_MSGID_BRADAR_INFO |CAN_MSGID_FRADAR_INFO |CAN_MSGID_RADAR_START| CAN_MSGID_RADAR_ING | CAN_MSGID_RADAR_END)))|\
  192. (0x7f & CAN_MSGID_LEDTOMC_VOLT & CAN_MSGID_LEDTOMC_VER & CAN_MSGID_FLOWTOMC_INFO & CAN_MSGID_FLOWTOMC_ACK & CAN_MSGID_ENGINE_INFO \
  193. & CAN_MSGID_RADAR_START& CAN_MSGID_RADAR_INFO & CAN_MSGID_BRADAR_INFO & CAN_MSGID_FRADAR_INFO & CAN_MSGID_RADAR_ING & CAN_MSGID_RADAR_END))<<19)) | \
  194. DES_ID_MASK | \
  195. (SRC_ID_MASK & (((0x7f & (~(0x00 | CAN_NODEID_LED | CAN_NODEID_4G | CAN_NODEID_LIQUED | CAN_NODEID_FLOW | \
  196. CAN_NODEID_ENGINE | CAN_NODEID_LASER |CAN_NODEID_WEIGHT | CAN_NODEID_RADAR_UPDATE | CAN_NODEID_DISTRIBUTOR | CAN_NODEID_PUMP_NOZZLE))) |\
  197. (0x7f & CAN_NODEID_LED & CAN_NODEID_4G & CAN_NODEID_LIQUED & CAN_NODEID_FLOW & \
  198. CAN_NODEID_ENGINE & CAN_NODEID_LASER & CAN_NODEID_WEIGHT & CAN_NODEID_RADAR_UPDATE & CAN_NODEID_DISTRIBUTOR & CAN_NODEID_PUMP_NOZZLE))<<5))))
  199. //VK电池协议 0x1E0958
  200. #define VK_BMS_FILTER_ID 0xE0800 //0 0000 0000 1110 0000 1000 0000 0000 flag 111 目标节点0x1
  201. #define VK_BMS_MASK_ID 0x1C0FF800 //1 1100 0000 1111 1111 1000 0000 0000
  202. //0x1C0E0800
  203. #define VK_MSG_MASK_ID 0X3F00000
  204. #define VK_SRC_MASK_ID 0X7E0
  205. void can_start_init(void);
  206. void Can_filter_init(void);
  207. void Can_obstacle_update(void);
  208. void check_radar_link_status(void);
  209. void can_send_msg_normal(unsigned char *data, unsigned char length, unsigned int extid);
  210. void can_send_msg_normalstd(unsigned char *data, unsigned char length, unsigned int stdid);
  211. void put_date_to_can(uint8_t *buf,uint8_t par1,uint8_t par2,uint8_t par3,uint8_t par4,uint8_t par5,
  212. uint8_t par6,uint8_t par7,uint8_t par8);
  213. #endif