@@ -52,10 +52,15 @@ extern "C" {
52
52
#endif /* !FLASH_DATA_SECTOR */
53
53
#endif /* FLASH_SECTOR_TOTAL || FLASH_SECTOR_NB */
54
54
55
- /* Be able to change FLASH_PAGE_NUMBER to use if relevant */
56
- #if !defined(FLASH_PAGE_NUMBER ) && defined(FLASH_PAGE_SIZE )
57
- #define FLASH_PAGE_NUMBER ((uint32_t)(((LL_GetFlashSize() * 1024) / FLASH_PAGE_SIZE) - 1))
58
- #endif /* !FLASH_PAGE_NUMBER */
55
+ /* Be able to change EEPROM_FLASH_PAGE_NUMBER to use if relevant */
56
+ #if !defined(EEPROM_FLASH_PAGE_NUMBER ) && defined(FLASH_PAGE_SIZE )
57
+ #if defined(STM32WB0x )
58
+ /* STM32WB0x define the FLASH_PAGE_NUMBER */
59
+ #define EEPROM_FLASH_PAGE_NUMBER (FLASH_PAGE_NUMBER - 1)
60
+ #else
61
+ #define EEPROM_FLASH_PAGE_NUMBER ((uint32_t)(((LL_GetFlashSize() * 1024) / FLASH_PAGE_SIZE) - 1))
62
+ #endif
63
+ #endif /* !EEPROM_FLASH_PAGE_NUMBER */
59
64
60
65
/* Be able to change FLASH_END to use */
61
66
#if !defined(FLASH_END )
@@ -73,9 +78,12 @@ extern "C" {
73
78
#else
74
79
#define FLASH_END ((uint32_t)(FLASH_BASE + (FLASH_DATA_SECTOR * FLASH_SECTOR_SIZE) + FLASH_SECTOR_SIZE - 1))
75
80
#endif /* FLASH_BANK_2 */
76
- #elif defined(FLASH_BASE ) && defined(FLASH_PAGE_NUMBER ) && defined (FLASH_PAGE_SIZE )
77
- /* If FLASH_PAGE_NUMBER is defined by user, this is not really end of the flash */
78
- #define FLASH_END ((uint32_t)(FLASH_BASE + (((FLASH_PAGE_NUMBER +1) * FLASH_PAGE_SIZE))-1))
81
+ #elif defined(FLASH_START_ADDR )
82
+ /* If EEPROM_FLASH_PAGE_NUMBER is defined by user, this is not really end of the flash */
83
+ #define FLASH_END ((uint32_t)(FLASH_START_ADDR + (((EEPROM_FLASH_PAGE_NUMBER +1) * FLASH_PAGE_SIZE))-1))
84
+ #elif defined(FLASH_BASE ) && defined(EEPROM_FLASH_PAGE_NUMBER ) && defined (FLASH_PAGE_SIZE )
85
+ /* If EEPROM_FLASH_PAGE_NUMBER is defined by user, this is not really end of the flash */
86
+ #define FLASH_END ((uint32_t)(FLASH_BASE + (((EEPROM_FLASH_PAGE_NUMBER +1) * FLASH_PAGE_SIZE))-1))
79
87
#endif
80
88
#ifndef FLASH_END
81
89
#error "FLASH_END could not be defined"
@@ -235,27 +243,32 @@ void eeprom_buffer_flush(void)
235
243
uint32_t pageError = 0 ;
236
244
#if defined(FLASH_TYPEPROGRAM_QUADWORD )
237
245
uint64_t data [2 ] = {0x0000 };
238
- #else
246
+ #elif defined( FLASH_TYPEPROGRAM_DOUBLEWORD )
239
247
#if defined(STM32U3xx )
240
248
uint32_t dataAddr = 0 ;
241
249
#else
250
+ /* Double word*/
242
251
uint64_t data = 0 ;
243
- #endif
252
+ #endif /* STM32U3xx */
253
+ #elif defined(FLASH_TYPEPROGRAM_WORD )
254
+ uint32_t data = 0 ;
244
255
#endif
245
256
246
257
/* ERASING page */
247
258
EraseInitStruct .TypeErase = FLASH_TYPEERASE_PAGES ;
248
259
#if defined(FLASH_BANK_NUMBER )
249
260
EraseInitStruct .Banks = FLASH_BANK_NUMBER ;
250
261
#endif /* FLASH_BANK_NUMBER */
251
- #if defined (FLASH_PAGE_NUMBER ) && defined(FLASH_SIZE )
252
- EraseInitStruct .Page = FLASH_PAGE_NUMBER ;
262
+ #if defined (EEPROM_FLASH_PAGE_NUMBER ) && defined(FLASH_SIZE )
263
+ EraseInitStruct .Page = EEPROM_FLASH_PAGE_NUMBER ;
253
264
#else
254
265
EraseInitStruct .PageAddress = FLASH_BASE_ADDRESS ;
255
266
#endif
256
267
EraseInitStruct .NbPages = 1 ;
257
-
258
- if (HAL_FLASH_Unlock () == HAL_OK ) {
268
+ #if !defined(PROT_LEVEL_NONE )
269
+ if (HAL_FLASH_Unlock () == HAL_OK )
270
+ #endif
271
+ {
259
272
__HAL_FLASH_CLEAR_FLAG (FLASH_FLAG_ALL_ERRORS );
260
273
if (HAL_FLASHEx_Erase (& EraseInitStruct , & pageError ) == HAL_OK ) {
261
274
while (address <= address_end ) {
@@ -265,7 +278,8 @@ void eeprom_buffer_flush(void)
265
278
if (HAL_FLASH_Program (FLASH_TYPEPROGRAM_QUADWORD , address , (uint32_t )data ) == HAL_OK ) {
266
279
address += 16 ;
267
280
offset += 16 ;
268
- #else
281
+ #elif defined(FLASH_TYPEPROGRAM_DOUBLEWORD)
282
+ /* 64 bits */
269
283
#if defined(STM32U3xx )
270
284
dataAddr = (uint32_t )((uint8_t * )eeprom_buffer + offset );
271
285
@@ -277,13 +291,21 @@ void eeprom_buffer_flush(void)
277
291
#endif
278
292
address += 8 ;
279
293
offset += 8 ;
294
+ #elif defined(FLASH_TYPEPROGRAM_WORD)
295
+ /* 32 bits */
296
+ memcpy (& data , eeprom_buffer + offset , sizeof (uint32_t ));
297
+ if (HAL_FLASH_Program (FLASH_TYPEPROGRAM_WORD , address , (uint32_t )data ) == HAL_OK ) {
298
+ address += 4 ;
299
+ offset += 4 ;
280
300
#endif
281
301
} else {
282
302
address = address_end + 1 ;
283
303
}
284
304
}
285
305
}
306
+ #if !defined(PROT_LEVEL_NONE )
286
307
HAL_FLASH_Lock ();
308
+ #endif /* FLASH_KEY1 || FLASH_PEKEY1 */
287
309
}
288
310
#else /* FLASH_TYPEERASE_SECTORS */
289
311
uint32_t SectorError = 0 ;
@@ -339,8 +361,7 @@ void eeprom_buffer_flush(void)
339
361
HAL_FLASH_Lock ();
340
362
#endif
341
363
#if defined(ICACHE ) && defined (HAL_ICACHE_MODULE_ENABLED ) && !defined(HAL_ICACHE_MODULE_DISABLED )
342
- if (icache_enabled )
343
- {
364
+ if (icache_enabled ) {
344
365
/* Re-enable instruction cache */
345
366
if (HAL_ICACHE_Enable () != HAL_OK ) {
346
367
Error_Handler ();
0 commit comments