| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- #include "weight_init.h"
- #include "chipflash.h"
- #include "crc.h"
- #include "soft_can.h"
- #include "tim.h"
- #include "math.h"
- _WS_INFO ws_info = {
- ._app_bin_size = 0xFFFFFFFF,
- ._compAddr = COMP_ADDR,
- ._hardVer = HARDVER,
- ._softVer = SOFT_VER,
- ._moduleID = MODULE_ID,
- ._bootFlag = BOOT_FLAG,
- };
- /*软重启判断*/
- //static void Soft_Reset_Judge(void) {
- // static uint8_t buf[8] = {0};
- // flash_ops->Read_Flash(RESET_FLASH_BASE, buf, sizeof(buf));
- // if (buf[0] == 0xFE) // 判断是否是软件重启
- // {
- // flash_ops->Erase_Flash(RESET_FLASH_BASE, RESET_FLASH_END);
- // }
- //}
- /* 读取FLASH波特率设置,0x1F4 = 500K,0x3E8 = 1000K */
- //static void Set_Can_Baud(void) {
- // uint8_t BaudBuf[2] = {0};
- // uint16_t setbaudflag = 0;
- // flash_ops->Read_Flash(CAN_FLASH_BASE, BaudBuf, sizeof(BaudBuf));
- // setbaudflag = BaudBuf[1];
- // setbaudflag = (setbaudflag << 8) + BaudBuf[0];
- // if (0x1F4 == setbaudflag) {
- // MX_CAN_Init(8);
- // } else if (0x3E8 == setbaudflag) {
- // MX_CAN_Init(4);
- // } else {
- // setbaudflag = 0x3E8;
- // BaudBuf[0] = setbaudflag & 0xff;
- // BaudBuf[1] = (setbaudflag & 0xff00) >> 8;
- // flash_ops->Erase_Flash(CAN_FLASH_BASE, CAN_FLASH_END); // 默认重写0x3E8
- // flash_ops->Write_Flash(CAN_FLASH_BASE, BaudBuf, sizeof(BaudBuf));
- // MX_CAN_Init(4);
- // }
- //}
- /*需要升级*/
- void Write_Upgrade_Flag(void) {
- ws_info._bootFlag = BOOT_FLAG;
- flash_ops->Erase_Flash(PAR_FLASH_BASE_ADDR, PAR_FLASH_END_ADDR);
- flash_ops->Write_Flash(PAR_FLASH_BASE_ADDR, (uint8_t *)&ws_info,
- sizeof(ws_info));
- }
- /*重置升级标志位*/
- static void Reset_Upgrade(void) {
- // flash_ops->Read_Flash(PAR_FLASH_BASE_ADDR, (uint8_t *)&ws_info,
- // sizeof(ws_info));
- /*merge的时候合并冲突把这个标志位覆盖成了不存在升级!!引以为戒!*/
- //#if OFF_SEL == 1
- // if (ws_info._bootFlag != NOEXIST_UPGRADE_FLAG)
- //#elif OFF_SEL == 2
- // if (ws_info._bootFlag != UNUPGRADE)
- //#else
- // if (ws_info._bootFlag != UNUPGRADE)
- //#endif
- // {
- //#if OFF_SEL == 1
- // ws_info._bootFlag = NOEXIST_UPGRADE_FLAG;
- //#elif OFF_SEL == 2
- // ws_info._bootFlag = UNUPGRADE;
- //#else
- // ws_info._bootFlag = UNUPGRADE;
- //#endif
- ws_info._bootFlag = UNUPGRADE;
- ws_info._app_bin_size = 0xFFFFFFFF, ws_info._compAddr = COMP_ADDR,
- ws_info._hardVer = HARDVER, ws_info._softVer = SOFT_VER,
- ws_info._moduleID = MODULE_ID,
- //flash_ops->Erase_Flash(PAR_FLASH_BASE_ADDR, PAR_FLASH_END_ADDR);
- ws_info._crcCheck = Get_Crc16((uint8_t *)&ws_info, sizeof(ws_info) - 2);
- // flash_ops->Write_Flash(PAR_FLASH_BASE_ADDR, (uint8_t *)&ws_info,
- // sizeof(ws_info));
- //}
- }
- static void Load_Param(void) {
- uint32_t v_check;
- uint32_t tmp_g;
- float tmp_k;
- uint8_t sensor_num_c = 0;
- WEIGHING_DEVICE *device = Get_Device_Handle();
- flash_ops->Read_Flash(VALUE_FLASH_Check_Addr, (uint8_t *)&v_check,
- sizeof(v_check));
- if (Value_Check == v_check) {
- flash_ops->Read_Flash(SENSOR_NUM_RECORD_BASE, (uint8_t *)&sensor_num_c,
- sizeof(sensor_num_c));
- if (sensor_num_c <= SENSOR_NUM) {
- device->sensor_num_mask = sensor_num_c;
- }
- for (sensor_num_c = 0; sensor_num_c < SENSOR_NUM; sensor_num_c++) {
- struct SENSOR *sensor = device->sensor[sensor_num_c];
- if (sensor_num_c == device->sensor_num_mask) {
- sensor->base_k = 0;
- continue;
- }
-
- flash_ops->Read_Flash(GROSSWEIGHT1_FLASH_BASE +
- sensor_num_c * ONE_WORD_SIZE,
- (uint8_t *)&tmp_g, sizeof(tmp_g));
- if (tmp_g != 0xFFFFFFFF && tmp_g != 0) {
- device->sensor[sensor_num_c]->GrossWeight = tmp_g;
- }
- }
- flash_ops->Read_Flash(K1_VALUE_FLASH_BASE,(uint8_t *)&tmp_k, sizeof(tmp_k));
- device->correct_k = tmp_k;
- flash_ops->Read_Flash(K1_VALUE_FLASH_BASE,(uint8_t *)&tmp_g, sizeof(tmp_k));
- if(tmp_g == 0xFFFFFFFF)
- {
- device->correct_k = 1;
- }
- }
- }
- static void Record_First_InitValue(void) {
- WEIGHING_DEVICE *device = Get_Device_Handle();
- for (uint8_t sensor_num_c = 0; sensor_num_c < SENSOR_NUM; sensor_num_c++) {
- if (sensor_num_c == device->sensor_num_mask) {
- continue;
- }
- struct SENSOR *sensor = device->sensor[sensor_num_c];
- flash_ops->Read_Flash(
- SENSOR1_INIT_VALUE_BASE + sensor_num_c * ONE_WORD_SIZE,
- (uint8_t *)&sensor->raw_init_value, sizeof(sensor->raw_init_value));
- if (sensor->raw_init_value == 0xFFFFFFFF)
- {
- sensor->raw_init_value = sensor->GrossWeight;
- flash_ops->Write_Flash(
- SENSOR1_INIT_VALUE_BASE + sensor_num_c * ONE_WORD_SIZE,
- (uint8_t *)&sensor->raw_init_value, sizeof(sensor->raw_init_value));
- }
- }
- //flash_ops->Erase_Flash(SENSOR1_INIT_VALUE_BASE , SENSOR1_INIT_VALUE_BASE + ONE_PARAM_SIZE);
-
- }
- static void Get_Warn_Licence(void) {
- float read_tmp = 0;
- WEIGHING_DEVICE *device = Get_Device_Handle();
- for (uint8_t sensor_num_c = 0; sensor_num_c < SENSOR_NUM; sensor_num_c++) {
- struct SENSOR *sensor = device->sensor[sensor_num_c];
-
- if (sensor_num_c == device->sensor_num_mask) {
- continue;
- }
-
- flash_ops->Read_Flash(SENSOR1_INIT_VALUE_BASE +
- sensor_num_c * ONE_PARAM_SIZE,
- (uint8_t *)&read_tmp, sizeof(read_tmp));
-
- if(read_tmp < MIN_K || read_tmp > MAX_K)
- sensor->base_k = 112.0f;
- else
- sensor->base_k = read_tmp;
-
- }
- }
- static void Read_Params(void) {
- WEIGHING_DEVICE *device = Get_Device_Handle();
- device->_ops->get_allgrossweight();
- delay_us(200);
- Record_First_InitValue();
- Get_Warn_Licence(); //读基础K
- Load_Param();
- /*防止异常*/
- for (uint8_t sensor_num_c = 0; sensor_num_c < SENSOR_NUM; sensor_num_c++) {
- if (sensor_num_c == device->sensor_num_mask) {
- continue;
- }
- struct SENSOR *sensor = device->sensor[sensor_num_c];
- // if (sensor->K.f < MIN_K || sensor->K.f > MAX_K || sensor->K.i[0] == 0xff) {
- // sensor->K.f = 112.0f;
- // }
- }
- }
- void MY_WEIGHT_INIT(void) {
- WEIGHING_DEVICE *device = Get_Device_Handle();
- //Reset_Upgrade();
- // Set_Can_Baud();
- //CAN_Init(CANTX_ID);
- device->_ops->filter_init();
- Read_Params();
- //Soft_Reset_Judge();
- // 主动发送K值
- Set_Ack_Status(ack_e1);
- }
|