comparison Common/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h @ 128:c78bcbd5deda FlipDisplay

Added current STM32 standandard libraries in version independend folder structure
author Ideenmodellierer
date Sun, 17 Feb 2019 21:12:22 +0100
parents
children
comparison
equal deleted inserted replaced
127:1369f8660eaa 128:c78bcbd5deda
1 /**
2 ******************************************************************************
3 * @file stm32f4xx_hal_flash.h
4 * @author MCD Application Team
5 * @brief Header file of FLASH HAL module.
6 ******************************************************************************
7 * @attention
8 *
9 * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
10 *
11 * Redistribution and use in source and binary forms, with or without modification,
12 * are permitted provided that the following conditions are met:
13 * 1. Redistributions of source code must retain the above copyright notice,
14 * this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright notice,
16 * this list of conditions and the following disclaimer in the documentation
17 * and/or other materials provided with the distribution.
18 * 3. Neither the name of STMicroelectronics nor the names of its contributors
19 * may be used to endorse or promote products derived from this software
20 * without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 *
33 ******************************************************************************
34 */
35
36 /* Define to prevent recursive inclusion -------------------------------------*/
37 #ifndef __STM32F4xx_HAL_FLASH_H
38 #define __STM32F4xx_HAL_FLASH_H
39
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
43
44 /* Includes ------------------------------------------------------------------*/
45 #include "stm32f4xx_hal_def.h"
46
47 /** @addtogroup STM32F4xx_HAL_Driver
48 * @{
49 */
50
51 /** @addtogroup FLASH
52 * @{
53 */
54
55 /* Exported types ------------------------------------------------------------*/
56 /** @defgroup FLASH_Exported_Types FLASH Exported Types
57 * @{
58 */
59
60 /**
61 * @brief FLASH Procedure structure definition
62 */
63 typedef enum
64 {
65 FLASH_PROC_NONE = 0U,
66 FLASH_PROC_SECTERASE,
67 FLASH_PROC_MASSERASE,
68 FLASH_PROC_PROGRAM
69 } FLASH_ProcedureTypeDef;
70
71 /**
72 * @brief FLASH handle Structure definition
73 */
74 typedef struct
75 {
76 __IO FLASH_ProcedureTypeDef ProcedureOnGoing; /*Internal variable to indicate which procedure is ongoing or not in IT context*/
77
78 __IO uint32_t NbSectorsToErase; /*Internal variable to save the remaining sectors to erase in IT context*/
79
80 __IO uint8_t VoltageForErase; /*Internal variable to provide voltage range selected by user in IT context*/
81
82 __IO uint32_t Sector; /*Internal variable to define the current sector which is erasing*/
83
84 __IO uint32_t Bank; /*Internal variable to save current bank selected during mass erase*/
85
86 __IO uint32_t Address; /*Internal variable to save address selected for program*/
87
88 HAL_LockTypeDef Lock; /* FLASH locking object */
89
90 __IO uint32_t ErrorCode; /* FLASH error code */
91
92 }FLASH_ProcessTypeDef;
93
94 /**
95 * @}
96 */
97
98 /* Exported constants --------------------------------------------------------*/
99 /** @defgroup FLASH_Exported_Constants FLASH Exported Constants
100 * @{
101 */
102 /** @defgroup FLASH_Error_Code FLASH Error Code
103 * @brief FLASH Error Code
104 * @{
105 */
106 #define HAL_FLASH_ERROR_NONE 0x00000000U /*!< No error */
107 #define HAL_FLASH_ERROR_RD 0x00000001U /*!< Read Protection error */
108 #define HAL_FLASH_ERROR_PGS 0x00000002U /*!< Programming Sequence error */
109 #define HAL_FLASH_ERROR_PGP 0x00000004U /*!< Programming Parallelism error */
110 #define HAL_FLASH_ERROR_PGA 0x00000008U /*!< Programming Alignment error */
111 #define HAL_FLASH_ERROR_WRP 0x00000010U /*!< Write protection error */
112 #define HAL_FLASH_ERROR_OPERATION 0x00000020U /*!< Operation Error */
113 /**
114 * @}
115 */
116
117 /** @defgroup FLASH_Type_Program FLASH Type Program
118 * @{
119 */
120 #define FLASH_TYPEPROGRAM_BYTE 0x00000000U /*!< Program byte (8-bit) at a specified address */
121 #define FLASH_TYPEPROGRAM_HALFWORD 0x00000001U /*!< Program a half-word (16-bit) at a specified address */
122 #define FLASH_TYPEPROGRAM_WORD 0x00000002U /*!< Program a word (32-bit) at a specified address */
123 #define FLASH_TYPEPROGRAM_DOUBLEWORD 0x00000003U /*!< Program a double word (64-bit) at a specified address */
124 /**
125 * @}
126 */
127
128 /** @defgroup FLASH_Flag_definition FLASH Flag definition
129 * @brief Flag definition
130 * @{
131 */
132 #define FLASH_FLAG_EOP FLASH_SR_EOP /*!< FLASH End of Operation flag */
133 #define FLASH_FLAG_OPERR FLASH_SR_SOP /*!< FLASH operation Error flag */
134 #define FLASH_FLAG_WRPERR FLASH_SR_WRPERR /*!< FLASH Write protected error flag */
135 #define FLASH_FLAG_PGAERR FLASH_SR_PGAERR /*!< FLASH Programming Alignment error flag */
136 #define FLASH_FLAG_PGPERR FLASH_SR_PGPERR /*!< FLASH Programming Parallelism error flag */
137 #define FLASH_FLAG_PGSERR FLASH_SR_PGSERR /*!< FLASH Programming Sequence error flag */
138 #if defined(FLASH_SR_RDERR)
139 #define FLASH_FLAG_RDERR FLASH_SR_RDERR /*!< Read Protection error flag (PCROP) */
140 #endif /* FLASH_SR_RDERR */
141 #define FLASH_FLAG_BSY FLASH_SR_BSY /*!< FLASH Busy flag */
142 /**
143 * @}
144 */
145
146 /** @defgroup FLASH_Interrupt_definition FLASH Interrupt definition
147 * @brief FLASH Interrupt definition
148 * @{
149 */
150 #define FLASH_IT_EOP FLASH_CR_EOPIE /*!< End of FLASH Operation Interrupt source */
151 #define FLASH_IT_ERR 0x02000000U /*!< Error Interrupt source */
152 /**
153 * @}
154 */
155
156 /** @defgroup FLASH_Program_Parallelism FLASH Program Parallelism
157 * @{
158 */
159 #define FLASH_PSIZE_BYTE 0x00000000U
160 #define FLASH_PSIZE_HALF_WORD 0x00000100U
161 #define FLASH_PSIZE_WORD 0x00000200U
162 #define FLASH_PSIZE_DOUBLE_WORD 0x00000300U
163 #define CR_PSIZE_MASK 0xFFFFFCFFU
164 /**
165 * @}
166 */
167
168 /** @defgroup FLASH_Keys FLASH Keys
169 * @{
170 */
171 #define RDP_KEY ((uint16_t)0x00A5)
172 #define FLASH_KEY1 0x45670123U
173 #define FLASH_KEY2 0xCDEF89ABU
174 #define FLASH_OPT_KEY1 0x08192A3BU
175 #define FLASH_OPT_KEY2 0x4C5D6E7FU
176 /**
177 * @}
178 */
179
180 /**
181 * @}
182 */
183
184 /* Exported macro ------------------------------------------------------------*/
185 /** @defgroup FLASH_Exported_Macros FLASH Exported Macros
186 * @{
187 */
188 /**
189 * @brief Set the FLASH Latency.
190 * @param __LATENCY__ FLASH Latency
191 * The value of this parameter depend on device used within the same series
192 * @retval none
193 */
194 #define __HAL_FLASH_SET_LATENCY(__LATENCY__) (*(__IO uint8_t *)ACR_BYTE0_ADDRESS = (uint8_t)(__LATENCY__))
195
196 /**
197 * @brief Get the FLASH Latency.
198 * @retval FLASH Latency
199 * The value of this parameter depend on device used within the same series
200 */
201 #define __HAL_FLASH_GET_LATENCY() (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY))
202
203 /**
204 * @brief Enable the FLASH prefetch buffer.
205 * @retval none
206 */
207 #define __HAL_FLASH_PREFETCH_BUFFER_ENABLE() (FLASH->ACR |= FLASH_ACR_PRFTEN)
208
209 /**
210 * @brief Disable the FLASH prefetch buffer.
211 * @retval none
212 */
213 #define __HAL_FLASH_PREFETCH_BUFFER_DISABLE() (FLASH->ACR &= (~FLASH_ACR_PRFTEN))
214
215 /**
216 * @brief Enable the FLASH instruction cache.
217 * @retval none
218 */
219 #define __HAL_FLASH_INSTRUCTION_CACHE_ENABLE() (FLASH->ACR |= FLASH_ACR_ICEN)
220
221 /**
222 * @brief Disable the FLASH instruction cache.
223 * @retval none
224 */
225 #define __HAL_FLASH_INSTRUCTION_CACHE_DISABLE() (FLASH->ACR &= (~FLASH_ACR_ICEN))
226
227 /**
228 * @brief Enable the FLASH data cache.
229 * @retval none
230 */
231 #define __HAL_FLASH_DATA_CACHE_ENABLE() (FLASH->ACR |= FLASH_ACR_DCEN)
232
233 /**
234 * @brief Disable the FLASH data cache.
235 * @retval none
236 */
237 #define __HAL_FLASH_DATA_CACHE_DISABLE() (FLASH->ACR &= (~FLASH_ACR_DCEN))
238
239 /**
240 * @brief Resets the FLASH instruction Cache.
241 * @note This function must be used only when the Instruction Cache is disabled.
242 * @retval None
243 */
244 #define __HAL_FLASH_INSTRUCTION_CACHE_RESET() do {FLASH->ACR |= FLASH_ACR_ICRST; \
245 FLASH->ACR &= ~FLASH_ACR_ICRST; \
246 }while(0U)
247
248 /**
249 * @brief Resets the FLASH data Cache.
250 * @note This function must be used only when the data Cache is disabled.
251 * @retval None
252 */
253 #define __HAL_FLASH_DATA_CACHE_RESET() do {FLASH->ACR |= FLASH_ACR_DCRST; \
254 FLASH->ACR &= ~FLASH_ACR_DCRST; \
255 }while(0U)
256 /**
257 * @brief Enable the specified FLASH interrupt.
258 * @param __INTERRUPT__ FLASH interrupt
259 * This parameter can be any combination of the following values:
260 * @arg FLASH_IT_EOP: End of FLASH Operation Interrupt
261 * @arg FLASH_IT_ERR: Error Interrupt
262 * @retval none
263 */
264 #define __HAL_FLASH_ENABLE_IT(__INTERRUPT__) (FLASH->CR |= (__INTERRUPT__))
265
266 /**
267 * @brief Disable the specified FLASH interrupt.
268 * @param __INTERRUPT__ FLASH interrupt
269 * This parameter can be any combination of the following values:
270 * @arg FLASH_IT_EOP: End of FLASH Operation Interrupt
271 * @arg FLASH_IT_ERR: Error Interrupt
272 * @retval none
273 */
274 #define __HAL_FLASH_DISABLE_IT(__INTERRUPT__) (FLASH->CR &= ~(uint32_t)(__INTERRUPT__))
275
276 /**
277 * @brief Get the specified FLASH flag status.
278 * @param __FLAG__ specifies the FLASH flags to check.
279 * This parameter can be any combination of the following values:
280 * @arg FLASH_FLAG_EOP : FLASH End of Operation flag
281 * @arg FLASH_FLAG_OPERR : FLASH operation Error flag
282 * @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag
283 * @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag
284 * @arg FLASH_FLAG_PGPERR: FLASH Programming Parallelism error flag
285 * @arg FLASH_FLAG_PGSERR: FLASH Programming Sequence error flag
286 * @arg FLASH_FLAG_RDERR : FLASH Read Protection error flag (PCROP) (*)
287 * @arg FLASH_FLAG_BSY : FLASH Busy flag
288 * (*) FLASH_FLAG_RDERR is not available for STM32F405xx/407xx/415xx/417xx devices
289 * @retval The new state of __FLAG__ (SET or RESET).
290 */
291 #define __HAL_FLASH_GET_FLAG(__FLAG__) ((FLASH->SR & (__FLAG__)))
292
293 /**
294 * @brief Clear the specified FLASH flags.
295 * @param __FLAG__ specifies the FLASH flags to clear.
296 * This parameter can be any combination of the following values:
297 * @arg FLASH_FLAG_EOP : FLASH End of Operation flag
298 * @arg FLASH_FLAG_OPERR : FLASH operation Error flag
299 * @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag
300 * @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag
301 * @arg FLASH_FLAG_PGPERR: FLASH Programming Parallelism error flag
302 * @arg FLASH_FLAG_PGSERR: FLASH Programming Sequence error flag
303 * @arg FLASH_FLAG_RDERR : FLASH Read Protection error flag (PCROP) (*)
304 * (*) FLASH_FLAG_RDERR is not available for STM32F405xx/407xx/415xx/417xx devices
305 * @retval none
306 */
307 #define __HAL_FLASH_CLEAR_FLAG(__FLAG__) (FLASH->SR = (__FLAG__))
308 /**
309 * @}
310 */
311
312 /* Include FLASH HAL Extension module */
313 #include "stm32f4xx_hal_flash_ex.h"
314 #include "stm32f4xx_hal_flash_ramfunc.h"
315
316 /* Exported functions --------------------------------------------------------*/
317 /** @addtogroup FLASH_Exported_Functions
318 * @{
319 */
320 /** @addtogroup FLASH_Exported_Functions_Group1
321 * @{
322 */
323 /* Program operation functions ***********************************************/
324 HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data);
325 HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data);
326 /* FLASH IRQ handler method */
327 void HAL_FLASH_IRQHandler(void);
328 /* Callbacks in non blocking modes */
329 void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue);
330 void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue);
331 /**
332 * @}
333 */
334
335 /** @addtogroup FLASH_Exported_Functions_Group2
336 * @{
337 */
338 /* Peripheral Control functions **********************************************/
339 HAL_StatusTypeDef HAL_FLASH_Unlock(void);
340 HAL_StatusTypeDef HAL_FLASH_Lock(void);
341 HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void);
342 HAL_StatusTypeDef HAL_FLASH_OB_Lock(void);
343 /* Option bytes control */
344 HAL_StatusTypeDef HAL_FLASH_OB_Launch(void);
345 /**
346 * @}
347 */
348
349 /** @addtogroup FLASH_Exported_Functions_Group3
350 * @{
351 */
352 /* Peripheral State functions ************************************************/
353 uint32_t HAL_FLASH_GetError(void);
354 HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout);
355 /**
356 * @}
357 */
358
359 /**
360 * @}
361 */
362 /* Private types -------------------------------------------------------------*/
363 /* Private variables ---------------------------------------------------------*/
364 /** @defgroup FLASH_Private_Variables FLASH Private Variables
365 * @{
366 */
367
368 /**
369 * @}
370 */
371 /* Private constants ---------------------------------------------------------*/
372 /** @defgroup FLASH_Private_Constants FLASH Private Constants
373 * @{
374 */
375
376 /**
377 * @brief ACR register byte 0 (Bits[7:0]) base address
378 */
379 #define ACR_BYTE0_ADDRESS 0x40023C00U
380 /**
381 * @brief OPTCR register byte 0 (Bits[7:0]) base address
382 */
383 #define OPTCR_BYTE0_ADDRESS 0x40023C14U
384 /**
385 * @brief OPTCR register byte 1 (Bits[15:8]) base address
386 */
387 #define OPTCR_BYTE1_ADDRESS 0x40023C15U
388 /**
389 * @brief OPTCR register byte 2 (Bits[23:16]) base address
390 */
391 #define OPTCR_BYTE2_ADDRESS 0x40023C16U
392 /**
393 * @brief OPTCR register byte 3 (Bits[31:24]) base address
394 */
395 #define OPTCR_BYTE3_ADDRESS 0x40023C17U
396
397 /**
398 * @}
399 */
400
401 /* Private macros ------------------------------------------------------------*/
402 /** @defgroup FLASH_Private_Macros FLASH Private Macros
403 * @{
404 */
405
406 /** @defgroup FLASH_IS_FLASH_Definitions FLASH Private macros to check input parameters
407 * @{
408 */
409 #define IS_FLASH_TYPEPROGRAM(VALUE)(((VALUE) == FLASH_TYPEPROGRAM_BYTE) || \
410 ((VALUE) == FLASH_TYPEPROGRAM_HALFWORD) || \
411 ((VALUE) == FLASH_TYPEPROGRAM_WORD) || \
412 ((VALUE) == FLASH_TYPEPROGRAM_DOUBLEWORD))
413 /**
414 * @}
415 */
416
417 /**
418 * @}
419 */
420
421 /* Private functions ---------------------------------------------------------*/
422 /** @defgroup FLASH_Private_Functions FLASH Private Functions
423 * @{
424 */
425
426 /**
427 * @}
428 */
429
430 /**
431 * @}
432 */
433
434 /**
435 * @}
436 */
437
438 #ifdef __cplusplus
439 }
440 #endif
441
442 #endif /* __STM32F4xx_HAL_FLASH_H */
443
444 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/