19#ifndef __STM32F4xx_HAL_FLASH_EX_H
20#define __STM32F4xx_HAL_FLASH_EX_H
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)
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)
114#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
118 uint16_t SectorsBank1;
121 uint16_t SectorsBank2;
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
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
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) ||\
261#define OPTIONBYTE_PCROP 0x00000001U
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
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)
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
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)
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) ||\
331#define FLASH_BANK_1 1U
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)
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) ||\
351#define FLASH_MER_BIT (FLASH_CR_MER)
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)
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)
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)
743#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
744 defined(STM32F469xx) || defined(STM32F479xx)
745uint16_t HAL_FLASHEx_OB_GetBank2WRP(
void);
761#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
762#define FLASH_SECTOR_TOTAL 24U
766#if defined(STM32F413xx) || defined(STM32F423xx)
767#define FLASH_SECTOR_TOTAL 16U
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
777#if defined(STM32F401xC)
778#define FLASH_SECTOR_TOTAL 6U
782#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
783#define FLASH_SECTOR_TOTAL 5U
787#if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx)
788#define FLASH_SECTOR_TOTAL 8U
794#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
795#define OPTCR1_BYTE2_ADDRESS 0x40023C1AU
811#define IS_FLASH_TYPEERASE(VALUE)(((VALUE) == FLASH_TYPEERASE_SECTORS) || \
812 ((VALUE) == FLASH_TYPEERASE_MASSERASE))
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))
819#define IS_WRPSTATE(VALUE)(((VALUE) == OB_WRPSTATE_DISABLE) || \
820 ((VALUE) == OB_WRPSTATE_ENABLE))
822#define IS_OPTIONBYTE(VALUE)(((VALUE) <= (OPTIONBYTE_WRP|OPTIONBYTE_RDP|OPTIONBYTE_USER|OPTIONBYTE_BOR)))
824#define IS_OB_RDP_LEVEL(LEVEL) (((LEVEL) == OB_RDP_LEVEL_0) ||\
825 ((LEVEL) == OB_RDP_LEVEL_1) ||\
826 ((LEVEL) == OB_RDP_LEVEL_2))
828#define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW))
830#define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NO_RST) || ((SOURCE) == OB_STOP_RST))
832#define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NO_RST) || ((SOURCE) == OB_STDBY_RST))
834#define IS_OB_BOR_LEVEL(LEVEL) (((LEVEL) == OB_BOR_LEVEL1) || ((LEVEL) == OB_BOR_LEVEL2) ||\
835 ((LEVEL) == OB_BOR_LEVEL3) || ((LEVEL) == OB_BOR_OFF))
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))
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))
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) ||\
858#define IS_OBEX(VALUE)(((VALUE) == OPTIONBYTE_PCROP))
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))
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))
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))
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) ||\
908#define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1))
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))
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))
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))
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))
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))
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))
967#define IS_FLASH_ADDRESS(ADDRESS) ((((ADDRESS) >= FLASH_BASE) && ((ADDRESS) <= FLASH_END)) || \
968 (((ADDRESS) >= FLASH_OTP_BASE) && ((ADDRESS) <= FLASH_OTP_END)))
970#define IS_FLASH_NBSECTORS(NBSECTORS) (((NBSECTORS) != 0) && ((NBSECTORS) <= FLASH_SECTOR_TOTAL))
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))
976#if defined(STM32F413xx) || defined(STM32F423xx)
977#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFF8000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
980#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)
981#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
984#if defined(STM32F401xC)
985#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
988#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
989#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
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))
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))
1001#if defined(STM32F413xx) || defined(STM32F423xx)
1002#define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFF8000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
1005#if defined(STM32F401xC)
1006#define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
1009#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
1010#define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
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))
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))
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))
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.
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.
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.
HAL_StatusTypeDef
HAL Status structures definition
FLASH Advanced Option Bytes Program structure definition.
FLASH Erase structure definition.
FLASH Option Bytes Program structure definition.