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

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

Dail пре 1 година
родитељ
комит
9e47730e4c

+ 9 - 8
Core/Src/can.c

@@ -48,6 +48,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];
@@ -64,15 +72,8 @@ CAN_HandleTypeDef hcan;
 /* CAN init function */
 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();//第一次运行 113ms,正常运行 1ms
 	

+ 1 - 1
MDK-ARM/QD007A_CTL_APP.uvprojx

@@ -362,7 +362,7 @@
             <useXO>0</useXO>
             <VariousControls>
               <MiscControls></MiscControls>
-              <Define>USE_HAL_DRIVER,STM32F103xB,PEGASI_36V,BARD_125K</Define>
+              <Define>USE_HAL_DRIVER,STM32F103xB,PEGASI_36V,BARD_250K</Define>
               <Undefine></Undefine>
               <IncludePath>../Core/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include;..\User\Inc;..\SEGGER_RTT\Inc;..\SelfTestUser\Inc</IncludePath>
             </VariousControls>

Разлика између датотеке није приказан због своје велике величине
+ 2554 - 2554
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


BIN
MDK-ARM/bin/MC_PSX0XX(250K)-TC011000-MS0000-V7.2.3.0.0_20231118.bin


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 0 - 1
User/Inc/eeprom_24c02.h

@@ -45,6 +45,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

+ 1 - 1
User/Inc/var.h

@@ -575,8 +575,8 @@ 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***************************/
 
 /**************************全局函数声明Begin*************************/

+ 1 - 19
User/Src/eeprom_24c02.c

@@ -335,14 +335,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;
-	}
 }
 
 //清除指定区间段有效数据
@@ -478,17 +474,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

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

+ 0 - 1
User/Src/var.c

@@ -47,7 +47,6 @@ uint16_t SpeedRatio;
 uint16_t HardwareVersion_AD=0;
 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默认设计信息

Неке датотеке нису приказане због велике количине промена