Преглед изворни кода

1、指定地址定义波特率配置参数,Boot可读取该参数自适应波特率;
2、去掉非第一次开机不写入默认参数功能,避免Flash参数被擦除无法还原默认参数。

Dail пре 1 година
родитељ
комит
c0e7473371
7 измењених фајлова са 12 додато и 33 уклоњено
  1. 9 7
      Core/Src/can.c
  2. 1 4
      Core/Src/main.c
  3. 0 1
      User/Inc/eeprom_24c02.h
  4. 0 1
      User/Inc/var.h
  5. 1 18
      User/Src/eeprom_24c02.c
  6. 1 1
      User/Src/eeprom_flash.c
  7. 0 1
      User/Src/var.c

+ 9 - 7
Core/Src/can.c

@@ -50,6 +50,14 @@ CanTxMsgTypeDef CAN_TxMessaage;
 CanRxMsgTypeDef CAN_RxMessaage;
 CanRxMsgTypeDef CAN_RxMessaage1;
 
+#if defined BARD_250K
+const uint32_t Baudrate __attribute__((at(0x08018000))) = 0xAA55AA12; //低8位表示波特率分频系数,Bootloader取用
+#elif defined BARD_125K
+const uint32_t Baudrate __attribute__((at(0x08018000))) = 0xAA55AA24; //低8位表示波特率分频系数,Bootloader取用
+#else
+Error();
+#endif
+
 uint8_t CAN_RxBuf_PBU[255];
 CAN_Buf_TypeDef CAN_RxBuf_Struct_PBU = {0,255,0,0,0,0,CAN_RxBuf_PBU,0,FALSE};
 uint8_t CAN_RxBuf_BMS[255];
@@ -68,13 +76,7 @@ void MX_CAN_Init(void)
 {
 
   hcan.Instance = CAN1;
-	#if defined BARD_250K
-	hcan.Init.Prescaler = 18;
-	#elif defined BARD_125K
-	hcan.Init.Prescaler = 36;
-	#else
-	Error();
-	#endif
+	hcan.Init.Prescaler = (Baudrate & 0x000000FF);
   hcan.Init.Mode = CAN_MODE_NORMAL;
   hcan.Init.SJW = CAN_SJW_1TQ;
   hcan.Init.BS1 = CAN_BS1_6TQ;

+ 1 - 4
Core/Src/main.c

@@ -162,10 +162,7 @@ int main(void)
 	EEPROM_24C02_ClearData(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_FLAG, EEPROM_24C02_ADDR_END, 0xFF);
 	EEPROM_Flash_Erase(EEPROM_FLASH_BEGIN_ADDRESS, EEPROM_FLASH_END_ADDRESS);
 	#endif
-	
-	//根据EEPROM里存储的开机次数确定是否首次开机
-	IsFirstPowerOnFlag = CheckFactoryModeFromEEPROM(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1);
-	
+		
 	//EEPROM_Flash初始化	
 	EEPROM_Flash_Check();
 	

+ 0 - 1
User/Inc/eeprom_24c02.h

@@ -44,6 +44,5 @@ int8_t SavePowerOffBakData(I2C_Handle_Struct_t* I2C_Handle, TrueOrFalse_Flag_Str
 void EEPROM_24C02_ParamReset(I2C_Handle_Struct_t* I2C_Handle);
 void EEPROM_24C02_LogReset(I2C_Handle_Struct_t* I2C_Handle);
 int8_t RunLogSave_Process(uint8_t* RunLogIndex);
-TrueOrFalse_Flag_Struct_t CheckFactoryModeFromEEPROM(I2C_Handle_Struct_t* I2C_Handle, uint8_t Addr);
 
 #endif

+ 0 - 1
User/Inc/var.h

@@ -582,7 +582,6 @@ extern uint16_t SpeedRatio;
 extern uint16_t HardwareVersion_AD;
 extern TrueOrFalse_Flag_Struct_t VersionIdentifyFinishedFlag;
 extern TrueOrFalse_Flag_Struct_t PowerDown_SaveFlag;
-extern TrueOrFalse_Flag_Struct_t IsFirstPowerOnFlag;
 extern Bike_RatioCal_Struct_t Bike_RatioCalParam;
 /**************************È«¾Ö±äÁ¿ÉùÃ÷End***************************/
 

+ 1 - 18
User/Src/eeprom_24c02.c

@@ -325,14 +325,10 @@ int8_t EEPROM_24C02_Check(I2C_Handle_Struct_t* I2C_Handle)
 	{
 		return(CopyDataFromEEpprom_24C02(I2C_Handle));
 	}
-	else if(IsFirstPowerOnFlag == TRUE) // 数据无效且开机次数为0时,写入默认参数
+	else // 数据无效,写入默认参数
 	{
 		return(CopyDefaultDataToEEpprom_24C02(I2C_Handle));
 	}
-	else
-	{
-	  return ACK_FAIL;
-	}
 }
 
 //清除指定区间段有效数据
@@ -468,16 +464,3 @@ int8_t RunLogSave_Process(uint8_t* RunLogIndex)
 	return 0;
 }
 
-//根据历史信息中开机次数判断是否进行第一次开机
-TrueOrFalse_Flag_Struct_t CheckFactoryModeFromEEPROM(I2C_Handle_Struct_t* I2C_Handle, uint8_t Addr)
-{
-  uint8_t Temp_8[4] = {0}; 
-	
-	//读取存储标志并计算校验码
-	EEPROM_24C02_ReadOneByte(I2C_Handle, Addr, Temp_8);
-	EEPROM_24C02_ReadOneByte(I2C_Handle, Addr + 1, (Temp_8 + 1));
-	EEPROM_24C02_ReadOneByte(I2C_Handle, Addr + 2, (Temp_8 + 2));
-	EEPROM_24C02_ReadOneByte(I2C_Handle, Addr + 3, (Temp_8 + 3));
-	
-	return((Temp_8[0] & Temp_8[1] & Temp_8[2] & Temp_8[3] == 0xFF) ? TRUE : FALSE);
-}

+ 1 - 1
User/Src/eeprom_flash.c

@@ -218,7 +218,7 @@ void EEPROM_Flash_Check(void)
 	{
 	  CopyDataFromEEPROM_Flash();
 	}
-	else if(IsFirstPowerOnFlag == TRUE) //数据无效且开机次数为0时,写入默认参数
+	else //数据无效,写入默认参数
 	{
 		CopyDataToEEPROM_Flash();
 	}

+ 0 - 1
User/Src/var.c

@@ -50,7 +50,6 @@ uint16_t SpeedRatio;                                      //
 uint16_t HardwareVersion_AD=0;                            //硬件识别AD
 TrueOrFalse_Flag_Struct_t VersionIdentifyFinishedFlag = FALSE; //硬件识别结束标识
 TrueOrFalse_Flag_Struct_t PowerDown_SaveFlag = FALSE;          //断电标识
-TrueOrFalse_Flag_Struct_t IsFirstPowerOnFlag = FALSE;          //首次开机标识
 Bike_RatioCal_Struct_t Bike_RatioCalParam = {0,0,0,100,10,0,0};//传动比计算
 
 //BMS默认设计信息