Bladeren bron

1、增加写入电池放电曲线指令;
2、FLASH读写函数中,将数组放到外面,减小堆栈压力。

CN\zhouxiong9 1 jaar geleden
bovenliggende
commit
15a1157814

+ 9 - 4
MDK-ARM/QD007A_CTL_APP.uvprojx

@@ -14,6 +14,8 @@
         <TargetCommonOption>
           <Device>STM32F103RB</Device>
           <Vendor>STMicroelectronics</Vendor>
+          <PackID>Keil.STM32F1xx_DFP.1.1.0</PackID>
+          <PackURL>http://www.keil.com/pack/</PackURL>
           <Cpu>IROM(0x08000000,0x20000) IRAM(0x20000000,0x5000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE</Cpu>
           <FlashUtilSpec></FlashUtilSpec>
           <StartupFile></StartupFile>
@@ -82,6 +84,8 @@
             <UserProg2Name>.\crc_gen_keil.bat</UserProg2Name>
             <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
             <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+            <nStopA1X>0</nStopA1X>
+            <nStopA2X>0</nStopA2X>
           </AfterMake>
           <SelectedForBatchBuild>0</SelectedForBatchBuild>
           <SVCSIdString></SVCSIdString>
@@ -125,7 +129,7 @@
             <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
             <RunToMain>1</RunToMain>
             <RestoreBreakpoints>1</RestoreBreakpoints>
-            <RestoreWatchpoints>0</RestoreWatchpoints>
+            <RestoreWatchpoints>1</RestoreWatchpoints>
             <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
             <RestoreFunctions>1</RestoreFunctions>
             <RestoreToolbox>1</RestoreToolbox>
@@ -143,10 +147,9 @@
             <RestoreToolbox>1</RestoreToolbox>
             <RestoreTracepoints>1</RestoreTracepoints>
             <RestoreSysVw>1</RestoreSysVw>
-            <UsePdscDebugDescription>1</UsePdscDebugDescription>
           </Target>
           <RunDebugAfterBuild>0</RunDebugAfterBuild>
-          <TargetSelection>6</TargetSelection>
+          <TargetSelection>12</TargetSelection>
           <SimDlls>
             <CpuDll></CpuDll>
             <CpuDllArguments></CpuDllArguments>
@@ -160,7 +163,7 @@
             <PeripheralDll></PeripheralDll>
             <PeripheralDllArguments></PeripheralDllArguments>
             <InitializationFile></InitializationFile>
-            <Driver>Segger\JL2CM3.dll</Driver>
+            <Driver>BIN\CMSIS_AGDI.dll</Driver>
           </TargetDlls>
         </DebugOption>
         <Utilities>
@@ -360,6 +363,8 @@
             <uSurpInc>0</uSurpInc>
             <uC99>1</uC99>
             <useXO>0</useXO>
+            <v6Lang>0</v6Lang>
+            <v6LangP>0</v6LangP>
             <VariousControls>
               <MiscControls></MiscControls>
               <Define>USE_HAL_DRIVER,STM32F103xB,PEGASI_48V</Define>

File diff suppressed because it is too large
+ 2621 - 2621
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 8 - 1
User/Src/can_process.c

@@ -740,7 +740,7 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 						  memcpy((uint8_t*)(AddrBegin), (uint8_t*)(Data + 8), DataLength);
 							SendData(ID_MC_TO_CDL, MODE_REPORT, 0xA903, (uint8_t*)"ACK");
 						}
-						//FLASH数据,该功能慎用,FLASH只能按页擦除,地址需要谨慎计算
+						//FLASH数据,该功能慎用,FLASH只能按页擦除,地址需要谨慎计算,首地址必须为页首
 						else if(AddrBegin  > 0x08003000)
 						{
 						  EEPROM_Flash_Erase(AddrBegin, AddrBegin + 0x3FF);//擦除首地址对应的页
@@ -841,6 +841,13 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 					}
 					break;
 				}
+				case 0x3ACC://电池放电曲线
+				{
+				  memcpy((uint8_t*)&BatteryCellInfo.DesignCap, Data, DataLength);
+					IsFlashSaveDataUpdate = TRUE;
+					SendData(ID_MC_TO_CDL, MODE_REPORT, 0xA903, (uint8_t*)"ACK");
+					break;
+				}
 				default:break;
 			}
 			break;

+ 15 - 13
User/Src/eeprom_flash.c

@@ -161,26 +161,27 @@ void EEPROM_Flash_Erase(uint32_t BeginAddress, uint32_t EndAddress)
 }
 
 //指定地址读取指定长度数据类型为8bit数据
+uint8_t Flash_ReadDataBuf[256];
 int8_t ReadDataFromEEPROM_Flash(uint32_t FlashAddress, uint8_t* Data, uint8_t Length) // Length必须为4的倍数
 {
-  uint32_t DataTemp32[8], CRC_Data, CRC_Result;
-	uint8_t CRC_Buf[256], i;
+  uint32_t DataTemp32, CRC_Data, CRC_Result;
+	uint8_t i;
 	
 	Length = Length >> 2;//按照32bit读取
   for(i=0; i<Length; i++)
 	{
-	  DataTemp32[i] = *(__IO uint32_t*)(FlashAddress + i * 4);
-		CRC_Buf[4 * i] = (uint8_t)((DataTemp32[i] >> 24) & 0xFF);
-		CRC_Buf[4 * i + 1] = (uint8_t)((DataTemp32[i] >> 16) & 0xFF);
-		CRC_Buf[4 * i + 2] = (uint8_t)((DataTemp32[i] >> 8) & 0xFF);
-		CRC_Buf[4 * i + 3] = (uint8_t)(DataTemp32[i] & 0xFF);
+	  DataTemp32 = *(__IO uint32_t*)(FlashAddress + i * 4);
+		Flash_ReadDataBuf[4 * i] = (uint8_t)((DataTemp32 >> 24) & 0xFF);
+		Flash_ReadDataBuf[4 * i + 1] = (uint8_t)((DataTemp32 >> 16) & 0xFF);
+		Flash_ReadDataBuf[4 * i + 2] = (uint8_t)((DataTemp32 >> 8) & 0xFF);
+		Flash_ReadDataBuf[4 * i + 3] = (uint8_t)(DataTemp32 & 0xFF);
 	}
 	CRC_Data = *(__IO uint32_t*)(FlashAddress + Length * 4);
-	CRC_Result = CRC32_Calculate(CRC_Buf, i * 4);
+	CRC_Result = CRC32_Calculate(Flash_ReadDataBuf, i * 4);
 	
 	if((CRC_Data - CRC_Result) == 0)
 	{
-    memcpy(Data, CRC_Buf, Length * 4);	
+    memcpy(Data, Flash_ReadDataBuf, Length * 4);	
 		return 0;
 	}
 	else
@@ -190,22 +191,23 @@ int8_t ReadDataFromEEPROM_Flash(uint32_t FlashAddress, uint8_t* Data, uint8_t Le
 }
 
 //指定地址写入指定长度数据类型为8bit数据,并写入crc校验码
+uint32_t Flash_WriteDataBuf[64];
 void SaveDataToEEPROM_Flash(uint32_t FlashAddress, uint8_t* Data, uint8_t Length) // Length必须为4的倍数
 {
-	uint32_t CRC_Result, DataBuf[256];
+	uint32_t CRC_Result;
 	uint8_t PakageNum, i;
 	
 	PakageNum = Length / 4;
 	//数据组包成32bit,最后一包存储CRC校验结果
 	for(i=0; i<PakageNum; i++)
   {
-	   DataBuf[i] = (Data[4 * i + 0] << 24) + (Data[4 * i + 1] << 16) + (Data[4 * i + 2] << 8) + Data[4 * i + 3];
+	   Flash_WriteDataBuf[i] = (Data[4 * i + 0] << 24) + (Data[4 * i + 1] << 16) + (Data[4 * i + 2] << 8) + Data[4 * i + 3];
 	}
 	CRC_Result = CRC32_Calculate(Data, Length);
-  DataBuf[PakageNum] = CRC_Result;
+  Flash_WriteDataBuf[PakageNum] = CRC_Result;
 	
 	//存储数据
-	FLASH_Write(FlashAddress, DataBuf, PakageNum + 1);
+	FLASH_Write(FlashAddress, Flash_WriteDataBuf, PakageNum + 1);
 }
 
 void EEPROM_Flash_Check(void)

Some files were not shown because too many files changed in this diff