// #include "energy_manager.h" // // 电量初始化,在main中上电时调用 // void Energy_Init(void) // { // uint8_t energy_bytes[4]; // float saved_energy = 0.0; // // 读取EEPROM保存的电量值 // printf("Attempting to read energy from EEPROM...\r\n"); // Inf_AT24C02_ReadBytes(ADDR, energy_bytes, 4); // // 打印原始字节 // printf("EEPROM Raw Data: %02X %02X %02X %02X\r\n", // energy_bytes[0], energy_bytes[1], energy_bytes[2], energy_bytes[3]); // // 转换为float并打印实际值 // memcpy(&saved_energy, energy_bytes, sizeof(float)); // printf("Raw float value: %.10f\r\n", saved_energy); // // 检查数据有效性 // if(saved_energy >= 0.0f) // 只检查非负值 // { // base_energy = saved_energy; // analog_status[1] = saved_energy; // printf("Power On - Load Energy: %.6f KWH\r\n", base_energy); // } // else // { // printf("Invalid Energy Data (%.6f), Reset to 0\r\n", saved_energy); // base_energy = 0.0; // analog_status[1] = 0.0; // // 立即保存有效值0 // uint8_t zero_bytes[4] = {0}; // printf("Saving zero value to EEPROM...\r\n"); // Inf_AT24C02_WriteBytes(ADDR, zero_bytes, 4); // } // } // // 电量管理,在main循环中调用 // void Energy_Management(void) // { // static uint32_t last_save_time = 0; // static uint8_t power_down_flag = 0; // uint32_t current_time = HAL_GetTick(); // // 打印当前时间 // printf("Current Time: %lu ms\r\n", current_time); // // 改为1分钟保存一次 (60000ms = 1分钟) // if(current_time - last_save_time >= 60000) // 原来是420000(7分钟) // { // printf("\r\nSaving energy to EEPROM...\r\n"); // 添加调试信息 // uint8_t energy_bytes[4]; // memcpy(energy_bytes, &base_energy, sizeof(float)); // // 打印要保存的电量值 // printf("Energy to save: %.6f KWH\r\n", base_energy); // Inf_AT24C02_WriteBytes(ADDR, energy_bytes, sizeof(float)); // printf("1min Save: %.6f KWH\r\n", base_energy); // last_save_time = current_time; // } // // 断电保护 // if(V < 100.0 && power_down_flag == 0) // { // printf("Voltage is low (V = %.2f), entering power down save mode.\r\n", V); // uint8_t energy_bytes[4]; // memcpy(energy_bytes, &base_energy, sizeof(float)); // // 打印要保存的电量值 // printf("Energy to save during power down: %.6f KWH\r\n", base_energy); // Inf_AT24C02_WriteBytes(ADDR, energy_bytes, sizeof(float)); // printf("Power Down Save: %.6f KWH\r\n", base_energy); // power_down_flag = 1; // } // else if(V >= 100.0) // { // printf("Voltage is normal (V = %.2f), resetting power down flag.\r\n", V); // power_down_flag = 0; // } // }