|
68 | 68 | /** @addtogroup STM32F4xx_System_Private_Defines
|
69 | 69 | * @{
|
70 | 70 | */
|
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)) |
82 | 81 | #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)) |
91 | 110 | #elif defined (STM32L0xx)
|
92 |
| -#define FLASH_BASE_ADDRESS ((uint32_t)(DATA_EEPROM_BASE)) /* 0x08080000 */ |
| 111 | +#define FLASH_BASE_ADDRESS ((uint32_t)(DATA_EEPROM_BASE)) |
93 | 112 | #elif defined (STM32L4xx)
|
94 | 113 | #ifndef FLASH_BANK_2
|
95 | 114 | #define FLASH_BANK_NUMBER FLASH_BANK_1
|
96 | 115 | #else
|
97 | 116 | #define FLASH_BANK_NUMBER FLASH_BANK_2
|
98 | 117 | #endif // FLASH_BANK_2
|
99 | 118 | // 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))) |
102 | 121 | #endif
|
103 | 122 | /**
|
104 | 123 | * @}
|
|
0 commit comments