Procházet zdrojové kódy

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

Dail před 1 rokem
rodič
revize
9bbaeb629b
5 změnil soubory, kde provedl 15 přidání a 10 odebrání
  1. 2 2
      User/Inc/eeprom_flash.h
  2. 2 2
      User/Inc/log_save.h
  3. 3 2
      User/Inc/var.h
  4. 7 4
      User/Src/app_loader.c
  5. 1 0
      User/Src/var.c

+ 2 - 2
User/Inc/eeprom_flash.h

@@ -20,8 +20,8 @@
 #define    EEPROM_FLASH_ADDR_BATTERY_PARMAS      EEPROM_FLASH_BEGIN_ADDRESS + (uint32_t)156         //电池放电曲线参数 204bytes + 4bytes  
 #define    EEPROM_FLASH_ADDR_TAG_INFO            EEPROM_FLASH_BEGIN_ADDRESS + (uint32_t)364         //产品标签信息 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

+ 3 - 2
User/Inc/var.h

@@ -11,10 +11,11 @@
 typedef enum
 {
 	NoName = 0x00,
-  STM32F103RBT6,
+    STM32F103RBT6,
 	APM32F103RBT6,
 	HK32F103RBT6,
-	GD32F103RBT6
+	GD32F103RBT6,
+	APM32F103RCT7
 }MCU_Manufacturter_Struct_t;
 
 typedef enum

+ 7 - 4
User/Src/app_loader.c

@@ -31,17 +31,20 @@ void IAP_Init(void)
 MCU_Manufacturter_Struct_t IdentifyMCUManufacturer( void )
 {
 	MCU_Manufacturter_Struct_t manufacturer = STM32F103RBT6;
-  if( (*(uint8_t *)0xE00FFFD0 == 0x05)&&(*(uint8_t *)0xE00FFFE0 == 0x9B)&&(*(uint8_t *)0xE00FFFE4 == 0x52)&&(*(uint8_t *)0xE00FFFE8 == 0x05) ) //2̨ÑéÖ¤ÕýÈ·
+    if( (*(uint8_t *)0xE00FFFD0 == 0x05)&&(*(uint8_t *)0xE00FFFE0 == 0x9B)&&(*(uint8_t *)0xE00FFFE4 == 0x52)&&(*(uint8_t *)0xE00FFFE8 == 0x05) ) //2̨ÑéÖ¤ÕýÈ·
 	{
-    manufacturer = HK32F103RBT6;
+       manufacturer = HK32F103RBT6;
 	}	
 	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̨ÑéÖ¤ÕýÈ·
 	{
-    manufacturer = STM32F103RBT6;
+        manufacturer = STM32F103RBT6;
 	}
 	else if( (*(uint32_t *)0xE0042000) == 0x13030410 )  //2̨ÑéÖ¤ÕýÈ·
 	{

+ 1 - 0
User/Src/var.c

@@ -694,6 +694,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';