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)
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)
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.
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.