@@ -42,8 +42,8 @@ extern "C" {
42
42
/* Be able to change FLASH_BANK_NUMBER to use if relevant */
43
43
#if !defined(FLASH_BANK_NUMBER ) && \
44
44
(defined(STM32F0xx ) || defined(STM32F1xx ) || defined(STM32G4xx ) || \
45
- defined(STM32H7xx ) || defined(STM32L1xx ) || defined( STM32L4xx ))
46
- /* Fo STM32F0xx, FLASH_BANK_1 is not defined only FLASH_BANK1_END is defined */
45
+ defined(STM32H7xx ) || defined(STM32L4xx ))
46
+ /* For STM32F0xx, FLASH_BANK_1 is not defined only FLASH_BANK1_END is defined */
47
47
#if defined(STM32F0xx )
48
48
#define FLASH_BANK_1 1U
49
49
#endif
@@ -58,7 +58,7 @@ extern "C" {
58
58
#endif /* !FLASH_BANK_NUMBER */
59
59
60
60
/* Be able to change FLASH_DATA_SECTOR to use if relevant */
61
- #if defined(STM32F2xx ) || defined(STM32F4xx ) || defined(STM32F7xx ) || \
61
+ #if defined(STM32F2xx ) || defined(STM32F4xx ) || defined(STM32F7xx ) || \
62
62
defined(STM32H7xx )
63
63
#if !defined(FLASH_DATA_SECTOR )
64
64
#define FLASH_DATA_SECTOR ((uint32_t)(FLASH_SECTOR_TOTAL - 1))
@@ -77,8 +77,8 @@ extern "C" {
77
77
#endif /* !FLASH_PAGE_NUMBER */
78
78
79
79
/* Be able to change FLASH_END to use */
80
- #if !defined(FLASH_END ) && !defined( STM32L0xx )
81
- #if defined (STM32F0xx ) || defined (STM32F1xx ) || defined( STM32L1xx )
80
+ #if !defined(FLASH_END )
81
+ #if defined (STM32F0xx ) || defined (STM32F1xx )
82
82
#if defined (FLASH_BANK2_END ) && (FLASH_BANK_NUMBER == FLASH_BANK_2 )
83
83
#define FLASH_END FLASH_BANK2_END
84
84
#elif defined (FLASH_BANK1_END ) && (FLASH_BANK_NUMBER == FLASH_BANK_1 )
@@ -117,6 +117,8 @@ static inline uint32_t get_flash_end(void)
117
117
#define FLASH_END ((uint32_t)(FLASH_BASE + (((FLASH_PAGE_NUMBER +1) * FLASH_PAGE_SIZE))-1))
118
118
#elif defined(EEPROM_RETRAM_MODE )
119
119
#define FLASH_END ((uint32_t)(EEPROM_RETRAM_START_ADDRESS + EEPROM_RETRAM_MODE_SIZE -1))
120
+ #elif defined(DATA_EEPROM_END )
121
+ #define FLASH_END DATA_EEPROM_ENu
120
122
#endif
121
123
#ifndef FLASH_END
122
124
#error "FLASH_END could not be defined"
@@ -130,7 +132,7 @@ static inline uint32_t get_flash_end(void)
130
132
* in order to prevent overwritting
131
133
* program data
132
134
*/
133
- #if defined(STM32L0xx )
135
+ #if defined(DATA_EEPROM_BASE )
134
136
#define FLASH_BASE_ADDRESS ((uint32_t)(DATA_EEPROM_BASE))
135
137
#elif defined(EEPROM_RETRAM_MODE )
136
138
#define FLASH_BASE_ADDRESS EEPROM_RETRAM_START_ADDRESS
@@ -156,6 +158,9 @@ uint8_t eeprom_read_byte(const uint32_t pos)
156
158
if (pos <= (DATA_EEPROM_END - DATA_EEPROM_BASE )) {
157
159
/* with actual EEPROM, pos is a relative address */
158
160
data = * (__IO uint8_t * )(DATA_EEPROM_BASE + pos );
161
+ /* align content of the buffered eeprom */
162
+ eeprom_buffer [pos ] = (uint8_t )data ;
163
+
159
164
return (uint8_t )data ;
160
165
}
161
166
#else
@@ -180,6 +185,7 @@ void eeprom_write_byte(uint32_t pos, uint8_t value)
180
185
HAL_FLASHEx_DATAEEPROM_Lock ();
181
186
}
182
187
}
188
+ eeprom_buffer [pos ] = (uint8_t )value ;
183
189
#else
184
190
eeprom_buffered_write_byte (pos , value );
185
191
eeprom_buffer_flush ();
@@ -218,7 +224,7 @@ void eeprom_buffer_fill(void)
218
224
memcpy (eeprom_buffer , (uint8_t * )(DATA_EEPROM_BASE ), E2END + 1 );
219
225
#else
220
226
memcpy (eeprom_buffer , (uint8_t * )(FLASH_BASE_ADDRESS ), E2END + 1 );
221
- #endif /* STM32L0xx */
227
+ #endif /* DATA_EEPROM_BASE */
222
228
}
223
229
224
230
#if defined(EEPROM_RETRAM_MODE )
@@ -263,8 +269,8 @@ void eeprom_buffer_flush(void)
263
269
uint32_t address = FLASH_BASE_ADDRESS ;
264
270
uint32_t address_end = FLASH_BASE_ADDRESS + E2END ;
265
271
#if defined (STM32F0xx ) || defined (STM32F1xx ) || defined (STM32F3xx ) || \
266
- defined (STM32G0xx ) || defined (STM32G4xx ) || defined ( STM32L0xx ) || \
267
- defined (STM32L1xx ) || defined ( STM32L4xx ) || defined (STM32WBxx )
272
+ defined (STM32G0xx ) || defined (STM32G4xx ) || \
273
+ defined (STM32L4xx ) || defined (STM32WBxx )
268
274
uint32_t pageError = 0 ;
269
275
uint64_t data = 0 ;
270
276
@@ -282,38 +288,20 @@ void eeprom_buffer_flush(void)
282
288
EraseInitStruct .NbPages = 1 ;
283
289
284
290
if (HAL_FLASH_Unlock () == HAL_OK ) {
285
- #if defined(STM32L0xx )
286
- __HAL_FLASH_CLEAR_FLAG (FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \
287
- FLASH_FLAG_SIZERR | FLASH_FLAG_OPTVERR | FLASH_FLAG_RDERR | \
288
- FLASH_FLAG_FWWERR | FLASH_FLAG_NOTZEROERR );
289
- #elif defined(STM32L1xx )
290
- #if defined(FLASH_SR_RDERR )
291
- __HAL_FLASH_CLEAR_FLAG (FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \
292
- FLASH_FLAG_SIZERR | FLASH_FLAG_OPTVERR | FLASH_FLAG_RDERR );
293
- #else
294
- __HAL_FLASH_CLEAR_FLAG (FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \
295
- FLASH_FLAG_SIZERR | FLASH_FLAG_OPTVERR );
296
- #endif
297
- #elif defined (STM32G0xx ) || defined (STM32G4xx ) || defined (STM32L4xx ) || \
291
+ #if defined (STM32G0xx ) || defined (STM32G4xx ) || defined (STM32L4xx ) || \
298
292
defined (STM32WBxx )
299
293
__HAL_FLASH_CLEAR_FLAG (FLASH_FLAG_ALL_ERRORS );
300
294
#else
301
295
__HAL_FLASH_CLEAR_FLAG (FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGERR );
302
296
#endif
303
297
if (HAL_FLASHEx_Erase (& EraseInitStruct , & pageError ) == HAL_OK ) {
304
298
while (address <= address_end ) {
305
- #if defined(STM32L0xx ) || defined(STM32L1xx )
306
- memcpy (& data , eeprom_buffer + offset , sizeof (uint32_t ));
307
- if (HAL_FLASH_Program (FLASH_TYPEPROGRAM_WORD , address , data ) == HAL_OK ) {
308
- address += 4 ;
309
- offset += 4 ;
310
- #else
299
+
311
300
data = * ((uint64_t * )((uint8_t * )eeprom_buffer + offset ));
312
301
313
302
if (HAL_FLASH_Program (FLASH_TYPEPROGRAM_DOUBLEWORD , address , data ) == HAL_OK ) {
314
303
address += 8 ;
315
304
offset += 8 ;
316
- #endif
317
305
} else {
318
306
address = address_end + 1 ;
319
307
}
0 commit comments