|
@@ -20,6 +20,7 @@
|
|
|
#include "light_driver.h"
|
|
|
#include "MC_Globals.h"
|
|
|
#include "MC_FOC_Driver.h"
|
|
|
+#include "log_save.h"
|
|
|
|
|
|
/************************全局变量************************/
|
|
|
TrueOrFalse_Flag_Struct_t IsInitFinish_Flag = FALSE;
|
|
@@ -622,11 +623,10 @@ uint8_t MC_CadenceLimit_Cal(uint8_t Cadence, uint16_t Current, uint8_t T_Coil)
|
|
|
}
|
|
|
|
|
|
//接收到关机指令处理
|
|
|
-void PowerOff_Process(TrueOrFalse_Flag_Struct_t ReturnEnable)
|
|
|
+void PowerOff_Process(uint8_t PowerOffMode, TrueOrFalse_Flag_Struct_t ReturnEnable)
|
|
|
{
|
|
|
static FlagStatus SaveFlag = RESET;
|
|
|
static uint32_t PeriodTimeCnt = 0;
|
|
|
- static uint8_t Count = 0;
|
|
|
|
|
|
//关闭助力档位
|
|
|
MC_ControlCode.GearSt = MC_GearSt_OFF;
|
|
@@ -634,25 +634,52 @@ void PowerOff_Process(TrueOrFalse_Flag_Struct_t ReturnEnable)
|
|
|
Update_MC_ControlCode_Back();
|
|
|
LightDriver_Process(MC_ConfigParam2.MC_Light_Mode, MC_ConfigParam2.HeadLightVol, MC_ConfigParam2.TailLightVol, IsBreakTrig_Flag, MC_ControlCode.LightSwitch);
|
|
|
|
|
|
-
|
|
|
- #if 1 //存储到Flash,下次开机时从Flash取出转移到EEPROM
|
|
|
- if(SaveFlag == RESET)
|
|
|
+ if(PowerOffMode == 0) //被动关机
|
|
|
+ {
|
|
|
+ #if 1 //存储到Flash,下次开机时从Flash取出转移到EEPROM
|
|
|
+ if(SaveFlag == RESET)
|
|
|
+ {
|
|
|
+ MC_PowerOffBkp.ODO_Km = MC_RideLog.ODO_Km;
|
|
|
+ MC_PowerOffBkp.ODO_Time = MC_RideLog.ODO_Time;
|
|
|
+ MC_PowerOffBkp.Trip_Km = MC_RideLog.TRIP_Km;
|
|
|
+ MC_PowerOffBkp.Trip_Time = MC_RideLog.TRIP_Time;
|
|
|
+ MC_PowerOffBkp.Run_Time = MC_RunLog1.RunTime;
|
|
|
+ MC_PowerOffBkp.Log_ODO_Km = MC_RunLog1.ODO_Km;
|
|
|
+ MC_PowerOffBkp.Log_ODO_Time = MC_RunLog1.ODO_Time;
|
|
|
+ SaveDataToEEPROM_Flash(EEPROM_FLASH_ADDR_POWEROFF_BKP, (uint8_t*)&MC_PowerOffBkp.ODO_Km, 40);//写入掉电临时保存数据,写入前该区域需擦除为0xFF才能操作成功
|
|
|
+ SaveDataToEEPROM_Flash(EEPROM_FLASH_ADDR_POWEROFF_BKP_FLAG, (uint8_t*)"FLAG", 4); //掉电存储的数据标志更新
|
|
|
+ SaveFlag = SET;
|
|
|
+ }
|
|
|
+ #endif
|
|
|
+
|
|
|
+ //发送关机就绪信号
|
|
|
+ SendData(ID_MC_BC, MODE_REPORT, 0x1305, (uint8_t*)"READY");
|
|
|
+ }
|
|
|
+ else //主动关机
|
|
|
{
|
|
|
- MC_PowerOffBkp.ODO_Km = MC_RideLog.ODO_Km;
|
|
|
- MC_PowerOffBkp.ODO_Time = MC_RideLog.ODO_Time;
|
|
|
- MC_PowerOffBkp.Trip_Km = MC_RideLog.TRIP_Km;
|
|
|
- MC_PowerOffBkp.Trip_Time = MC_RideLog.TRIP_Time;
|
|
|
- MC_PowerOffBkp.Run_Time = MC_RunLog1.RunTime;
|
|
|
- MC_PowerOffBkp.Log_ODO_Km = MC_RunLog1.ODO_Km;
|
|
|
- MC_PowerOffBkp.Log_ODO_Time = MC_RunLog1.ODO_Time;
|
|
|
- SaveDataToEEPROM_Flash(EEPROM_FLASH_ADDR_POWEROFF_BKP, (uint8_t*)&MC_PowerOffBkp.ODO_Km, 40);//写入掉电临时保存数据,写入前该区域需擦除为0xFF才能操作成功
|
|
|
- SaveDataToEEPROM_Flash(EEPROM_FLASH_ADDR_POWEROFF_BKP_FLAG, (uint8_t*)"FLAG", 4); //掉电存储的数据标志更新
|
|
|
- SaveFlag = SET;
|
|
|
+ #if 1 //存储历史数据
|
|
|
+ //EEPROM更新历史记录
|
|
|
+ SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);
|
|
|
+ SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG2, sizeof(MC_RunLog2_Struct_t), (uint8_t*)&MC_RunLog2.MCU_FaultCnt);
|
|
|
+ SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RIDE_LOG, sizeof(MC_RideLog_Struct_t), (uint8_t*)&MC_RideLog.ODO_Km);
|
|
|
+ //Flash数据更新
|
|
|
+ if(MC_CalParam.Foc_Flag == RESET)
|
|
|
+ {
|
|
|
+ EEPROM_Flash_DataUpdate(&IsFlashSaveDataUpdate);
|
|
|
+ }
|
|
|
+ //故障日志存储更新处理
|
|
|
+ if(MC_CalParam.Foc_Flag == RESET)
|
|
|
+ {
|
|
|
+ ErrorLogSave_Process(&MC_ErrorLogSaveInfo, &IsErrorLogSaveInfoUpdateFlag);
|
|
|
+ RunLogSave_Process(&RunLogSaveIndex);
|
|
|
+ }
|
|
|
+ #endif
|
|
|
+
|
|
|
+ //发送关机指令
|
|
|
+ SendData(ID_MC_BC, MODE_REPORT, 0x1808, (uint8_t*)"SHUTDOWN");
|
|
|
+ HAL_Delay(1000);
|
|
|
+ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
|
|
|
}
|
|
|
- #endif
|
|
|
-
|
|
|
- //发送关机就绪信号
|
|
|
- SendData(ID_MC_BC, MODE_REPORT, 0x1305, (uint8_t*)"READY");
|
|
|
|
|
|
//等待关机
|
|
|
if(ReturnEnable == TRUE)
|
|
@@ -662,13 +689,11 @@ void PowerOff_Process(TrueOrFalse_Flag_Struct_t ReturnEnable)
|
|
|
else
|
|
|
{
|
|
|
PeriodTimeCnt = HAL_GetTick();
|
|
|
- Count = 0;
|
|
|
- while(Count < 10)
|
|
|
+ while(1)
|
|
|
{
|
|
|
if((HAL_GetTick() - PeriodTimeCnt) > 100)
|
|
|
{
|
|
|
PeriodTimeCnt = HAL_GetTick();
|
|
|
- Count++;
|
|
|
#if DEBUG
|
|
|
HAL_IWDG_Refresh(&hiwdg);
|
|
|
#endif
|