5
5
******************************************************************************
6
6
* @attention
7
7
*
8
- * <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
8
+ * Copyright (c) 2016-2021, STMicroelectronics
9
+ * All rights reserved.
9
10
*
10
- * Redistribution and use in source and binary forms, with or without modification,
11
- * are permitted provided that the following conditions are met:
12
- * 1. Redistributions of source code must retain the above copyright notice,
13
- * this list of conditions and the following disclaimer.
14
- * 2. Redistributions in binary form must reproduce the above copyright notice,
15
- * this list of conditions and the following disclaimer in the documentation
16
- * and/or other materials provided with the distribution.
17
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
18
- * may be used to endorse or promote products derived from this software
19
- * without specific prior written permission.
20
- *
21
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
25
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
11
+ * This software component is licensed by ST under BSD 3-Clause license,
12
+ * the "License"; You may not use this file except in compliance with the
13
+ * License. You may obtain a copy of the License at:
14
+ * opensource.org/licenses/BSD-3-Clause
31
15
*
32
16
******************************************************************************
33
17
*/
@@ -40,16 +24,10 @@ extern "C" {
40
24
#endif
41
25
42
26
/* Be able to change FLASH_BANK_NUMBER to use if relevant */
43
- #if !defined(FLASH_BANK_NUMBER ) && \
44
- (defined(STM32F0xx ) || defined(STM32F1xx ) || defined(STM32G4xx ) || \
45
- defined(STM32H7xx ) || defined(STM32L4xx ) || defined(STM32L5xx ))
46
- /* For STM32F0xx, FLASH_BANK_1 is not defined only FLASH_BANK1_END is defined */
47
- #if defined(STM32F0xx )
48
- #define FLASH_BANK_1 1U
49
- #endif
27
+ #if !defined(FLASH_BANK_NUMBER ) && defined(FLASH_BANK_1 )
50
28
#if defined(FLASH_BANK_2 )
51
29
#define FLASH_BANK_NUMBER FLASH_BANK_2
52
- #else
30
+ #else /* FLASH_BANK_1 */
53
31
#define FLASH_BANK_NUMBER FLASH_BANK_1
54
32
#endif /* FLASH_BANK_2 */
55
33
#ifndef FLASH_BANK_NUMBER
@@ -58,33 +36,28 @@ extern "C" {
58
36
#endif /* !FLASH_BANK_NUMBER */
59
37
60
38
/* Be able to change FLASH_DATA_SECTOR to use if relevant */
61
- #if defined(STM32F2xx ) || defined(STM32F4xx ) || defined(STM32F7xx ) || \
62
- defined(STM32H7xx )
39
+ #if defined(FLASH_SECTOR_TOTAL )
63
40
#if !defined(FLASH_DATA_SECTOR )
64
41
#define FLASH_DATA_SECTOR ((uint32_t)(FLASH_SECTOR_TOTAL - 1))
65
42
#else
66
43
#ifndef FLASH_BASE_ADDRESS
67
44
#error "FLASH_BASE_ADDRESS have to be defined when FLASH_DATA_SECTOR is defined"
68
45
#endif
69
46
#endif /* !FLASH_DATA_SECTOR */
70
- #endif /* STM32F2xx || STM32F4xx || STM32F7xx */
47
+ #endif /* FLASH_SECTOR_TOTAL */
71
48
72
49
/* Be able to change FLASH_PAGE_NUMBER to use if relevant */
73
- #if !defined(FLASH_PAGE_NUMBER ) && \
74
- (defined (STM32G0xx ) || defined(STM32G4xx ) || defined (STM32L4xx ) || \
75
- defined (STM32L5xx ) || defined(STM32WBxx ))
50
+ #if !defined(FLASH_PAGE_NUMBER ) && defined (FLASH_SIZE ) && defined(FLASH_PAGE_SIZE )
76
51
#define FLASH_PAGE_NUMBER ((uint32_t)((FLASH_SIZE / FLASH_PAGE_SIZE) - 1))
77
52
#endif /* !FLASH_PAGE_NUMBER */
78
53
79
54
/* Be able to change FLASH_END to use */
80
55
#if !defined(FLASH_END )
81
- #if defined (STM32F0xx ) || defined (STM32F1xx )
82
56
#if defined (FLASH_BANK2_END ) && (FLASH_BANK_NUMBER == FLASH_BANK_2 )
83
57
#define FLASH_END FLASH_BANK2_END
84
58
#elif defined (FLASH_BANK1_END ) && (FLASH_BANK_NUMBER == FLASH_BANK_1 )
85
59
#define FLASH_END FLASH_BANK1_END
86
- #endif
87
- #elif defined (STM32F3xx )
60
+ #elif !defined (FLASH_PAGE_NUMBER )
88
61
static inline uint32_t get_flash_end (void )
89
62
{
90
63
uint32_t size ;
@@ -111,8 +84,7 @@ static inline uint32_t get_flash_end(void)
111
84
return size ;
112
85
}
113
86
#define FLASH_END get_flash_end()
114
- #elif defined(STM32G0xx ) || defined(STM32G4xx ) || defined (STM32L4xx ) || \
115
- defined (STM32L5xx ) || defined(STM32WBxx )
87
+ #elif defined(FLASH_BASE ) && defined(FLASH_PAGE_NUMBER ) && defined (FLASH_PAGE_SIZE )
116
88
/* If FLASH_PAGE_NUMBER is defined by user, this is not really end of the flash */
117
89
#define FLASH_END ((uint32_t)(FLASH_BASE + (((FLASH_PAGE_NUMBER +1) * FLASH_PAGE_SIZE))-1))
118
90
#elif defined(EEPROM_RETRAM_MODE )
@@ -246,20 +218,16 @@ void eeprom_buffer_flush(void)
246
218
uint32_t offset = 0 ;
247
219
uint32_t address = FLASH_BASE_ADDRESS ;
248
220
uint32_t address_end = FLASH_BASE_ADDRESS + E2END ;
249
- #if defined (STM32F0xx ) || defined (STM32F1xx ) || defined (STM32F3xx ) || \
250
- defined (STM32G0xx ) || defined (STM32G4xx ) || \
251
- defined (STM32L4xx ) || defined (STM32L5xx ) || defined (STM32WBxx )
221
+ #if defined(FLASH_TYPEERASE_PAGES )
252
222
uint32_t pageError = 0 ;
253
223
uint64_t data = 0 ;
254
224
255
225
/* ERASING page */
256
226
EraseInitStruct .TypeErase = FLASH_TYPEERASE_PAGES ;
257
- #if defined (STM32F1xx ) || defined (STM32G4xx ) || defined (STM32L4xx ) || \
258
- defined (STM32L5xx )
227
+ #if defined(FLASH_BANK_NUMBER )
259
228
EraseInitStruct .Banks = FLASH_BANK_NUMBER ;
260
- #endif
261
- #if defined (STM32G0xx ) || defined (STM32G4xx ) || defined (STM32L4xx ) || \
262
- defined (STM32L5xx ) || defined (STM32WBxx )
229
+ #endif /* FLASH_BANK_NUMBER */
230
+ #if defined (FLASH_PAGE_NUMBER )
263
231
EraseInitStruct .Page = FLASH_PAGE_NUMBER ;
264
232
#else
265
233
EraseInitStruct .PageAddress = FLASH_BASE_ADDRESS ;
@@ -283,17 +251,18 @@ void eeprom_buffer_flush(void)
283
251
}
284
252
HAL_FLASH_Lock ();
285
253
}
286
- #else
254
+ #else /* FLASH_TYPEERASE_SECTORS */
287
255
uint32_t SectorError = 0 ;
288
- #if defined(STM32H7xx )
256
+ #if defined(FLASH_TYPEPROGRAM_FLASHWORD )
289
257
uint64_t data [4 ] = {0x0000 };
290
258
#else
291
259
uint32_t data = 0 ;
292
260
#endif
293
261
294
262
/* ERASING page */
295
263
EraseInitStruct .TypeErase = FLASH_TYPEERASE_SECTORS ;
296
- #if defined(STM32H7xx )
264
+ // #if defined(STM32H7xx)
265
+ #if defined(FLASH_BANK_NUMBER )
297
266
EraseInitStruct .Banks = FLASH_BANK_NUMBER ;
298
267
#endif
299
268
EraseInitStruct .VoltageRange = FLASH_VOLTAGE_RANGE_3 ;
@@ -304,7 +273,7 @@ void eeprom_buffer_flush(void)
304
273
305
274
if (HAL_FLASHEx_Erase (& EraseInitStruct , & SectorError ) == HAL_OK ) {
306
275
while (address <= address_end ) {
307
- #if defined(STM32H7xx )
276
+ #if defined(FLASH_TYPEPROGRAM_FLASHWORD )
308
277
/* 256 bits */
309
278
memcpy (& data , eeprom_buffer + offset , 8 * sizeof (uint32_t ));
310
279
if (HAL_FLASH_Program (FLASH_TYPEPROGRAM_FLASHWORD , address , (uint32_t )data ) == HAL_OK ) {
0 commit comments