soft_can.h 3.7 KB

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