soft_can.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #pragma once
  2. #include "fdcan.h"
  3. #include "weight_read.h"
  4. #include "rkfifo.h"
  5. //称重canid
  6. #define CANTX_ID 0x81320
  7. #define CANRX_ID 0x81321
  8. #define CANRX_MASTK 0x80000
  9. #define CAN_ACK_ID 0x81322
  10. #define CANTX_ID2 0x81326
  11. #define CAN_REQ_UPGRADE_ID 0x381400
  12. #define HIGH_MASK 0xFFFF0000
  13. #define LOW_MASK 0x0000FFFF
  14. #define ONE_PARAM_SIZE (8 * 1024)
  15. #define ONE_WORD_SIZE (1 * 64)
  16. #define RESET_FLASH_BASE ((uint32_t)FLASH_BASE + 64 * 1024) // 存放重启标志位
  17. #define RESET_FLASH_END RESET_FLASH_BASE + ONE_PARAM_SIZE
  18. #define CAN_FLASH_BASE RESET_FLASH_END // 存放CAN波特率标志位
  19. #define CAN_FLASH_END CAN_FLASH_BASE + ONE_PARAM_SIZE
  20. #define VALUE_FLASH_Check_Addr CAN_FLASH_END // 存放默认K值信息,前四个字节为数据有效位
  21. #define VALUE_FLASH_Check_End VALUE_FLASH_Check_Addr + ONE_PARAM_SIZE
  22. /*基本上只用第一个的地址*/
  23. #define K1_VALUE_FLASH_BASE VALUE_FLASH_Check_End //测量K值
  24. #define K1_VALUE_FLASH_END K1_VALUE_FLASH_BASE + ONE_PARAM_SIZE
  25. //#define K2_VALUE_FLASH_BASE K1_VALUE_FLASH_END
  26. //#define K2_VALUE_FLASH_END K2_VALUE_FLASH_BASE + ONE_PARAM_SIZE
  27. //#define K3_VALUE_FLASH_BASE K2_VALUE_FLASH_END
  28. //#define K3_VALUE_FLASH_END K3_VALUE_FLASH_BASE + ONE_PARAM_SIZE
  29. //#define K4_VALUE_FLASH_BASE K3_VALUE_FLASH_END
  30. //#define K4_VALUE_FLASH_END K4_VALUE_FLASH_BASE + ONE_PARAM_SIZE
  31. /*基本上只用第一个的地址*/
  32. #define GROSSWEIGHT1_FLASH_BASE K1_VALUE_FLASH_END //毛重
  33. #define GROSSWEIGHT1_FLASH_END GROSSWEIGHT1_FLASH_BASE + ONE_PARAM_SIZE
  34. //#define GROSSWEIGHT2_FLASH_BASE GROSSWEIGHT1_FLASH_END
  35. //#define GROSSWEIGHT2_FLASH_END GROSSWEIGHT2_FLASH_BASE + ONE_WORD_SIZE
  36. //#define GROSSWEIGHT3_FLASH_BASE GROSSWEIGHT2_FLASH_END
  37. //#define GROSSWEIGHT3_FLASH_END GROSSWEIGHT3_FLASH_BASE + ONE_WORD_SIZE
  38. //#define GROSSWEIGHT4_FLASH_BASE GROSSWEIGHT3_FLASH_END
  39. //#define GROSSWEIGHT4_FLASH_END GROSSWEIGHT4_FLASH_BASE + ONE_WORD_SIZE
  40. #define SENSOR1_INIT_VALUE_BASE GROSSWEIGHT1_FLASH_END //基础K值
  41. #define SENSOR1_INIT_VALUE_END SENSOR1_INIT_VALUE_BASE + ONE_PARAM_SIZE
  42. #define SENSOR2_INIT_VALUE_BASE SENSOR1_INIT_VALUE_END
  43. #define SENSOR2_INIT_VALUE_END SENSOR2_INIT_VALUE_BASE + ONE_PARAM_SIZE
  44. #define SENSOR3_INIT_VALUE_BASE SENSOR2_INIT_VALUE_END
  45. #define SENSOR3_INIT_VALUE_END SENSOR3_INIT_VALUE_BASE + ONE_PARAM_SIZE
  46. #define SENSOR4_INIT_VALUE_BASE SENSOR3_INIT_VALUE_END
  47. #define SENSOR4_INIT_VALUE_END SENSOR4_INIT_VALUE_BASE + ONE_PARAM_SIZE
  48. #define SENSOR_NUM_RECORD_BASE SENSOR4_INIT_VALUE_END + ONE_PARAM_SIZE
  49. #define SENSOR_NUM_RECORD_END SENSOR_NUM_RECORD_BASE + ONE_PARAM_SIZE
  50. // 配置起始地址
  51. #define PARAM_FLASH_BASE RESET_FLASH_BASE
  52. // 配置结束地址
  53. #define PARAM_FLASH_END GROSSWEIGHT4_FLASH_END
  54. #define Value_Check 0x33336666
  55. #define MAX_FRAME_DATA 8
  56. typedef struct
  57. {
  58. FDCAN_TxHeaderTypeDef Txheader;
  59. uint8_t Txdata[MAX_FRAME_DATA];
  60. } Can_Tx;
  61. typedef struct
  62. {
  63. FDCAN_RxHeaderTypeDef Rxheader;
  64. uint8_t Rxdata[MAX_FRAME_DATA];
  65. } Can_Rx;
  66. typedef struct
  67. {
  68. uint8_t Code;
  69. uint8_t Data[4];
  70. uint8_t CRCH;
  71. uint8_t CRCL;
  72. uint8_t Num;
  73. } FORMAT_RXMSG, FORMAT_ACKMSG;
  74. typedef struct
  75. {
  76. uint8_t WorkStatus;
  77. uint8_t AlarmStatus;
  78. uint16_t WeightRate;
  79. uint8_t Weight[4];
  80. } FORMAT_CAN2PMU;
  81. typedef enum
  82. {
  83. no_ack = 0,
  84. ack_f1 = 0xF1,
  85. ack_f2 = 0xF2,
  86. ack_f3 = 0xF3,
  87. ack_f4 = 0xF4,
  88. ack_f5 = 0xF5,
  89. ack_f6 = 0xF6,
  90. ack_f7 = 0xF7,
  91. ack_e1 = 0xE1,
  92. ack_e2 = 0xE2,
  93. ack_e3 = 0xE3,
  94. ack_e4 = 0xE4,
  95. ack_e5 = 0xE5,
  96. ack_e6 = 0xE6,
  97. ack_e7 = 0xE7,
  98. } ACK_STATUS;
  99. // struct FITTED_DATA
  100. // {
  101. // uint8_t Fitted_Count;
  102. // uint32_t Real_Variation[4][8];
  103. // float RealWeight[4][8];
  104. // };
  105. // extern struct FITTED_DATA fitted_data;
  106. extern rkfifo_t can_tx_kfifo;
  107. extern rkfifo_t can_rx_kfifo;
  108. extern bool factory_calibration;
  109. void Set_Ack_Status(ACK_STATUS status);
  110. FORMAT_CAN2PMU *Get_Tx_Msg(void);
  111. extern void MY_CAN_INIT();
  112. void Write_To_Flash(uint32_t first_flash, uint32_t end_flash, uint8_t *data, uint8_t size);
  113. void CAN_Init(uint32_t ExtId);
  114. void CAN2PMU_Send(void);
  115. extern void Can_Rx_Decode(void);
  116. void Can_Ack_Pmu(void);
  117. extern void can2Pmu_3hz_info();
  118. void CAN_Tx_Empty_Callback(FDCAN_HandleTypeDef *hcan);
  119. extern void Can_Txmsg_Target_Init(uint32_t can_id, uint8_t *data);
  120. extern void Can_Txmsg_Init(void);
  121. extern bool can_send(FDCAN_HandleTypeDef *hfdcan);