Subversion Repositories DashDisplay

Rev

Rev 30 | Rev 50 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
30 mjames 1
/**
2
  ******************************************************************************
3
  * @file    stm32l1xx_hal_flash.h
4
  * @author  MCD Application Team
5
  * @version V1.2.0
6
  * @date    01-July-2016
7
  * @brief   Header file of Flash HAL module.
8
  ******************************************************************************
9
  * @attention
10
  *
11
  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
12
  *
13
  * Redistribution and use in source and binary forms, with or without modification,
14
  * are permitted provided that the following conditions are met:
15
  *   1. Redistributions of source code must retain the above copyright notice,
16
  *      this list of conditions and the following disclaimer.
17
  *   2. Redistributions in binary form must reproduce the above copyright notice,
18
  *      this list of conditions and the following disclaimer in the documentation
19
  *      and/or other materials provided with the distribution.
20
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
21
  *      may be used to endorse or promote products derived from this software
22
  *      without specific prior written permission.
23
  *
24
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
28
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
32
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
  *
35
  ******************************************************************************  
36
  */
37
 
38
/* Define to prevent recursive inclusion -------------------------------------*/
39
#ifndef __STM32L1xx_HAL_FLASH_H
40
#define __STM32L1xx_HAL_FLASH_H
41
 
42
#ifdef __cplusplus
43
 extern "C" {
44
#endif
45
 
46
/* Includes ------------------------------------------------------------------*/
47
#include "stm32l1xx_hal_def.h"
48
 
49
/** @addtogroup STM32L1xx_HAL_Driver
50
  * @{
51
  */
52
 
53
/** @addtogroup FLASH
54
  * @{
55
  */
56
 
57
/** @addtogroup FLASH_Private_Constants
58
  * @{
59
  */
60
#define FLASH_TIMEOUT_VALUE   ((uint32_t)50000U) /* 50 s */
61
/**
62
  * @}
63
  */
64
 
65
/** @addtogroup FLASH_Private_Macros
66
  * @{
67
  */
68
 
69
#define IS_FLASH_TYPEPROGRAM(_VALUE_)   (((_VALUE_) == FLASH_TYPEPROGRAM_WORD))
70
 
71
#define IS_FLASH_LATENCY(__LATENCY__) (((__LATENCY__) == FLASH_LATENCY_0) || \
72
                                       ((__LATENCY__) == FLASH_LATENCY_1))
73
 
74
/**
75
  * @}
76
  */  
77
 
78
/* Exported types ------------------------------------------------------------*/
79
/** @defgroup FLASH_Exported_Types FLASH Exported Types
80
  * @{
81
  */  
82
 
83
/**
84
  * @brief  FLASH Procedure structure definition
85
  */
86
typedef enum
87
{
88
  FLASH_PROC_NONE              = 0,
89
  FLASH_PROC_PAGEERASE         = 1,
90
  FLASH_PROC_PROGRAM           = 2,
91
} FLASH_ProcedureTypeDef;
92
 
93
/**
94
  * @brief  FLASH handle Structure definition  
95
  */
96
typedef struct
97
{
98
  __IO FLASH_ProcedureTypeDef ProcedureOnGoing; /*!< Internal variable to indicate which procedure is ongoing or not in IT context */
99
 
100
  __IO uint32_t               NbPagesToErase;   /*!< Internal variable to save the remaining sectors to erase in IT context*/
101
 
102
  __IO uint32_t               Address;          /*!< Internal variable to save address selected for program or erase */
103
 
104
  __IO uint32_t               Page;             /*!< Internal variable to define the current page which is erasing */
105
 
106
  HAL_LockTypeDef             Lock;             /*!< FLASH locking object                */
107
 
108
  __IO uint32_t               ErrorCode;        /*!< FLASH error code                    
109
                                                     This parameter can be a value of @ref FLASH_Error_Codes  */
110
} FLASH_ProcessTypeDef;
111
 
112
/**
113
  * @}
114
  */
115
 
116
/* Exported constants --------------------------------------------------------*/
117
/** @defgroup FLASH_Exported_Constants FLASH Exported Constants
118
  * @{
119
  */  
120
 
121
/** @defgroup FLASH_Error_Codes FLASH Error Codes
122
  * @{
123
  */
124
 
125
#define HAL_FLASH_ERROR_NONE      0x00U  /*!< No error */
126
#define HAL_FLASH_ERROR_PGA       0x01U  /*!< Programming alignment error */
127
#define HAL_FLASH_ERROR_WRP       0x02U  /*!< Write protection error */
128
#define HAL_FLASH_ERROR_OPTV      0x04U  /*!< Option validity error */
129
#define HAL_FLASH_ERROR_SIZE      0x08U  /*!<  */
130
#define HAL_FLASH_ERROR_RD        0x10U  /*!< Read protected error */
131
#define HAL_FLASH_ERROR_OPTVUSR   0x20U  /*!< Option UserValidity Error. */
132
#define HAL_FLASH_ERROR_OPERATION 0x40U  /*!< Not used */
133
 
134
/**
135
  * @}
136
  */
137
 
138
/** @defgroup FLASH_Page_Size FLASH size information
139
  * @{
140
  */
141
 
142
#define FLASH_SIZE                (uint32_t)(*((uint16_t *)FLASHSIZE_BASE) * 1024U)
143
#define FLASH_PAGE_SIZE           ((uint32_t)256U)  /*!< FLASH Page Size in bytes */
144
 
145
/**
146
  * @}
147
  */
148
 
149
/** @defgroup FLASH_Type_Program FLASH Type Program
150
  * @{
151
  */
152
#define FLASH_TYPEPROGRAM_WORD       ((uint32_t)0x02U)  /*!<Program a word (32-bit) at a specified address.*/
153
 
154
/**
155
  * @}
156
  */
157
 
158
/** @defgroup FLASH_Latency FLASH Latency
159
  * @{
160
  */
161
#define FLASH_LATENCY_0            ((uint32_t)0x00000000U)    /*!< FLASH Zero Latency cycle */
162
#define FLASH_LATENCY_1            FLASH_ACR_LATENCY         /*!< FLASH One Latency cycle */
163
 
164
/**
165
  * @}
166
  */
167
 
168
/** @defgroup FLASH_Interrupts FLASH Interrupts
169
  * @{
170
  */
171
 
172
#define FLASH_IT_EOP               FLASH_PECR_EOPIE  /*!< End of programming interrupt source */
173
#define FLASH_IT_ERR               FLASH_PECR_ERRIE  /*!< Error interrupt source */
174
/**
175
  * @}
176
  */
177
 
178
/** @defgroup FLASH_Flags FLASH Flags
179
  * @{
180
  */
181
 
182
#define FLASH_FLAG_BSY             FLASH_SR_BSY        /*!< FLASH Busy flag */
183
#define FLASH_FLAG_EOP             FLASH_SR_EOP        /*!< FLASH End of Programming flag */
184
#define FLASH_FLAG_ENDHV           FLASH_SR_ENDHV      /*!< FLASH End of High Voltage flag */
185
#define FLASH_FLAG_READY           FLASH_SR_READY      /*!< FLASH Ready flag after low power mode */
186
#define FLASH_FLAG_WRPERR          FLASH_SR_WRPERR     /*!< FLASH Write protected error flag */
187
#define FLASH_FLAG_PGAERR          FLASH_SR_PGAERR     /*!< FLASH Programming Alignment error flag */
188
#define FLASH_FLAG_SIZERR          FLASH_SR_SIZERR     /*!< FLASH Size error flag  */
189
#define FLASH_FLAG_OPTVERR         FLASH_SR_OPTVERR    /*!< FLASH Option Validity error flag  */
190
/* Cat2 & Cat3*/
191
#if defined(FLASH_SR_RDERR)
192
#define FLASH_FLAG_RDERR           FLASH_SR_RDERR    /*!< Read protected error flag  */
193
#endif /* FLASH_SR_RDERR */
194
/* Cat3, Cat4 & Cat5*/
195
#if defined(FLASH_SR_OPTVERRUSR)
196
#define FLASH_FLAG_OPTVERRUSR      FLASH_SR_OPTVERRUSR /*!< FLASH Option User Validity error flag  */
197
#endif /* FLASH_SR_OPTVERRUSR */
198
 
199
/**
200
  * @}
201
  */
202
 
203
/** @defgroup FLASH_Keys FLASH Keys
204
  * @{
205
  */
206
 
207
#define FLASH_PDKEY1               ((uint32_t)0x04152637U) /*!< Flash power down key1 */
208
#define FLASH_PDKEY2               ((uint32_t)0xFAFBFCFDU) /*!< Flash power down key2: used with FLASH_PDKEY1 
209
                                                              to unlock the RUN_PD bit in FLASH_ACR */
210
 
211
#define FLASH_PEKEY1               ((uint32_t)0x89ABCDEFU) /*!< Flash program erase key1 */
212
#define FLASH_PEKEY2               ((uint32_t)0x02030405U) /*!< Flash program erase key: used with FLASH_PEKEY2
213
                                                               to unlock the write access to the FLASH_PECR register and
214
                                                               data EEPROM */
215
 
216
#define FLASH_PRGKEY1              ((uint32_t)0x8C9DAEBFU) /*!< Flash program memory key1 */
217
#define FLASH_PRGKEY2              ((uint32_t)0x13141516U) /*!< Flash program memory key2: used with FLASH_PRGKEY2
218
                                                               to unlock the program memory */
219
 
220
#define FLASH_OPTKEY1              ((uint32_t)0xFBEAD9C8U) /*!< Flash option key1 */
221
#define FLASH_OPTKEY2              ((uint32_t)0x24252627U) /*!< Flash option key2: used with FLASH_OPTKEY1 to
222
                                                              unlock the write access to the option byte block */
223
/**
224
  * @}
225
  */
226
/**
227
  * @}
228
  */  
229
 
230
/* Exported macro ------------------------------------------------------------*/
231
 
232
/** @defgroup FLASH_Exported_Macros FLASH Exported Macros
233
 *  @brief macros to control FLASH features
234
 *  @{
235
 */
236
 
237
 
238
/** @defgroup FLASH_Interrupt FLASH Interrupts
239
 *  @brief macros to handle FLASH interrupts
240
 * @{
241
 */
242
 
243
/**
244
  * @brief  Enable the specified FLASH interrupt.
245
  * @param  __INTERRUPT__  FLASH interrupt
246
  *         This parameter can be any combination of the following values:
247
  *     @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt
248
  *     @arg @ref FLASH_IT_ERR Error Interrupt    
249
  * @retval none
250
  */  
251
#define __HAL_FLASH_ENABLE_IT(__INTERRUPT__)  SET_BIT((FLASH->PECR), (__INTERRUPT__))
252
 
253
/**
254
  * @brief  Disable the specified FLASH interrupt.
255
  * @param  __INTERRUPT__  FLASH interrupt
256
  *         This parameter can be any combination of the following values:
257
  *     @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt
258
  *     @arg @ref FLASH_IT_ERR Error Interrupt    
259
  * @retval none
260
  */  
261
#define __HAL_FLASH_DISABLE_IT(__INTERRUPT__)  CLEAR_BIT((FLASH->PECR), (uint32_t)(__INTERRUPT__))
262
 
263
/**
264
  * @brief  Get the specified FLASH flag status.
265
  * @param  __FLAG__ specifies the FLASH flag to check.
266
  *          This parameter can be one of the following values:
267
  *            @arg @ref FLASH_FLAG_BSY         FLASH Busy flag
268
  *            @arg @ref FLASH_FLAG_EOP         FLASH End of Operation flag
269
  *            @arg @ref FLASH_FLAG_ENDHV       FLASH End of High Voltage flag
270
  *            @arg @ref FLASH_FLAG_READY       FLASH Ready flag after low power mode
271
  *            @arg @ref FLASH_FLAG_PGAERR      FLASH Programming Alignment error flag
272
  *            @arg @ref FLASH_FLAG_SIZERR      FLASH Size error flag
273
  *            @arg @ref FLASH_FLAG_OPTVERR     FLASH Option validity error error flag
274
@if STM32L100xB
275
@elif STM32L100xBA
276
  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
277
@elif STM32L151xB
278
@elif STM32L151xBA
279
  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
280
@elif STM32L152xB
281
@elif STM32L152xBA
282
  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
283
@elif STM32L100xC
284
  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
285
  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
286
@elif STM32L151xC
287
  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
288
  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
289
@elif STM32L152xC
290
  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
291
  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
292
@elif STM32L162xC
293
  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
294
  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
295
@else
296
  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
297
@endif
298
  *            @arg @ref FLASH_FLAG_WRPERR      FLASH Write protected error flag
299
  * @retval The new state of __FLAG__ (SET or RESET).
300
  */
301
#define __HAL_FLASH_GET_FLAG(__FLAG__)   (((FLASH->SR) & (__FLAG__)) == (__FLAG__))
302
 
303
/**
304
  * @brief  Clear the specified FLASH flag.
305
  * @param  __FLAG__ specifies the FLASH flags to clear.
306
  *          This parameter can be any combination of the following values:
307
  *            @arg @ref FLASH_FLAG_EOP         FLASH End of Operation flag
308
  *            @arg @ref FLASH_FLAG_ENDHV       FLASH End of High Voltage flag
309
  *            @arg @ref FLASH_FLAG_READY       FLASH Ready flag after low power mode
310
  *            @arg @ref FLASH_FLAG_PGAERR      FLASH Programming Alignment error flag
311
  *            @arg @ref FLASH_FLAG_SIZERR      FLASH Size error flag
312
  *            @arg @ref FLASH_FLAG_OPTVERR     FLASH Option validity error error flag
313
@if STM32L100xB
314
@elif STM32L100xBA
315
  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
316
@elif STM32L151xB
317
@elif STM32L151xBA
318
  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
319
@elif STM32L152xB
320
@elif STM32L152xBA
321
  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
322
@elif STM32L100xC
323
  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
324
  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
325
@elif STM32L151xC
326
  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
327
  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
328
@elif STM32L152xC
329
  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
330
  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
331
@elif STM32L162xC
332
  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
333
  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
334
@else
335
  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
336
@endif
337
  *            @arg @ref FLASH_FLAG_WRPERR      FLASH Write protected error flag
338
  * @retval none
339
  */
340
#define __HAL_FLASH_CLEAR_FLAG(__FLAG__)   ((FLASH->SR) = (__FLAG__))
341
 
342
/**
343
  * @}
344
  */
345
 
346
/**
347
  * @}
348
  */
349
 
350
/* Include FLASH HAL Extended module */
351
#include "stm32l1xx_hal_flash_ex.h"  
352
#include "stm32l1xx_hal_flash_ramfunc.h"  
353
 
354
/* Exported functions --------------------------------------------------------*/
355
/** @addtogroup FLASH_Exported_Functions
356
  * @{
357
  */
358
 
359
/** @addtogroup FLASH_Exported_Functions_Group1
360
  * @{
361
  */
362
/* IO operation functions *****************************************************/
363
HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint32_t Data);
364
HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint32_t Data);
365
 
366
/* FLASH IRQ handler function */
367
void       HAL_FLASH_IRQHandler(void);
368
/* Callbacks in non blocking modes */
369
void       HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue);
370
void       HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue);
371
 
372
/**
373
  * @}
374
  */
375
 
376
/** @addtogroup FLASH_Exported_Functions_Group2
377
  * @{
378
  */
379
/* Peripheral Control functions ***********************************************/
380
HAL_StatusTypeDef HAL_FLASH_Unlock(void);
381
HAL_StatusTypeDef HAL_FLASH_Lock(void);
382
HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void);
383
HAL_StatusTypeDef HAL_FLASH_OB_Lock(void);
384
HAL_StatusTypeDef HAL_FLASH_OB_Launch(void);
385
 
386
/**
387
  * @}
388
  */
389
 
390
/** @addtogroup FLASH_Exported_Functions_Group3
391
  * @{
392
  */
393
/* Peripheral State and Error functions ***************************************/
394
uint32_t HAL_FLASH_GetError(void);
395
 
396
/**
397
  * @}
398
  */
399
 
400
/**
401
  * @}
402
  */
403
 
404
/* Private function -------------------------------------------------*/
405
/** @addtogroup FLASH_Private_Functions
406
 * @{
407
 */
408
HAL_StatusTypeDef       FLASH_WaitForLastOperation(uint32_t Timeout);
409
 
410
/**
411
  * @}
412
  */
413
 
414
/**
415
  * @}
416
  */
417
 
418
/**
419
  * @}
420
  */
421
 
422
#ifdef __cplusplus
423
}
424
#endif
425
 
426
#endif /* __STM32L1xx_HAL_FLASH_H */
427
 
428
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
429