@@ -52,10 +52,15 @@ extern "C" {
5252#endif /* !FLASH_DATA_SECTOR */
5353#endif /* FLASH_SECTOR_TOTAL || FLASH_SECTOR_NB */
5454
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 */
5964
6065/* Be able to change FLASH_END to use */
6166#if !defined(FLASH_END )
@@ -73,9 +78,12 @@ extern "C" {
7378#else
7479#define FLASH_END ((uint32_t)(FLASH_BASE + (FLASH_DATA_SECTOR * FLASH_SECTOR_SIZE) + FLASH_SECTOR_SIZE - 1))
7580#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))
7987#endif
8088#ifndef FLASH_END
8189#error "FLASH_END could not be defined"
@@ -235,27 +243,32 @@ void eeprom_buffer_flush(void)
235243 uint32_t pageError = 0 ;
236244#if defined(FLASH_TYPEPROGRAM_QUADWORD )
237245 uint64_t data [2 ] = {0x0000 };
238- #else
246+ #elif defined( FLASH_TYPEPROGRAM_DOUBLEWORD )
239247#if defined(STM32U3xx )
240248 uint32_t dataAddr = 0 ;
241249#else
250+ /* Double word*/
242251 uint64_t data = 0 ;
243- #endif
252+ #endif /* STM32U3xx */
253+ #elif defined(FLASH_TYPEPROGRAM_WORD )
254+ uint32_t data = 0 ;
244255#endif
245256
246257 /* ERASING page */
247258 EraseInitStruct .TypeErase = FLASH_TYPEERASE_PAGES ;
248259#if defined(FLASH_BANK_NUMBER )
249260 EraseInitStruct .Banks = FLASH_BANK_NUMBER ;
250261#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 ;
253264#else
254265 EraseInitStruct .PageAddress = FLASH_BASE_ADDRESS ;
255266#endif
256267 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+ {
259272 __HAL_FLASH_CLEAR_FLAG (FLASH_FLAG_ALL_ERRORS );
260273 if (HAL_FLASHEx_Erase (& EraseInitStruct , & pageError ) == HAL_OK ) {
261274 while (address <= address_end ) {
@@ -265,7 +278,8 @@ void eeprom_buffer_flush(void)
265278 if (HAL_FLASH_Program (FLASH_TYPEPROGRAM_QUADWORD , address , (uint32_t )data ) == HAL_OK ) {
266279 address += 16 ;
267280 offset += 16 ;
268- #else
281+ #elif defined(FLASH_TYPEPROGRAM_DOUBLEWORD)
282+ /* 64 bits */
269283#if defined(STM32U3xx )
270284 dataAddr = (uint32_t )((uint8_t * )eeprom_buffer + offset );
271285
@@ -277,13 +291,21 @@ void eeprom_buffer_flush(void)
277291#endif
278292 address += 8 ;
279293 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 ;
280300#endif
281301 } else {
282302 address = address_end + 1 ;
283303 }
284304 }
285305 }
306+ #if !defined(PROT_LEVEL_NONE )
286307 HAL_FLASH_Lock ();
308+ #endif /* FLASH_KEY1 || FLASH_PEKEY1 */
287309 }
288310#else /* FLASH_TYPEERASE_SECTORS */
289311 uint32_t SectorError = 0 ;
@@ -339,8 +361,7 @@ void eeprom_buffer_flush(void)
339361 HAL_FLASH_Lock ();
340362#endif
341363#if defined(ICACHE ) && defined (HAL_ICACHE_MODULE_ENABLED ) && !defined(HAL_ICACHE_MODULE_DISABLED )
342- if (icache_enabled )
343- {
364+ if (icache_enabled ) {
344365 /* Re-enable instruction cache */
345366 if (HAL_ICACHE_Enable () != HAL_OK ) {
346367 Error_Handler ();
0 commit comments