STM32F4xx_HAL_Driver  1.8.3
stm32f4xx_hal_flash_ex.h
Go to the documentation of this file.
1 
18 /* Define to prevent recursive inclusion -------------------------------------*/
19 #ifndef __STM32F4xx_HAL_FLASH_EX_H
20 #define __STM32F4xx_HAL_FLASH_EX_H
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 /* Includes ------------------------------------------------------------------*/
27 #include "stm32f4xx_hal_def.h"
28 
37 /* Exported types ------------------------------------------------------------*/
45 typedef struct
46 {
47  uint32_t TypeErase;
50  uint32_t Banks;
53  uint32_t Sector;
56  uint32_t NbSectors;
59  uint32_t VoltageRange;
63 
67 typedef struct
68 {
69  uint32_t OptionType;
72  uint32_t WRPState;
75  uint32_t WRPSector;
78  uint32_t Banks;
81  uint32_t RDPLevel;
84  uint32_t BORLevel;
87  uint8_t USERConfig;
90 
94 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
95  defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
96  defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\
97  defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\
98  defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
99 typedef struct
100 {
101  uint32_t OptionType;
104  uint32_t PCROPState;
107 #if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
108  defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
109  uint16_t Sectors;
111 #endif /* STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx ||\
112  STM32F412Cx || STM32F413xx || STM32F423xx */
113 
114 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
115  uint32_t Banks;
118  uint16_t SectorsBank1;
121  uint16_t SectorsBank2;
124  uint8_t BootConfig;
127 #endif /*STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
129 #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx ||
130  STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
135 /* Exported constants --------------------------------------------------------*/
136 
144 #define FLASH_TYPEERASE_SECTORS 0x00000000U
145 #define FLASH_TYPEERASE_MASSERASE 0x00000001U
153 #define FLASH_VOLTAGE_RANGE_1 0x00000000U
154 #define FLASH_VOLTAGE_RANGE_2 0x00000001U
155 #define FLASH_VOLTAGE_RANGE_3 0x00000002U
156 #define FLASH_VOLTAGE_RANGE_4 0x00000003U
164 #define OB_WRPSTATE_DISABLE 0x00000000U
165 #define OB_WRPSTATE_ENABLE 0x00000001U
173 #define OPTIONBYTE_WRP 0x00000001U
174 #define OPTIONBYTE_RDP 0x00000002U
175 #define OPTIONBYTE_USER 0x00000004U
176 #define OPTIONBYTE_BOR 0x00000008U
184 #define OB_RDP_LEVEL_0 ((uint8_t)0xAA)
185 #define OB_RDP_LEVEL_1 ((uint8_t)0x55)
186 #define OB_RDP_LEVEL_2 ((uint8_t)0xCC)
195 #define OB_IWDG_SW ((uint8_t)0x20)
196 #define OB_IWDG_HW ((uint8_t)0x00)
204 #define OB_STOP_NO_RST ((uint8_t)0x40)
205 #define OB_STOP_RST ((uint8_t)0x00)
214 #define OB_STDBY_NO_RST ((uint8_t)0x80)
215 #define OB_STDBY_RST ((uint8_t)0x00)
223 #define OB_BOR_LEVEL3 ((uint8_t)0x00)
224 #define OB_BOR_LEVEL2 ((uint8_t)0x04)
225 #define OB_BOR_LEVEL1 ((uint8_t)0x08)
226 #define OB_BOR_OFF ((uint8_t)0x0C)
231 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
232  defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
233  defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\
234  defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\
235  defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
239 #define OB_PCROP_STATE_DISABLE 0x00000000U
240 #define OB_PCROP_STATE_ENABLE 0x00000001U
244 #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE ||\
245  STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\
246  STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
247 
251 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
252  defined(STM32F469xx) || defined(STM32F479xx)
253 #define OPTIONBYTE_PCROP 0x00000001U
254 #define OPTIONBYTE_BOOTCONFIG 0x00000002U
255 #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
256 
257 #if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
258  defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
259  defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\
260  defined(STM32F423xx)
261 #define OPTIONBYTE_PCROP 0x00000001U
262 #endif /* STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx ||
263  STM32F413xx || STM32F423xx */
271 /*------------------------- STM32F42xxx/STM32F43xxx/STM32F446xx/STM32F469xx/STM32F479xx ----------------------*/
272 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
273  defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
274 #define FLASH_LATENCY_0 FLASH_ACR_LATENCY_0WS
275 #define FLASH_LATENCY_1 FLASH_ACR_LATENCY_1WS
276 #define FLASH_LATENCY_2 FLASH_ACR_LATENCY_2WS
277 #define FLASH_LATENCY_3 FLASH_ACR_LATENCY_3WS
278 #define FLASH_LATENCY_4 FLASH_ACR_LATENCY_4WS
279 #define FLASH_LATENCY_5 FLASH_ACR_LATENCY_5WS
280 #define FLASH_LATENCY_6 FLASH_ACR_LATENCY_6WS
281 #define FLASH_LATENCY_7 FLASH_ACR_LATENCY_7WS
282 #define FLASH_LATENCY_8 FLASH_ACR_LATENCY_8WS
283 #define FLASH_LATENCY_9 FLASH_ACR_LATENCY_9WS
284 #define FLASH_LATENCY_10 FLASH_ACR_LATENCY_10WS
285 #define FLASH_LATENCY_11 FLASH_ACR_LATENCY_11WS
286 #define FLASH_LATENCY_12 FLASH_ACR_LATENCY_12WS
287 #define FLASH_LATENCY_13 FLASH_ACR_LATENCY_13WS
288 #define FLASH_LATENCY_14 FLASH_ACR_LATENCY_14WS
289 #define FLASH_LATENCY_15 FLASH_ACR_LATENCY_15WS
290 #endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
291 /*--------------------------------------------------------------------------------------------------------------*/
292 
293 /*-------------------------- STM32F40xxx/STM32F41xxx/STM32F401xx/STM32F411xx/STM32F423xx -----------------------*/
294 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\
295  defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
296  defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\
297  defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
298 
299 #define FLASH_LATENCY_0 FLASH_ACR_LATENCY_0WS
300 #define FLASH_LATENCY_1 FLASH_ACR_LATENCY_1WS
301 #define FLASH_LATENCY_2 FLASH_ACR_LATENCY_2WS
302 #define FLASH_LATENCY_3 FLASH_ACR_LATENCY_3WS
303 #define FLASH_LATENCY_4 FLASH_ACR_LATENCY_4WS
304 #define FLASH_LATENCY_5 FLASH_ACR_LATENCY_5WS
305 #define FLASH_LATENCY_6 FLASH_ACR_LATENCY_6WS
306 #define FLASH_LATENCY_7 FLASH_ACR_LATENCY_7WS
307 #endif /* STM32F40xxx || STM32F41xxx || STM32F401xx || STM32F410xx || STM32F411xE || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx ||
308  STM32F413xx || STM32F423xx */
309 /*--------------------------------------------------------------------------------------------------------------*/
310 
319 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
320  defined(STM32F469xx) || defined(STM32F479xx)
321 #define FLASH_BANK_1 1U
322 #define FLASH_BANK_2 2U
323 #define FLASH_BANK_BOTH ((uint32_t)FLASH_BANK_1 | FLASH_BANK_2)
324 #endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */
325 
326 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\
327  defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
328  defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
329  defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\
330  defined(STM32F423xx)
331 #define FLASH_BANK_1 1U
332 #endif /* STM32F40xxx || STM32F41xxx || STM32F401xx || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx
333  STM32F413xx || STM32F423xx */
341 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
342  defined(STM32F469xx) || defined(STM32F479xx)
343 #define FLASH_MER_BIT (FLASH_CR_MER1 | FLASH_CR_MER2)
344 #endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */
345 
346 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\
347  defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
348  defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
349  defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\
350  defined(STM32F423xx)
351 #define FLASH_MER_BIT (FLASH_CR_MER)
352 #endif /* STM32F40xxx || STM32F41xxx || STM32F401xx || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx
353  STM32F413xx || STM32F423xx */
361 /*-------------------------------------- STM32F42xxx/STM32F43xxx/STM32F469xx ------------------------------------*/
362 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
363  defined(STM32F469xx) || defined(STM32F479xx)
364 #define FLASH_SECTOR_0 0U
365 #define FLASH_SECTOR_1 1U
366 #define FLASH_SECTOR_2 2U
367 #define FLASH_SECTOR_3 3U
368 #define FLASH_SECTOR_4 4U
369 #define FLASH_SECTOR_5 5U
370 #define FLASH_SECTOR_6 6U
371 #define FLASH_SECTOR_7 7U
372 #define FLASH_SECTOR_8 8U
373 #define FLASH_SECTOR_9 9U
374 #define FLASH_SECTOR_10 10U
375 #define FLASH_SECTOR_11 11U
376 #define FLASH_SECTOR_12 12U
377 #define FLASH_SECTOR_13 13U
378 #define FLASH_SECTOR_14 14U
379 #define FLASH_SECTOR_15 15U
380 #define FLASH_SECTOR_16 16U
381 #define FLASH_SECTOR_17 17U
382 #define FLASH_SECTOR_18 18U
383 #define FLASH_SECTOR_19 19U
384 #define FLASH_SECTOR_20 20U
385 #define FLASH_SECTOR_21 21U
386 #define FLASH_SECTOR_22 22U
387 #define FLASH_SECTOR_23 23U
388 #endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */
389 /*-----------------------------------------------------------------------------------------------------*/
390 
391 /*-------------------------------------- STM32F413xx/STM32F423xx --------------------------------------*/
392 #if defined(STM32F413xx) || defined(STM32F423xx)
393 #define FLASH_SECTOR_0 0U
394 #define FLASH_SECTOR_1 1U
395 #define FLASH_SECTOR_2 2U
396 #define FLASH_SECTOR_3 3U
397 #define FLASH_SECTOR_4 4U
398 #define FLASH_SECTOR_5 5U
399 #define FLASH_SECTOR_6 6U
400 #define FLASH_SECTOR_7 7U
401 #define FLASH_SECTOR_8 8U
402 #define FLASH_SECTOR_9 9U
403 #define FLASH_SECTOR_10 10U
404 #define FLASH_SECTOR_11 11U
405 #define FLASH_SECTOR_12 12U
406 #define FLASH_SECTOR_13 13U
407 #define FLASH_SECTOR_14 14U
408 #define FLASH_SECTOR_15 15U
409 #endif /* STM32F413xx || STM32F423xx */
410 /*-----------------------------------------------------------------------------------------------------*/
411 
412 /*--------------------------------------- STM32F40xxx/STM32F41xxx -------------------------------------*/
413 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F412Zx) ||\
414  defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx)
415 #define FLASH_SECTOR_0 0U
416 #define FLASH_SECTOR_1 1U
417 #define FLASH_SECTOR_2 2U
418 #define FLASH_SECTOR_3 3U
419 #define FLASH_SECTOR_4 4U
420 #define FLASH_SECTOR_5 5U
421 #define FLASH_SECTOR_6 6U
422 #define FLASH_SECTOR_7 7U
423 #define FLASH_SECTOR_8 8U
424 #define FLASH_SECTOR_9 9U
425 #define FLASH_SECTOR_10 10U
426 #define FLASH_SECTOR_11 11U
427 #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */
428 /*-----------------------------------------------------------------------------------------------------*/
429 
430 /*--------------------------------------------- STM32F401xC -------------------------------------------*/
431 #if defined(STM32F401xC)
432 #define FLASH_SECTOR_0 0U
433 #define FLASH_SECTOR_1 1U
434 #define FLASH_SECTOR_2 2U
435 #define FLASH_SECTOR_3 3U
436 #define FLASH_SECTOR_4 4U
437 #define FLASH_SECTOR_5 5U
438 #endif /* STM32F401xC */
439 /*-----------------------------------------------------------------------------------------------------*/
440 
441 /*--------------------------------------------- STM32F410xx -------------------------------------------*/
442 #if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
443 #define FLASH_SECTOR_0 0U
444 #define FLASH_SECTOR_1 1U
445 #define FLASH_SECTOR_2 2U
446 #define FLASH_SECTOR_3 3U
447 #define FLASH_SECTOR_4 4U
448 #endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */
449 /*-----------------------------------------------------------------------------------------------------*/
450 
451 /*---------------------------------- STM32F401xE/STM32F411xE/STM32F446xx ------------------------------*/
452 #if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx)
453 #define FLASH_SECTOR_0 0U
454 #define FLASH_SECTOR_1 1U
455 #define FLASH_SECTOR_2 2U
456 #define FLASH_SECTOR_3 3U
457 #define FLASH_SECTOR_4 4U
458 #define FLASH_SECTOR_5 5U
459 #define FLASH_SECTOR_6 6U
460 #define FLASH_SECTOR_7 7U
461 #endif /* STM32F401xE || STM32F411xE || STM32F446xx */
462 /*-----------------------------------------------------------------------------------------------------*/
463 
471 /*--------------------------- STM32F42xxx/STM32F43xxx/STM32F469xx/STM32F479xx -------------------------*/
472 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
473  defined(STM32F469xx) || defined(STM32F479xx)
474 #define OB_WRP_SECTOR_0 0x00000001U
475 #define OB_WRP_SECTOR_1 0x00000002U
476 #define OB_WRP_SECTOR_2 0x00000004U
477 #define OB_WRP_SECTOR_3 0x00000008U
478 #define OB_WRP_SECTOR_4 0x00000010U
479 #define OB_WRP_SECTOR_5 0x00000020U
480 #define OB_WRP_SECTOR_6 0x00000040U
481 #define OB_WRP_SECTOR_7 0x00000080U
482 #define OB_WRP_SECTOR_8 0x00000100U
483 #define OB_WRP_SECTOR_9 0x00000200U
484 #define OB_WRP_SECTOR_10 0x00000400U
485 #define OB_WRP_SECTOR_11 0x00000800U
486 #define OB_WRP_SECTOR_12 0x00000001U << 12U
487 #define OB_WRP_SECTOR_13 0x00000002U << 12U
488 #define OB_WRP_SECTOR_14 0x00000004U << 12U
489 #define OB_WRP_SECTOR_15 0x00000008U << 12U
490 #define OB_WRP_SECTOR_16 0x00000010U << 12U
491 #define OB_WRP_SECTOR_17 0x00000020U << 12U
492 #define OB_WRP_SECTOR_18 0x00000040U << 12U
493 #define OB_WRP_SECTOR_19 0x00000080U << 12U
494 #define OB_WRP_SECTOR_20 0x00000100U << 12U
495 #define OB_WRP_SECTOR_21 0x00000200U << 12U
496 #define OB_WRP_SECTOR_22 0x00000400U << 12U
497 #define OB_WRP_SECTOR_23 0x00000800U << 12U
498 #define OB_WRP_SECTOR_All 0x00000FFFU << 12U
499 #endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */
500 /*-----------------------------------------------------------------------------------------------------*/
501 
502 /*--------------------------------------- STM32F413xx/STM32F423xx -------------------------------------*/
503 #if defined(STM32F413xx) || defined(STM32F423xx)
504 #define OB_WRP_SECTOR_0 0x00000001U
505 #define OB_WRP_SECTOR_1 0x00000002U
506 #define OB_WRP_SECTOR_2 0x00000004U
507 #define OB_WRP_SECTOR_3 0x00000008U
508 #define OB_WRP_SECTOR_4 0x00000010U
509 #define OB_WRP_SECTOR_5 0x00000020U
510 #define OB_WRP_SECTOR_6 0x00000040U
511 #define OB_WRP_SECTOR_7 0x00000080U
512 #define OB_WRP_SECTOR_8 0x00000100U
513 #define OB_WRP_SECTOR_9 0x00000200U
514 #define OB_WRP_SECTOR_10 0x00000400U
515 #define OB_WRP_SECTOR_11 0x00000800U
516 #define OB_WRP_SECTOR_12 0x00001000U
517 #define OB_WRP_SECTOR_13 0x00002000U
518 #define OB_WRP_SECTOR_14 0x00004000U
519 #define OB_WRP_SECTOR_15 0x00004000U
520 #define OB_WRP_SECTOR_All 0x00007FFFU
521 #endif /* STM32F413xx || STM32F423xx */
522 /*-----------------------------------------------------------------------------------------------------*/
523 
524 /*--------------------------------------- STM32F40xxx/STM32F41xxx -------------------------------------*/
525 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F412Zx) ||\
526  defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx)
527 #define OB_WRP_SECTOR_0 0x00000001U
528 #define OB_WRP_SECTOR_1 0x00000002U
529 #define OB_WRP_SECTOR_2 0x00000004U
530 #define OB_WRP_SECTOR_3 0x00000008U
531 #define OB_WRP_SECTOR_4 0x00000010U
532 #define OB_WRP_SECTOR_5 0x00000020U
533 #define OB_WRP_SECTOR_6 0x00000040U
534 #define OB_WRP_SECTOR_7 0x00000080U
535 #define OB_WRP_SECTOR_8 0x00000100U
536 #define OB_WRP_SECTOR_9 0x00000200U
537 #define OB_WRP_SECTOR_10 0x00000400U
538 #define OB_WRP_SECTOR_11 0x00000800U
539 #define OB_WRP_SECTOR_All 0x00000FFFU
540 #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */
541 /*-----------------------------------------------------------------------------------------------------*/
542 
543 /*--------------------------------------------- STM32F401xC -------------------------------------------*/
544 #if defined(STM32F401xC)
545 #define OB_WRP_SECTOR_0 0x00000001U
546 #define OB_WRP_SECTOR_1 0x00000002U
547 #define OB_WRP_SECTOR_2 0x00000004U
548 #define OB_WRP_SECTOR_3 0x00000008U
549 #define OB_WRP_SECTOR_4 0x00000010U
550 #define OB_WRP_SECTOR_5 0x00000020U
551 #define OB_WRP_SECTOR_All 0x00000FFFU
552 #endif /* STM32F401xC */
553 /*-----------------------------------------------------------------------------------------------------*/
554 
555 /*--------------------------------------------- STM32F410xx -------------------------------------------*/
556 #if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
557 #define OB_WRP_SECTOR_0 0x00000001U
558 #define OB_WRP_SECTOR_1 0x00000002U
559 #define OB_WRP_SECTOR_2 0x00000004U
560 #define OB_WRP_SECTOR_3 0x00000008U
561 #define OB_WRP_SECTOR_4 0x00000010U
562 #define OB_WRP_SECTOR_All 0x00000FFFU
563 #endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */
564 /*-----------------------------------------------------------------------------------------------------*/
565 
566 /*---------------------------------- STM32F401xE/STM32F411xE/STM32F446xx ------------------------------*/
567 #if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx)
568 #define OB_WRP_SECTOR_0 0x00000001U
569 #define OB_WRP_SECTOR_1 0x00000002U
570 #define OB_WRP_SECTOR_2 0x00000004U
571 #define OB_WRP_SECTOR_3 0x00000008U
572 #define OB_WRP_SECTOR_4 0x00000010U
573 #define OB_WRP_SECTOR_5 0x00000020U
574 #define OB_WRP_SECTOR_6 0x00000040U
575 #define OB_WRP_SECTOR_7 0x00000080U
576 #define OB_WRP_SECTOR_All 0x00000FFFU
577 #endif /* STM32F401xE || STM32F411xE || STM32F446xx */
578 /*-----------------------------------------------------------------------------------------------------*/
586 /*-------------------------------- STM32F42xxx/STM32F43xxx/STM32F469xx/STM32F479xx ---------------------------*/
587 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
588  defined(STM32F469xx) || defined(STM32F479xx)
589 #define OB_PCROP_SECTOR_0 0x00000001U
590 #define OB_PCROP_SECTOR_1 0x00000002U
591 #define OB_PCROP_SECTOR_2 0x00000004U
592 #define OB_PCROP_SECTOR_3 0x00000008U
593 #define OB_PCROP_SECTOR_4 0x00000010U
594 #define OB_PCROP_SECTOR_5 0x00000020U
595 #define OB_PCROP_SECTOR_6 0x00000040U
596 #define OB_PCROP_SECTOR_7 0x00000080U
597 #define OB_PCROP_SECTOR_8 0x00000100U
598 #define OB_PCROP_SECTOR_9 0x00000200U
599 #define OB_PCROP_SECTOR_10 0x00000400U
600 #define OB_PCROP_SECTOR_11 0x00000800U
601 #define OB_PCROP_SECTOR_12 0x00000001U
602 #define OB_PCROP_SECTOR_13 0x00000002U
603 #define OB_PCROP_SECTOR_14 0x00000004U
604 #define OB_PCROP_SECTOR_15 0x00000008U
605 #define OB_PCROP_SECTOR_16 0x00000010U
606 #define OB_PCROP_SECTOR_17 0x00000020U
607 #define OB_PCROP_SECTOR_18 0x00000040U
608 #define OB_PCROP_SECTOR_19 0x00000080U
609 #define OB_PCROP_SECTOR_20 0x00000100U
610 #define OB_PCROP_SECTOR_21 0x00000200U
611 #define OB_PCROP_SECTOR_22 0x00000400U
612 #define OB_PCROP_SECTOR_23 0x00000800U
613 #define OB_PCROP_SECTOR_All 0x00000FFFU
614 #endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */
615 /*-----------------------------------------------------------------------------------------------------*/
616 
617 /*------------------------------------- STM32F413xx/STM32F423xx ---------------------------------------*/
618 #if defined(STM32F413xx) || defined(STM32F423xx)
619 #define OB_PCROP_SECTOR_0 0x00000001U
620 #define OB_PCROP_SECTOR_1 0x00000002U
621 #define OB_PCROP_SECTOR_2 0x00000004U
622 #define OB_PCROP_SECTOR_3 0x00000008U
623 #define OB_PCROP_SECTOR_4 0x00000010U
624 #define OB_PCROP_SECTOR_5 0x00000020U
625 #define OB_PCROP_SECTOR_6 0x00000040U
626 #define OB_PCROP_SECTOR_7 0x00000080U
627 #define OB_PCROP_SECTOR_8 0x00000100U
628 #define OB_PCROP_SECTOR_9 0x00000200U
629 #define OB_PCROP_SECTOR_10 0x00000400U
630 #define OB_PCROP_SECTOR_11 0x00000800U
631 #define OB_PCROP_SECTOR_12 0x00001000U
632 #define OB_PCROP_SECTOR_13 0x00002000U
633 #define OB_PCROP_SECTOR_14 0x00004000U
634 #define OB_PCROP_SECTOR_15 0x00004000U
635 #define OB_PCROP_SECTOR_All 0x00007FFFU
636 #endif /* STM32F413xx || STM32F423xx */
637 /*-----------------------------------------------------------------------------------------------------*/
638 
639 /*--------------------------------------------- STM32F401xC -------------------------------------------*/
640 #if defined(STM32F401xC)
641 #define OB_PCROP_SECTOR_0 0x00000001U
642 #define OB_PCROP_SECTOR_1 0x00000002U
643 #define OB_PCROP_SECTOR_2 0x00000004U
644 #define OB_PCROP_SECTOR_3 0x00000008U
645 #define OB_PCROP_SECTOR_4 0x00000010U
646 #define OB_PCROP_SECTOR_5 0x00000020U
647 #define OB_PCROP_SECTOR_All 0x00000FFFU
648 #endif /* STM32F401xC */
649 /*-----------------------------------------------------------------------------------------------------*/
650 
651 /*--------------------------------------------- STM32F410xx -------------------------------------------*/
652 #if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
653 #define OB_PCROP_SECTOR_0 0x00000001U
654 #define OB_PCROP_SECTOR_1 0x00000002U
655 #define OB_PCROP_SECTOR_2 0x00000004U
656 #define OB_PCROP_SECTOR_3 0x00000008U
657 #define OB_PCROP_SECTOR_4 0x00000010U
658 #define OB_PCROP_SECTOR_All 0x00000FFFU
659 #endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */
660 /*-----------------------------------------------------------------------------------------------------*/
661 
662 /*-------------- STM32F401xE/STM32F411xE/STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx/STM32F446xx --*/
663 #if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
664  defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx)
665 #define OB_PCROP_SECTOR_0 0x00000001U
666 #define OB_PCROP_SECTOR_1 0x00000002U
667 #define OB_PCROP_SECTOR_2 0x00000004U
668 #define OB_PCROP_SECTOR_3 0x00000008U
669 #define OB_PCROP_SECTOR_4 0x00000010U
670 #define OB_PCROP_SECTOR_5 0x00000020U
671 #define OB_PCROP_SECTOR_6 0x00000040U
672 #define OB_PCROP_SECTOR_7 0x00000080U
673 #define OB_PCROP_SECTOR_All 0x00000FFFU
674 #endif /* STM32F401xE || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */
675 /*-----------------------------------------------------------------------------------------------------*/
676 
684 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
685  defined(STM32F469xx) || defined(STM32F479xx)
686 #define OB_DUAL_BOOT_ENABLE ((uint8_t)0x10)
687 #define OB_DUAL_BOOT_DISABLE ((uint8_t)0x00)
688 #endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */
696 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
697  defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
698  defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\
699  defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\
700  defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
701 #define OB_PCROP_DESELECTED ((uint8_t)0x00)
702 #define OB_PCROP_SELECTED ((uint8_t)0x80)
703 #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE ||\
704  STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\
705  STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
714 /* Exported macro ------------------------------------------------------------*/
715 
716 /* Exported functions --------------------------------------------------------*/
724 /* Extension Program operation functions *************************************/
725 HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *SectorError);
726 HAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit);
727 HAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit);
729 
730 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
731  defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
732  defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\
733  defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\
734  defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
735 HAL_StatusTypeDef HAL_FLASHEx_AdvOBProgram(FLASH_AdvOBProgramInitTypeDef *pAdvOBInit);
737 HAL_StatusTypeDef HAL_FLASHEx_OB_SelectPCROP(void);
738 HAL_StatusTypeDef HAL_FLASHEx_OB_DeSelectPCROP(void);
739 #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE ||\
740  STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\
741  STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
742 
743 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
744  defined(STM32F469xx) || defined(STM32F479xx)
745 uint16_t HAL_FLASHEx_OB_GetBank2WRP(void);
746 #endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */
754 /* Private types -------------------------------------------------------------*/
755 /* Private variables ---------------------------------------------------------*/
756 /* Private constants ---------------------------------------------------------*/
760 /*--------------------------------- STM32F42xxx/STM32F43xxx/STM32F469xx/STM32F479xx---------------------*/
761 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
762 #define FLASH_SECTOR_TOTAL 24U
763 #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
764 
765 /*-------------------------------------- STM32F413xx/STM32F423xx ---------------------------------------*/
766 #if defined(STM32F413xx) || defined(STM32F423xx)
767 #define FLASH_SECTOR_TOTAL 16U
768 #endif /* STM32F413xx || STM32F423xx */
769 
770 /*--------------------------------------- STM32F40xxx/STM32F41xxx -------------------------------------*/
771 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F412Zx) ||\
772  defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx)
773 #define FLASH_SECTOR_TOTAL 12U
774 #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */
775 
776 /*--------------------------------------------- STM32F401xC -------------------------------------------*/
777 #if defined(STM32F401xC)
778 #define FLASH_SECTOR_TOTAL 6U
779 #endif /* STM32F401xC */
780 
781 /*--------------------------------------------- STM32F410xx -------------------------------------------*/
782 #if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
783 #define FLASH_SECTOR_TOTAL 5U
784 #endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */
785 
786 /*--------------------------------- STM32F401xE/STM32F411xE/STM32F412xG/STM32F446xx -------------------*/
787 #if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx)
788 #define FLASH_SECTOR_TOTAL 8U
789 #endif /* STM32F401xE || STM32F411xE || STM32F446xx */
790 
794 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
795 #define OPTCR1_BYTE2_ADDRESS 0x40023C1AU
796 #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
797 
802 /* Private macros ------------------------------------------------------------*/
811 #define IS_FLASH_TYPEERASE(VALUE)(((VALUE) == FLASH_TYPEERASE_SECTORS) || \
812  ((VALUE) == FLASH_TYPEERASE_MASSERASE))
813 
814 #define IS_VOLTAGERANGE(RANGE)(((RANGE) == FLASH_VOLTAGE_RANGE_1) || \
815  ((RANGE) == FLASH_VOLTAGE_RANGE_2) || \
816  ((RANGE) == FLASH_VOLTAGE_RANGE_3) || \
817  ((RANGE) == FLASH_VOLTAGE_RANGE_4))
818 
819 #define IS_WRPSTATE(VALUE)(((VALUE) == OB_WRPSTATE_DISABLE) || \
820  ((VALUE) == OB_WRPSTATE_ENABLE))
821 
822 #define IS_OPTIONBYTE(VALUE)(((VALUE) <= (OPTIONBYTE_WRP|OPTIONBYTE_RDP|OPTIONBYTE_USER|OPTIONBYTE_BOR)))
823 
824 #define IS_OB_RDP_LEVEL(LEVEL) (((LEVEL) == OB_RDP_LEVEL_0) ||\
825  ((LEVEL) == OB_RDP_LEVEL_1) ||\
826  ((LEVEL) == OB_RDP_LEVEL_2))
827 
828 #define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW))
829 
830 #define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NO_RST) || ((SOURCE) == OB_STOP_RST))
831 
832 #define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NO_RST) || ((SOURCE) == OB_STDBY_RST))
833 
834 #define IS_OB_BOR_LEVEL(LEVEL) (((LEVEL) == OB_BOR_LEVEL1) || ((LEVEL) == OB_BOR_LEVEL2) ||\
835  ((LEVEL) == OB_BOR_LEVEL3) || ((LEVEL) == OB_BOR_OFF))
836 
837 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
838  defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
839  defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\
840  defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\
841  defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
842 #define IS_PCROPSTATE(VALUE)(((VALUE) == OB_PCROP_STATE_DISABLE) || \
843  ((VALUE) == OB_PCROP_STATE_ENABLE))
844 #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE ||\
845  STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\
846  STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
847 
848 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
849  defined(STM32F469xx) || defined(STM32F479xx)
850 #define IS_OBEX(VALUE)(((VALUE) == OPTIONBYTE_PCROP) || \
851  ((VALUE) == OPTIONBYTE_BOOTCONFIG))
852 #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
853 
854 #if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
855  defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
856  defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\
857  defined(STM32F423xx)
858 #define IS_OBEX(VALUE)(((VALUE) == OPTIONBYTE_PCROP))
859 #endif /* STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx ||\
860  STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
861 
862 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
863  defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
864 #define IS_FLASH_LATENCY(LATENCY) (((LATENCY) == FLASH_LATENCY_0) || \
865  ((LATENCY) == FLASH_LATENCY_1) || \
866  ((LATENCY) == FLASH_LATENCY_2) || \
867  ((LATENCY) == FLASH_LATENCY_3) || \
868  ((LATENCY) == FLASH_LATENCY_4) || \
869  ((LATENCY) == FLASH_LATENCY_5) || \
870  ((LATENCY) == FLASH_LATENCY_6) || \
871  ((LATENCY) == FLASH_LATENCY_7) || \
872  ((LATENCY) == FLASH_LATENCY_8) || \
873  ((LATENCY) == FLASH_LATENCY_9) || \
874  ((LATENCY) == FLASH_LATENCY_10) || \
875  ((LATENCY) == FLASH_LATENCY_11) || \
876  ((LATENCY) == FLASH_LATENCY_12) || \
877  ((LATENCY) == FLASH_LATENCY_13) || \
878  ((LATENCY) == FLASH_LATENCY_14) || \
879  ((LATENCY) == FLASH_LATENCY_15))
880 #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
881 
882 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\
883  defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
884  defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\
885  defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
886 #define IS_FLASH_LATENCY(LATENCY) (((LATENCY) == FLASH_LATENCY_0) || \
887  ((LATENCY) == FLASH_LATENCY_1) || \
888  ((LATENCY) == FLASH_LATENCY_2) || \
889  ((LATENCY) == FLASH_LATENCY_3) || \
890  ((LATENCY) == FLASH_LATENCY_4) || \
891  ((LATENCY) == FLASH_LATENCY_5) || \
892  ((LATENCY) == FLASH_LATENCY_6) || \
893  ((LATENCY) == FLASH_LATENCY_7))
894 #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F412Zx || STM32F412Vx ||\
895  STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
896 
897 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
898 #define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1) || \
899  ((BANK) == FLASH_BANK_2) || \
900  ((BANK) == FLASH_BANK_BOTH))
901 #endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */
902 
903 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\
904  defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
905  defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
906  defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\
907  defined(STM32F423xx)
908 #define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1))
909 #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx ||\
910  STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
911 
912 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
913 #define IS_FLASH_SECTOR(SECTOR) ( ((SECTOR) == FLASH_SECTOR_0) || ((SECTOR) == FLASH_SECTOR_1) ||\
914  ((SECTOR) == FLASH_SECTOR_2) || ((SECTOR) == FLASH_SECTOR_3) ||\
915  ((SECTOR) == FLASH_SECTOR_4) || ((SECTOR) == FLASH_SECTOR_5) ||\
916  ((SECTOR) == FLASH_SECTOR_6) || ((SECTOR) == FLASH_SECTOR_7) ||\
917  ((SECTOR) == FLASH_SECTOR_8) || ((SECTOR) == FLASH_SECTOR_9) ||\
918  ((SECTOR) == FLASH_SECTOR_10) || ((SECTOR) == FLASH_SECTOR_11) ||\
919  ((SECTOR) == FLASH_SECTOR_12) || ((SECTOR) == FLASH_SECTOR_13) ||\
920  ((SECTOR) == FLASH_SECTOR_14) || ((SECTOR) == FLASH_SECTOR_15) ||\
921  ((SECTOR) == FLASH_SECTOR_16) || ((SECTOR) == FLASH_SECTOR_17) ||\
922  ((SECTOR) == FLASH_SECTOR_18) || ((SECTOR) == FLASH_SECTOR_19) ||\
923  ((SECTOR) == FLASH_SECTOR_20) || ((SECTOR) == FLASH_SECTOR_21) ||\
924  ((SECTOR) == FLASH_SECTOR_22) || ((SECTOR) == FLASH_SECTOR_23))
925 #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
926 
927 #if defined(STM32F413xx) || defined(STM32F423xx)
928 #define IS_FLASH_SECTOR(SECTOR) ( ((SECTOR) == FLASH_SECTOR_0) || ((SECTOR) == FLASH_SECTOR_1) ||\
929  ((SECTOR) == FLASH_SECTOR_2) || ((SECTOR) == FLASH_SECTOR_3) ||\
930  ((SECTOR) == FLASH_SECTOR_4) || ((SECTOR) == FLASH_SECTOR_5) ||\
931  ((SECTOR) == FLASH_SECTOR_6) || ((SECTOR) == FLASH_SECTOR_7) ||\
932  ((SECTOR) == FLASH_SECTOR_8) || ((SECTOR) == FLASH_SECTOR_9) ||\
933  ((SECTOR) == FLASH_SECTOR_10) || ((SECTOR) == FLASH_SECTOR_11) ||\
934  ((SECTOR) == FLASH_SECTOR_12) || ((SECTOR) == FLASH_SECTOR_13) ||\
935  ((SECTOR) == FLASH_SECTOR_14) || ((SECTOR) == FLASH_SECTOR_15))
936 #endif /* STM32F413xx || STM32F423xx */
937 
938 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F412Zx) ||\
939  defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx)
940 #define IS_FLASH_SECTOR(SECTOR) (((SECTOR) == FLASH_SECTOR_0) || ((SECTOR) == FLASH_SECTOR_1) ||\
941  ((SECTOR) == FLASH_SECTOR_2) || ((SECTOR) == FLASH_SECTOR_3) ||\
942  ((SECTOR) == FLASH_SECTOR_4) || ((SECTOR) == FLASH_SECTOR_5) ||\
943  ((SECTOR) == FLASH_SECTOR_6) || ((SECTOR) == FLASH_SECTOR_7) ||\
944  ((SECTOR) == FLASH_SECTOR_8) || ((SECTOR) == FLASH_SECTOR_9) ||\
945  ((SECTOR) == FLASH_SECTOR_10) || ((SECTOR) == FLASH_SECTOR_11))
946 #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */
947 
948 #if defined(STM32F401xC)
949 #define IS_FLASH_SECTOR(SECTOR) (((SECTOR) == FLASH_SECTOR_0) || ((SECTOR) == FLASH_SECTOR_1) ||\
950  ((SECTOR) == FLASH_SECTOR_2) || ((SECTOR) == FLASH_SECTOR_3) ||\
951  ((SECTOR) == FLASH_SECTOR_4) || ((SECTOR) == FLASH_SECTOR_5))
952 #endif /* STM32F401xC */
953 
954 #if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
955 #define IS_FLASH_SECTOR(SECTOR) (((SECTOR) == FLASH_SECTOR_0) || ((SECTOR) == FLASH_SECTOR_1) ||\
956  ((SECTOR) == FLASH_SECTOR_2) || ((SECTOR) == FLASH_SECTOR_3) ||\
957  ((SECTOR) == FLASH_SECTOR_4))
958 #endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */
959 
960 #if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx)
961 #define IS_FLASH_SECTOR(SECTOR) (((SECTOR) == FLASH_SECTOR_0) || ((SECTOR) == FLASH_SECTOR_1) ||\
962  ((SECTOR) == FLASH_SECTOR_2) || ((SECTOR) == FLASH_SECTOR_3) ||\
963  ((SECTOR) == FLASH_SECTOR_4) || ((SECTOR) == FLASH_SECTOR_5) ||\
964  ((SECTOR) == FLASH_SECTOR_6) || ((SECTOR) == FLASH_SECTOR_7))
965 #endif /* STM32F401xE || STM32F411xE || STM32F446xx */
966 
967 #define IS_FLASH_ADDRESS(ADDRESS) ((((ADDRESS) >= FLASH_BASE) && ((ADDRESS) <= FLASH_END)) || \
968  (((ADDRESS) >= FLASH_OTP_BASE) && ((ADDRESS) <= FLASH_OTP_END)))
969 
970 #define IS_FLASH_NBSECTORS(NBSECTORS) (((NBSECTORS) != 0) && ((NBSECTORS) <= FLASH_SECTOR_TOTAL))
971 
972 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
973 #define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFF000000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
974 #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
975 
976 #if defined(STM32F413xx) || defined(STM32F423xx)
977 #define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFF8000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
978 #endif /* STM32F413xx || STM32F423xx */
979 
980 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)
981 #define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
982 #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */
983 
984 #if defined(STM32F401xC)
985 #define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
986 #endif /* STM32F401xC */
987 
988 #if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
989 #define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
990 #endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */
991 
992 #if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\
993  defined(STM32F412Rx) || defined(STM32F412Cx)
994 #define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
995 #endif /* STM32F401xE || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */
996 
997 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
998 #define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
999 #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
1000 
1001 #if defined(STM32F413xx) || defined(STM32F423xx)
1002 #define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFF8000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
1003 #endif /* STM32F413xx || STM32F423xx */
1004 
1005 #if defined(STM32F401xC)
1006 #define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
1007 #endif /* STM32F401xC */
1008 
1009 #if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
1010 #define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
1011 #endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */
1012 
1013 #if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\
1014  defined(STM32F412Rx) || defined(STM32F412Cx)
1015 #define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
1016 #endif /* STM32F401xE || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */
1017 
1018 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
1019  defined(STM32F469xx) || defined(STM32F479xx)
1020 #define IS_OB_BOOT(BOOT) (((BOOT) == OB_DUAL_BOOT_ENABLE) || ((BOOT) == OB_DUAL_BOOT_DISABLE))
1021 #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
1022 
1023 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
1024  defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
1025  defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\
1026  defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\
1027  defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
1028 #define IS_OB_PCROP_SELECT(PCROP) (((PCROP) == OB_PCROP_SELECTED) || ((PCROP) == OB_PCROP_DESELECTED))
1029 #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE ||\
1030  STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\
1031  STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
1040 /* Private functions ---------------------------------------------------------*/
1044 void FLASH_Erase_Sector(uint32_t Sector, uint8_t VoltageRange);
1045 void FLASH_FlushCaches(void);
1058 #ifdef __cplusplus
1059 }
1060 #endif
1061 
1062 #endif /* __STM32F4xx_HAL_FLASH_EX_H */
1063 
HAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit)
Program option bytes.
HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *SectorError)
Perform a mass erase or erase the specified FLASH memory sectors.
uint16_t HAL_FLASHEx_OB_GetBank2WRP(void)
Returns the FLASH Write Protection Option Bytes value for Bank 2.
void HAL_FLASHEx_AdvOBGetConfig(FLASH_AdvOBProgramInitTypeDef *pAdvOBInit)
Get the OBEX byte configuration.
void HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit)
Get the Option byte configuration.
HAL_StatusTypeDef HAL_FLASHEx_OB_SelectPCROP(void)
Select the Protection Mode.
HAL_StatusTypeDef HAL_FLASHEx_OB_DeSelectPCROP(void)
Deselect the Protection Mode.
HAL_StatusTypeDef HAL_FLASHEx_AdvOBProgram(FLASH_AdvOBProgramInitTypeDef *pAdvOBInit)
Program option bytes.
HAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit)
Perform a mass erase or erase the specified FLASH memory sectors with interrupt enabled.
FLASH Advanced Option Bytes Program structure definition.
FLASH Erase structure definition.
FLASH Option Bytes Program structure definition.
void FLASH_FlushCaches(void)
Flush the instruction and data caches.
void FLASH_Erase_Sector(uint32_t Sector, uint8_t VoltageRange)
Erase the specified FLASH memory sector.
This file contains HAL common defines, enumeration, macros and structures definitions.