Mercurial > public > ostc4
comparison Common/Drivers/STM32F4xx_HAL_DRIVER_v120/Inc/stm32f4xx_hal_flash.h @ 38:5f11787b4f42
include in ostc4 repository
author | heinrichsweikamp |
---|---|
date | Sat, 28 Apr 2018 11:52:34 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
37:ccc45c0e1ea2 | 38:5f11787b4f42 |
---|---|
1 /** | |
2 ****************************************************************************** | |
3 * @file stm32f4xx_hal_flash.h | |
4 * @author MCD Application Team | |
5 * @version V1.2.0 | |
6 * @date 26-December-2014 | |
7 * @brief Header file of FLASH HAL module. | |
8 ****************************************************************************** | |
9 * @attention | |
10 * | |
11 * <h2><center>© COPYRIGHT(c) 2014 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 __STM32F4xx_HAL_FLASH_H | |
40 #define __STM32F4xx_HAL_FLASH_H | |
41 | |
42 #ifdef __cplusplus | |
43 extern "C" { | |
44 #endif | |
45 | |
46 /* Includes ------------------------------------------------------------------*/ | |
47 #include "stm32f4xx_hal_def.h" | |
48 | |
49 /** @addtogroup STM32F4xx_HAL_Driver | |
50 * @{ | |
51 */ | |
52 | |
53 /** @addtogroup FLASH | |
54 * @{ | |
55 */ | |
56 | |
57 /* Exported types ------------------------------------------------------------*/ | |
58 /** @defgroup FLASH_Exported_Types FLASH Exported Types | |
59 * @{ | |
60 */ | |
61 | |
62 /** | |
63 * @brief FLASH Procedure structure definition | |
64 */ | |
65 typedef enum | |
66 { | |
67 FLASH_PROC_NONE = 0, | |
68 FLASH_PROC_SECTERASE, | |
69 FLASH_PROC_MASSERASE, | |
70 FLASH_PROC_PROGRAM | |
71 } FLASH_ProcedureTypeDef; | |
72 | |
73 /** | |
74 * @brief FLASH handle Structure definition | |
75 */ | |
76 typedef struct | |
77 { | |
78 __IO FLASH_ProcedureTypeDef ProcedureOnGoing; /*Internal variable to indicate which procedure is ongoing or not in IT context*/ | |
79 | |
80 __IO uint32_t NbSectorsToErase; /*Internal variable to save the remaining sectors to erase in IT context*/ | |
81 | |
82 __IO uint8_t VoltageForErase; /*Internal variable to provide voltage range selected by user in IT context*/ | |
83 | |
84 __IO uint32_t Sector; /*Internal variable to define the current sector which is erasing*/ | |
85 | |
86 __IO uint32_t Bank; /*Internal variable to save current bank selected during mass erase*/ | |
87 | |
88 __IO uint32_t Address; /*Internal variable to save address selected for program*/ | |
89 | |
90 HAL_LockTypeDef Lock; /* FLASH locking object */ | |
91 | |
92 __IO uint32_t ErrorCode; /* FLASH error code */ | |
93 | |
94 }FLASH_ProcessTypeDef; | |
95 | |
96 /** | |
97 * @} | |
98 */ | |
99 | |
100 /* Exported constants --------------------------------------------------------*/ | |
101 /** @defgroup FLASH_Exported_Constants FLASH Exported Constants | |
102 * @{ | |
103 */ | |
104 /** @defgroup FLASH_Error_Code FLASH Error Code | |
105 * @brief FLASH Error Code | |
106 * @{ | |
107 */ | |
108 #define HAL_FLASH_ERROR_NONE ((uint32_t)0x00000000) /*!< No error */ | |
109 #define HAL_FLASH_ERROR_RD ((uint32_t)0x00000001) /*!< Read Protection error */ | |
110 #define HAL_FLASH_ERROR_PGS ((uint32_t)0x00000002) /*!< Programming Sequence error */ | |
111 #define HAL_FLASH_ERROR_PGP ((uint32_t)0x00000004) /*!< Programming Parallelism error */ | |
112 #define HAL_FLASH_ERROR_PGA ((uint32_t)0x00000008) /*!< Programming Alignment error */ | |
113 #define HAL_FLASH_ERROR_WRP ((uint32_t)0x00000010) /*!< Write protection error */ | |
114 #define HAL_FLASH_ERROR_OPERATION ((uint32_t)0x00000020) /*!< Operation Error */ | |
115 /** | |
116 * @} | |
117 */ | |
118 | |
119 /** @defgroup FLASH_Type_Program FLASH Type Program | |
120 * @{ | |
121 */ | |
122 #define FLASH_TYPEPROGRAM_BYTE ((uint32_t)0x00) /*!< Program byte (8-bit) at a specified address */ | |
123 #define FLASH_TYPEPROGRAM_HALFWORD ((uint32_t)0x01) /*!< Program a half-word (16-bit) at a specified address */ | |
124 #define FLASH_TYPEPROGRAM_WORD ((uint32_t)0x02) /*!< Program a word (32-bit) at a specified address */ | |
125 #define FLASH_TYPEPROGRAM_DOUBLEWORD ((uint32_t)0x03) /*!< Program a double word (64-bit) at a specified address */ | |
126 /** | |
127 * @} | |
128 */ | |
129 | |
130 /** @defgroup FLASH_Flag_definition FLASH Flag definition | |
131 * @brief Flag definition | |
132 * @{ | |
133 */ | |
134 #define FLASH_FLAG_EOP FLASH_SR_EOP /*!< FLASH End of Operation flag */ | |
135 #define FLASH_FLAG_OPERR FLASH_SR_SOP /*!< FLASH operation Error flag */ | |
136 #define FLASH_FLAG_WRPERR FLASH_SR_WRPERR /*!< FLASH Write protected error flag */ | |
137 #define FLASH_FLAG_PGAERR FLASH_SR_PGAERR /*!< FLASH Programming Alignment error flag */ | |
138 #define FLASH_FLAG_PGPERR FLASH_SR_PGPERR /*!< FLASH Programming Parallelism error flag */ | |
139 #define FLASH_FLAG_PGSERR FLASH_SR_PGSERR /*!< FLASH Programming Sequence error flag */ | |
140 #define FLASH_FLAG_RDERR ((uint32_t)0x00000100) /*!< Read Protection error flag (PCROP) */ | |
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 ((uint32_t)0x02000000) /*!< Error Interrupt source */ | |
152 /** | |
153 * @} | |
154 */ | |
155 | |
156 /** @defgroup FLASH_Program_Parallelism FLASH Program Parallelism | |
157 * @{ | |
158 */ | |
159 #define FLASH_PSIZE_BYTE ((uint32_t)0x00000000) | |
160 #define FLASH_PSIZE_HALF_WORD ((uint32_t)0x00000100) | |
161 #define FLASH_PSIZE_WORD ((uint32_t)0x00000200) | |
162 #define FLASH_PSIZE_DOUBLE_WORD ((uint32_t)0x00000300) | |
163 #define CR_PSIZE_MASK ((uint32_t)0xFFFFFCFF) | |
164 /** | |
165 * @} | |
166 */ | |
167 | |
168 /** @defgroup FLASH_Keys FLASH Keys | |
169 * @{ | |
170 */ | |
171 #define RDP_KEY ((uint16_t)0x00A5) | |
172 #define FLASH_KEY1 ((uint32_t)0x45670123) | |
173 #define FLASH_KEY2 ((uint32_t)0xCDEF89AB) | |
174 #define FLASH_OPT_KEY1 ((uint32_t)0x08192A3B) | |
175 #define FLASH_OPT_KEY2 ((uint32_t)0x4C5D6E7F) | |
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 Enable the FLASH prefetch buffer. | |
198 * @retval none | |
199 */ | |
200 #define __HAL_FLASH_PREFETCH_BUFFER_ENABLE() (FLASH->ACR |= FLASH_ACR_PRFTEN) | |
201 | |
202 /** | |
203 * @brief Disable the FLASH prefetch buffer. | |
204 * @retval none | |
205 */ | |
206 #define __HAL_FLASH_PREFETCH_BUFFER_DISABLE() (FLASH->ACR &= (~FLASH_ACR_PRFTEN)) | |
207 | |
208 /** | |
209 * @brief Enable the FLASH instruction cache. | |
210 * @retval none | |
211 */ | |
212 #define __HAL_FLASH_INSTRUCTION_CACHE_ENABLE() (FLASH->ACR |= FLASH_ACR_ICEN) | |
213 | |
214 /** | |
215 * @brief Disable the FLASH instruction cache. | |
216 * @retval none | |
217 */ | |
218 #define __HAL_FLASH_INSTRUCTION_CACHE_DISABLE() (FLASH->ACR &= (~FLASH_ACR_ICEN)) | |
219 | |
220 /** | |
221 * @brief Enable the FLASH data cache. | |
222 * @retval none | |
223 */ | |
224 #define __HAL_FLASH_DATA_CACHE_ENABLE() (FLASH->ACR |= FLASH_ACR_DCEN) | |
225 | |
226 /** | |
227 * @brief Disable the FLASH data cache. | |
228 * @retval none | |
229 */ | |
230 #define __HAL_FLASH_DATA_CACHE_DISABLE() (FLASH->ACR &= (~FLASH_ACR_DCEN)) | |
231 | |
232 /** | |
233 * @brief Resets the FLASH instruction Cache. | |
234 * @note This function must be used only when the Instruction Cache is disabled. | |
235 * @retval None | |
236 */ | |
237 #define __HAL_FLASH_INSTRUCTION_CACHE_RESET() (FLASH->ACR |= FLASH_ACR_ICRST) | |
238 | |
239 /** | |
240 * @brief Resets the FLASH data Cache. | |
241 * @note This function must be used only when the data Cache is disabled. | |
242 * @retval None | |
243 */ | |
244 #define __HAL_FLASH_DATA_CACHE_RESET() (FLASH->ACR |= FLASH_ACR_DCRST) | |
245 | |
246 /** | |
247 * @brief Enable the specified FLASH interrupt. | |
248 * @param __INTERRUPT__ : FLASH interrupt | |
249 * This parameter can be any combination of the following values: | |
250 * @arg FLASH_IT_EOP: End of FLASH Operation Interrupt | |
251 * @arg FLASH_IT_ERR: Error Interrupt | |
252 * @retval none | |
253 */ | |
254 #define __HAL_FLASH_ENABLE_IT(__INTERRUPT__) (FLASH->CR |= (__INTERRUPT__)) | |
255 | |
256 /** | |
257 * @brief Disable 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_DISABLE_IT(__INTERRUPT__) (FLASH->CR &= ~(uint32_t)(__INTERRUPT__)) | |
265 | |
266 /** | |
267 * @brief Get the specified FLASH flag status. | |
268 * @param __FLAG__: specifies the FLASH flag to check. | |
269 * This parameter can be one of the following values: | |
270 * @arg FLASH_FLAG_EOP : FLASH End of Operation flag | |
271 * @arg FLASH_FLAG_OPERR : FLASH operation Error flag | |
272 * @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag | |
273 * @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag | |
274 * @arg FLASH_FLAG_PGPERR: FLASH Programming Parallelism error flag | |
275 * @arg FLASH_FLAG_PGSERR: FLASH Programming Sequence error flag | |
276 * @arg FLASH_FLAG_RDERR : FLASH Read Protection error flag (PCROP) | |
277 * @arg FLASH_FLAG_BSY : FLASH Busy flag | |
278 * @retval The new state of __FLAG__ (SET or RESET). | |
279 */ | |
280 #define __HAL_FLASH_GET_FLAG(__FLAG__) ((FLASH->SR & (__FLAG__))) | |
281 | |
282 /** | |
283 * @brief Clear the specified FLASH flag. | |
284 * @param __FLAG__: specifies the FLASH flags to clear. | |
285 * This parameter can be any combination of the following values: | |
286 * @arg FLASH_FLAG_EOP : FLASH End of Operation flag | |
287 * @arg FLASH_FLAG_OPERR : FLASH operation Error flag | |
288 * @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag | |
289 * @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag | |
290 * @arg FLASH_FLAG_PGPERR: FLASH Programming Parallelism error flag | |
291 * @arg FLASH_FLAG_PGSERR: FLASH Programming Sequence error flag | |
292 * @arg FLASH_FLAG_RDERR : FLASH Read Protection error flag (PCROP) | |
293 * @retval none | |
294 */ | |
295 #define __HAL_FLASH_CLEAR_FLAG(__FLAG__) (FLASH->SR = (__FLAG__)) | |
296 /** | |
297 * @} | |
298 */ | |
299 | |
300 /* Include FLASH HAL Extension module */ | |
301 #include "stm32f4xx_hal_flash_ex.h" | |
302 #include "stm32f4xx_hal_flash_ramfunc.h" | |
303 | |
304 /* Exported functions --------------------------------------------------------*/ | |
305 /** @addtogroup FLASH_Exported_Functions | |
306 * @{ | |
307 */ | |
308 /** @addtogroup FLASH_Exported_Functions_Group1 | |
309 * @{ | |
310 */ | |
311 /* Program operation functions ***********************************************/ | |
312 HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data); | |
313 HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data); | |
314 /* FLASH IRQ handler method */ | |
315 void HAL_FLASH_IRQHandler(void); | |
316 /* Callbacks in non blocking modes */ | |
317 void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue); | |
318 void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue); | |
319 /** | |
320 * @} | |
321 */ | |
322 | |
323 /** @addtogroup FLASH_Exported_Functions_Group2 | |
324 * @{ | |
325 */ | |
326 /* Peripheral Control functions **********************************************/ | |
327 HAL_StatusTypeDef HAL_FLASH_Unlock(void); | |
328 HAL_StatusTypeDef HAL_FLASH_Lock(void); | |
329 HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void); | |
330 HAL_StatusTypeDef HAL_FLASH_OB_Lock(void); | |
331 /* Option bytes control */ | |
332 HAL_StatusTypeDef HAL_FLASH_OB_Launch(void); | |
333 /** | |
334 * @} | |
335 */ | |
336 | |
337 /** @addtogroup FLASH_Exported_Functions_Group3 | |
338 * @{ | |
339 */ | |
340 /* Peripheral State functions ************************************************/ | |
341 uint32_t HAL_FLASH_GetError(void); | |
342 HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout); | |
343 /** | |
344 * @} | |
345 */ | |
346 | |
347 /** | |
348 * @} | |
349 */ | |
350 /* Private types -------------------------------------------------------------*/ | |
351 /* Private variables ---------------------------------------------------------*/ | |
352 /** @defgroup FLASH_Private_Variables FLASH Private Variables | |
353 * @{ | |
354 */ | |
355 | |
356 /** | |
357 * @} | |
358 */ | |
359 /* Private constants ---------------------------------------------------------*/ | |
360 /** @defgroup FLASH_Private_Constants FLASH Private Constants | |
361 * @{ | |
362 */ | |
363 | |
364 /** | |
365 * @brief ACR register byte 0 (Bits[7:0]) base address | |
366 */ | |
367 #define ACR_BYTE0_ADDRESS ((uint32_t)0x40023C00) | |
368 /** | |
369 * @brief OPTCR register byte 0 (Bits[7:0]) base address | |
370 */ | |
371 #define OPTCR_BYTE0_ADDRESS ((uint32_t)0x40023C14) | |
372 /** | |
373 * @brief OPTCR register byte 1 (Bits[15:8]) base address | |
374 */ | |
375 #define OPTCR_BYTE1_ADDRESS ((uint32_t)0x40023C15) | |
376 /** | |
377 * @brief OPTCR register byte 2 (Bits[23:16]) base address | |
378 */ | |
379 #define OPTCR_BYTE2_ADDRESS ((uint32_t)0x40023C16) | |
380 /** | |
381 * @brief OPTCR register byte 3 (Bits[31:24]) base address | |
382 */ | |
383 #define OPTCR_BYTE3_ADDRESS ((uint32_t)0x40023C17) | |
384 | |
385 /** | |
386 * @} | |
387 */ | |
388 | |
389 /* Private macros ------------------------------------------------------------*/ | |
390 /** @defgroup FLASH_Private_Macros FLASH Private Macros | |
391 * @{ | |
392 */ | |
393 | |
394 /** @defgroup FLASH_IS_FLASH_Definitions FLASH Private macros to check input parameters | |
395 * @{ | |
396 */ | |
397 #define IS_FLASH_TYPEPROGRAM(VALUE)(((VALUE) == FLASH_TYPEPROGRAM_BYTE) || \ | |
398 ((VALUE) == FLASH_TYPEPROGRAM_HALFWORD) || \ | |
399 ((VALUE) == FLASH_TYPEPROGRAM_WORD) || \ | |
400 ((VALUE) == FLASH_TYPEPROGRAM_DOUBLEWORD)) | |
401 /** | |
402 * @} | |
403 */ | |
404 | |
405 /** | |
406 * @} | |
407 */ | |
408 | |
409 /* Private functions ---------------------------------------------------------*/ | |
410 /** @defgroup FLASH_Private_Functions FLASH Private Functions | |
411 * @{ | |
412 */ | |
413 | |
414 /** | |
415 * @} | |
416 */ | |
417 | |
418 /** | |
419 * @} | |
420 */ | |
421 | |
422 /** | |
423 * @} | |
424 */ | |
425 | |
426 #ifdef __cplusplus | |
427 } | |
428 #endif | |
429 | |
430 #endif /* __STM32F4xx_HAL_FLASH_H */ | |
431 | |
432 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |