Prechádzať zdrojové kódy

APM32F103RCT7的页大小为2K,而故障日志和电机参数放在最后2K,导致存储故障日志时会把电机参数擦除,写入参数时也会把故障日志擦除。修改如下:
1、电机参数地址保持不变;
2、故障日志地址由0x0801F800改为0x0801F000;
3、临时保存数据地址由0x0801F400改为0x0801E800;
4、增加读取MCU容量大小的功能。

Dail 1 rok pred
rodič
commit
ecfb40a7f6

BIN
Flash分区说明.vsd


+ 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_250K</Define>
+              <Define>USE_HAL_DRIVER,STM32F103xB,PEGASI_36V,BARD_125K</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>

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 2437 - 2437
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 2 - 2
User/Inc/eeprom_flash.h

@@ -23,8 +23,8 @@
 #define    EEPROM_FLASH_ADDR_BATTERY_PARMAS      EEPROM_FLASH_BEGIN_ADDRESS + (uint32_t)248         //电池放电曲线参数 204bytes + 4bytes
 #define    EEPROM_FLASH_ADDR_TAG_INFO            EEPROM_FLASH_BEGIN_ADDRESS + (uint32_t)456         //产品标签信息 32bytes + 4bytes
 
-#define    EEPROM_FLASH_ADDR_TEMP_BEGIN_ADDRESS    0x0801F400
-#define    EEPROM_FLASH_ADDR_TEMP_END_ADDRESS      0x0801F7FF
+#define    EEPROM_FLASH_ADDR_TEMP_BEGIN_ADDRESS    0x0801E800
+#define    EEPROM_FLASH_ADDR_TEMP_END_ADDRESS      0x0801EFFF
 
 #define    EEPROM_FLASH_ADDR_POWEROFF_BKP_FLAG   EEPROM_FLASH_ADDR_TEMP_BEGIN_ADDRESS               //掉电保存的关键数据标志 4bytes + 4bytes
 #define    EEPROM_FLASH_ADDR_POWEROFF_BKP        EEPROM_FLASH_ADDR_TEMP_BEGIN_ADDRESS + (uint32_t)8 //掉电保存的关键数据 40bytes + 4bytes

+ 2 - 2
User/Inc/log_save.h

@@ -5,8 +5,8 @@
 #include "motor_control.h"
 #include "eeprom_flash.h"
 
-#define LOG_ADDRESS_BEGIN               0x0801F800
-#define LOG_ADDRESS_END                 0x0801FBFF
+#define LOG_ADDRESS_BEGIN               0x0801F000
+#define LOG_ADDRESS_END                 0x0801F3FF
 
 //故障日志记录信息 64 bytes,1K空间可以保存最近16条故障记录
 typedef struct

+ 2 - 1
User/Inc/var.h

@@ -14,7 +14,8 @@ typedef enum
   STM32F103RBT6,
 	APM32F103RBT6,
 	HK32F103RBT6,
-	GD32F103RBT6
+	GD32F103RBT6,
+	APM32F103RCT7
 }MCU_Manufacturter_Struct_t;
 
 typedef enum

+ 4 - 1
User/Src/app_loader.c

@@ -37,7 +37,10 @@ MCU_Manufacturter_Struct_t IdentifyMCUManufacturer( void )
 	}	
 	else if( (*(uint8_t *)0xE00FFFD0 == 0x04)&&(*(uint8_t *)0xE00FFFE0 == 0xC3)&&(*(uint8_t *)0xE00FFFE4 == 0xB4)&&(*(uint8_t *)0xE00FFFE8 == 0x0B) ) //4̨ÑéÖ¤ÕýÈ·
 	{
-		manufacturer = APM32F103RBT6;
+		if(*(uint16_t*)(0x1FFFF7E0) == 0x0080)
+		  manufacturer = APM32F103RBT6;
+		else if(*(uint16_t*)(0x1FFFF7E0) == 0x0100)
+			manufacturer = APM32F103RCT7;
 	}	
 	else if( (*(uint8_t *)0xE00FFFD0 == 0x00)&&(*(uint8_t *)0xE00FFFE0 == 0x10)&&(*(uint8_t *)0xE00FFFE4 == 0x04)&&(*(uint8_t *)0xE00FFFE8 == 0x0A) ) //4̨ÑéÖ¤ÕýÈ·
 	{

+ 1 - 0
User/Src/var.c

@@ -723,6 +723,7 @@ void Var_Init(void)
 	if(MCUManufacturer == NoName) MC_VerInfo.HW_Version[10] = '0';
 	else if(MCUManufacturer == STM32F103RBT6) MC_VerInfo.HW_Version[10] = '1';
 	else if(MCUManufacturer == APM32F103RBT6) MC_VerInfo.HW_Version[10] = '2';
+	else if(MCUManufacturer == APM32F103RCT7) MC_VerInfo.HW_Version[10] = '2';
 	else if(MCUManufacturer == HK32F103RBT6) MC_VerInfo.HW_Version[10] = '3';
 	else if(MCUManufacturer == GD32F103RBT6) MC_VerInfo.HW_Version[10] = '4';
 	else MC_VerInfo.HW_Version[10] = '0';

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov