Skip to content

Commit 0366e8a

Browse files
author
fpr
committed
Replaced hard coded EEPROM base address with generic code
Signed-off-by: fpr <fabien.perroquin@wi6labs.com>
1 parent 8ed6a0a commit 0366e8a

File tree

1 file changed

+44
-17
lines changed

1 file changed

+44
-17
lines changed

cores/arduino/stm32/stm32_eeprom.c

Lines changed: 44 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -68,37 +68,64 @@
6868
/** @addtogroup STM32F4xx_System_Private_Defines
6969
* @{
7070
*/
71-
// We use the last page of the flash to store data (to prevent code overwrite).
71+
// We use the last page of the flash to store data (to prevent code overwritten).
7272
#ifdef STM32F0xx
73-
// Flash base address (Bank2, page 256)
74-
#define FLASH_BASE_ADDRESS 0x0803F800
73+
#define FLASH_BASE_ADDRESS ((uint32_t)(FLASH_BANK1_END + 1) - FLASH_PAGE_SIZE)
7574
#elif defined (STM32F1xx)
76-
#define FLASH_BASE_ADDRESS ((uint32_t)((FLASH_BANK1_END + 1) - FLASH_PAGE_SIZE)) //0x0801FC00
77-
#define FLASH_PAGE_NUMBER 127
75+
#ifdef FLASH_BANK2_END
76+
#define FLASH_BASE_ADDRESS ((uint32_t)((FLASH_BANK2_END + 1) - FLASH_PAGE_SIZE))
77+
#else
78+
#define FLASH_BASE_ADDRESS ((uint32_t)((FLASH_BANK1_END + 1) - FLASH_PAGE_SIZE))
79+
#endif // FLASH_BANK2_END
7880
#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
81+
#define FLASH_BASE_ADDRESS ((uint32_t)(FLASH_END + 1) - FLASH_PAGE_SIZE)
82+
#define FLASH_DATA_SECTOR ((uint32_t)(FLASH_SECTOR_TOTAL - 1))
8283
#elif defined (STM32F3xx)
83-
#define FLASH_BASE_ADDRESS ((uint32_t)((0x0807FFFF + 1) - FLASH_PAGE_SIZE)) //0x0807F800
84+
static inline uint32_t get_flash_end(void) {
85+
uint32_t size;
86+
87+
switch((*((uint16_t *)FLASH_SIZE_DATA_REGISTER))) {
88+
case 0x200U:
89+
size = 0x0807FFFFU;
90+
break;
91+
case 0x100U:
92+
size = 0x0803FFFFU;
93+
break;
94+
case 0x80U:
95+
size = 0x0801FFFFU;
96+
break;
97+
case 0x40U:
98+
size = 0x0800FFFFU;
99+
break;
100+
case 0x20U:
101+
size = 0x08007FFFU;
102+
break;
103+
default:
104+
size = 0x08003FFFU;
105+
break;
106+
}
107+
108+
return size;
109+
}
110+
#define FLASH_END_ADDR get_flash_end()
111+
#define FLASH_BASE_ADDRESS ((uint32_t)((FLASH_END_ADDR + 1) - FLASH_PAGE_SIZE))
84112
#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
113+
#define FLASH_BASE_ADDRESS ((uint32_t)((FLASH_END + 1) - FLASH_PAGE_SIZE))
114+
#define FLASH_DATA_SECTOR ((uint32_t)(FLASH_SECTOR_TOTAL - 1))
88115
#elif defined (STM32F7xx)
89-
#define FLASH_BASE_ADDRESS ((uint32_t)(0x08018000))
90-
#define FLASH_DATA_SECTOR 3
116+
#define FLASH_BASE_ADDRESS ((uint32_t)((FLASH_END + 1) - FLASH_PAGE_SIZE))
117+
#define FLASH_DATA_SECTOR ((uint32_t)(FLASH_SECTOR_TOTAL - 1))
91118
#elif defined (STM32L0xx)
92-
#define FLASH_BASE_ADDRESS ((uint32_t)(DATA_EEPROM_BASE)) /* 0x08080000 */
119+
#define FLASH_BASE_ADDRESS ((uint32_t)(DATA_EEPROM_BASE))
93120
#elif defined (STM32L4xx)
94121
#ifndef FLASH_BANK_2
95122
#define FLASH_BANK_NUMBER FLASH_BANK_1
96123
#else
97124
#define FLASH_BANK_NUMBER FLASH_BANK_2
98125
#endif // FLASH_BANK_2
99126
// 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)))
127+
#define FLASH_PAGE_NUMBER ((uint32_t)((FLASH_SIZE / FLASH_PAGE_SIZE) - 1))
128+
#define FLASH_BASE_ADDRESS ((uint32_t)(FLASH_BASE + (FLASH_PAGE_NUMBER * FLASH_PAGE_SIZE)))
102129
#endif
103130
/**
104131
* @}

0 commit comments

Comments
 (0)