Skip to content

Commit 2faafda

Browse files
authored
Merge pull request #64 from fprwi6labs/EEPROM_patch
Replaced hard coded EEPROM base address with generic code
2 parents 8ed6a0a + dad8282 commit 2faafda

File tree

1 file changed

+41
-22
lines changed

1 file changed

+41
-22
lines changed

Diff for: cores/arduino/stm32/stm32_eeprom.c

+41-22
Original file line numberDiff line numberDiff line change
@@ -68,37 +68,56 @@
6868
/** @addtogroup STM32F4xx_System_Private_Defines
6969
* @{
7070
*/
71-
// We use the last page of the flash to store data (to prevent code overwrite).
72-
#ifdef STM32F0xx
73-
// Flash base address (Bank2, page 256)
74-
#define FLASH_BASE_ADDRESS 0x0803F800
75-
#elif defined (STM32F1xx)
76-
#define FLASH_BASE_ADDRESS ((uint32_t)((FLASH_BANK1_END + 1) - FLASH_PAGE_SIZE)) //0x0801FC00
77-
#define FLASH_PAGE_NUMBER 127
78-
#elif defined (STM32F2xx)
79-
/*start address:from sector2 : after 16KByte of used Flash memory */
80-
#define FLASH_BASE_ADDRESS ((uint32_t)(0x08008000))
81-
#define FLASH_DATA_SECTOR FLASH_SECTOR_2
71+
// We use the last page of the flash to store data (to prevent code overwritten).
72+
#if defined (STM32F0xx) || defined (STM32F1xx)
73+
#ifdef FLASH_BANK2_END
74+
#define FLASH_BASE_ADDRESS ((uint32_t)((FLASH_BANK2_END + 1) - FLASH_PAGE_SIZE))
75+
#else
76+
#define FLASH_BASE_ADDRESS ((uint32_t)((FLASH_BANK1_END + 1) - FLASH_PAGE_SIZE))
77+
#endif // FLASH_BANK2_END
78+
#elif defined (STM32F2xx) || defined (STM32F4xx) || defined (STM32F7xx)
79+
#define FLASH_BASE_ADDRESS ((uint32_t)(FLASH_END + 1) - FLASH_PAGE_SIZE)
80+
#define FLASH_DATA_SECTOR ((uint32_t)(FLASH_SECTOR_TOTAL - 1))
8281
#elif defined (STM32F3xx)
83-
#define FLASH_BASE_ADDRESS ((uint32_t)((0x0807FFFF + 1) - FLASH_PAGE_SIZE)) //0x0807F800
84-
#elif defined (STM32F4xx)
85-
// Use the last 16 page of the second bank (sector 15)
86-
#define FLASH_BASE_ADDRESS ((uint32_t)(0x0810C000))
87-
#define FLASH_DATA_SECTOR 15
88-
#elif defined (STM32F7xx)
89-
#define FLASH_BASE_ADDRESS ((uint32_t)(0x08018000))
90-
#define FLASH_DATA_SECTOR 3
82+
static inline uint32_t get_flash_end(void) {
83+
uint32_t size;
84+
85+
switch((*((uint16_t *)FLASH_SIZE_DATA_REGISTER))) {
86+
case 0x200U:
87+
size = 0x0807FFFFU;
88+
break;
89+
case 0x100U:
90+
size = 0x0803FFFFU;
91+
break;
92+
case 0x80U:
93+
size = 0x0801FFFFU;
94+
break;
95+
case 0x40U:
96+
size = 0x0800FFFFU;
97+
break;
98+
case 0x20U:
99+
size = 0x08007FFFU;
100+
break;
101+
default:
102+
size = 0x08003FFFU;
103+
break;
104+
}
105+
106+
return size;
107+
}
108+
#define FLASH_END_ADDR get_flash_end()
109+
#define FLASH_BASE_ADDRESS ((uint32_t)((FLASH_END_ADDR + 1) - FLASH_PAGE_SIZE))
91110
#elif defined (STM32L0xx)
92-
#define FLASH_BASE_ADDRESS ((uint32_t)(DATA_EEPROM_BASE)) /* 0x08080000 */
111+
#define FLASH_BASE_ADDRESS ((uint32_t)(DATA_EEPROM_BASE))
93112
#elif defined (STM32L4xx)
94113
#ifndef FLASH_BANK_2
95114
#define FLASH_BANK_NUMBER FLASH_BANK_1
96115
#else
97116
#define FLASH_BANK_NUMBER FLASH_BANK_2
98117
#endif // FLASH_BANK_2
99118
// Flash base address
100-
#define FLASH_PAGE_NUMBER ((uint32_t)((FLASH_SIZE/FLASH_PAGE_SIZE) -1))
101-
#define FLASH_BASE_ADDRESS ((uint32_t)(0x08000000 + (FLASH_PAGE_NUMBER*FLASH_PAGE_SIZE)))
119+
#define FLASH_PAGE_NUMBER ((uint32_t)((FLASH_SIZE / FLASH_PAGE_SIZE) - 1))
120+
#define FLASH_BASE_ADDRESS ((uint32_t)(FLASH_BASE + (FLASH_PAGE_NUMBER * FLASH_PAGE_SIZE)))
102121
#endif
103122
/**
104123
* @}

0 commit comments

Comments
 (0)