21 #ifndef __STM32F4xx_HAL_FLASH_EX_H
22 #define __STM32F4xx_HAL_FLASH_EX_H
61 uint32_t VoltageRange;
96 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
97 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
98 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\
99 defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\
100 defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
109 #if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
110 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
116 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
120 uint16_t SectorsBank1;
123 uint16_t SectorsBank2;
130 }FLASH_AdvOBProgramInitTypeDef;
146 #define FLASH_TYPEERASE_SECTORS 0x00000000U
147 #define FLASH_TYPEERASE_MASSERASE 0x00000001U
155 #define FLASH_VOLTAGE_RANGE_1 0x00000000U
156 #define FLASH_VOLTAGE_RANGE_2 0x00000001U
157 #define FLASH_VOLTAGE_RANGE_3 0x00000002U
158 #define FLASH_VOLTAGE_RANGE_4 0x00000003U
166 #define OB_WRPSTATE_DISABLE 0x00000000U
167 #define OB_WRPSTATE_ENABLE 0x00000001U
175 #define OPTIONBYTE_WRP 0x00000001U
176 #define OPTIONBYTE_RDP 0x00000002U
177 #define OPTIONBYTE_USER 0x00000004U
178 #define OPTIONBYTE_BOR 0x00000008U
186 #define OB_RDP_LEVEL_0 ((uint8_t)0xAA)
187 #define OB_RDP_LEVEL_1 ((uint8_t)0x55)
188 #define OB_RDP_LEVEL_2 ((uint8_t)0xCC)
197 #define OB_IWDG_SW ((uint8_t)0x20)
198 #define OB_IWDG_HW ((uint8_t)0x00)
206 #define OB_STOP_NO_RST ((uint8_t)0x40)
207 #define OB_STOP_RST ((uint8_t)0x00)
216 #define OB_STDBY_NO_RST ((uint8_t)0x80)
217 #define OB_STDBY_RST ((uint8_t)0x00)
225 #define OB_BOR_LEVEL3 ((uint8_t)0x00)
226 #define OB_BOR_LEVEL2 ((uint8_t)0x04)
227 #define OB_BOR_LEVEL1 ((uint8_t)0x08)
228 #define OB_BOR_OFF ((uint8_t)0x0C)
233 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
234 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
235 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\
236 defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\
237 defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
241 #define OB_PCROP_STATE_DISABLE 0x00000000U
242 #define OB_PCROP_STATE_ENABLE 0x00000001U
253 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
254 defined(STM32F469xx) || defined(STM32F479xx)
255 #define OPTIONBYTE_PCROP 0x00000001U
256 #define OPTIONBYTE_BOOTCONFIG 0x00000002U
259 #if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
260 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
261 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\
263 #define OPTIONBYTE_PCROP 0x00000001U
274 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
275 defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
276 #define FLASH_LATENCY_0 FLASH_ACR_LATENCY_0WS
277 #define FLASH_LATENCY_1 FLASH_ACR_LATENCY_1WS
278 #define FLASH_LATENCY_2 FLASH_ACR_LATENCY_2WS
279 #define FLASH_LATENCY_3 FLASH_ACR_LATENCY_3WS
280 #define FLASH_LATENCY_4 FLASH_ACR_LATENCY_4WS
281 #define FLASH_LATENCY_5 FLASH_ACR_LATENCY_5WS
282 #define FLASH_LATENCY_6 FLASH_ACR_LATENCY_6WS
283 #define FLASH_LATENCY_7 FLASH_ACR_LATENCY_7WS
284 #define FLASH_LATENCY_8 FLASH_ACR_LATENCY_8WS
285 #define FLASH_LATENCY_9 FLASH_ACR_LATENCY_9WS
286 #define FLASH_LATENCY_10 FLASH_ACR_LATENCY_10WS
287 #define FLASH_LATENCY_11 FLASH_ACR_LATENCY_11WS
288 #define FLASH_LATENCY_12 FLASH_ACR_LATENCY_12WS
289 #define FLASH_LATENCY_13 FLASH_ACR_LATENCY_13WS
290 #define FLASH_LATENCY_14 FLASH_ACR_LATENCY_14WS
291 #define FLASH_LATENCY_15 FLASH_ACR_LATENCY_15WS
296 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\
297 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
298 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\
299 defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
301 #define FLASH_LATENCY_0 FLASH_ACR_LATENCY_0WS
302 #define FLASH_LATENCY_1 FLASH_ACR_LATENCY_1WS
303 #define FLASH_LATENCY_2 FLASH_ACR_LATENCY_2WS
304 #define FLASH_LATENCY_3 FLASH_ACR_LATENCY_3WS
305 #define FLASH_LATENCY_4 FLASH_ACR_LATENCY_4WS
306 #define FLASH_LATENCY_5 FLASH_ACR_LATENCY_5WS
307 #define FLASH_LATENCY_6 FLASH_ACR_LATENCY_6WS
308 #define FLASH_LATENCY_7 FLASH_ACR_LATENCY_7WS
321 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
322 defined(STM32F469xx) || defined(STM32F479xx)
323 #define FLASH_BANK_1 1U
324 #define FLASH_BANK_2 2U
325 #define FLASH_BANK_BOTH ((uint32_t)FLASH_BANK_1 | FLASH_BANK_2)
328 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\
329 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
330 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
331 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\
333 #define FLASH_BANK_1 1U
343 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
344 defined(STM32F469xx) || defined(STM32F479xx)
345 #define FLASH_MER_BIT (FLASH_CR_MER1 | FLASH_CR_MER2)
348 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\
349 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
350 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
351 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\
353 #define FLASH_MER_BIT (FLASH_CR_MER)
364 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
365 defined(STM32F469xx) || defined(STM32F479xx)
366 #define FLASH_SECTOR_0 0U
367 #define FLASH_SECTOR_1 1U
368 #define FLASH_SECTOR_2 2U
369 #define FLASH_SECTOR_3 3U
370 #define FLASH_SECTOR_4 4U
371 #define FLASH_SECTOR_5 5U
372 #define FLASH_SECTOR_6 6U
373 #define FLASH_SECTOR_7 7U
374 #define FLASH_SECTOR_8 8U
375 #define FLASH_SECTOR_9 9U
376 #define FLASH_SECTOR_10 10U
377 #define FLASH_SECTOR_11 11U
378 #define FLASH_SECTOR_12 12U
379 #define FLASH_SECTOR_13 13U
380 #define FLASH_SECTOR_14 14U
381 #define FLASH_SECTOR_15 15U
382 #define FLASH_SECTOR_16 16U
383 #define FLASH_SECTOR_17 17U
384 #define FLASH_SECTOR_18 18U
385 #define FLASH_SECTOR_19 19U
386 #define FLASH_SECTOR_20 20U
387 #define FLASH_SECTOR_21 21U
388 #define FLASH_SECTOR_22 22U
389 #define FLASH_SECTOR_23 23U
394 #if defined(STM32F413xx) || defined(STM32F423xx)
395 #define FLASH_SECTOR_0 0U
396 #define FLASH_SECTOR_1 1U
397 #define FLASH_SECTOR_2 2U
398 #define FLASH_SECTOR_3 3U
399 #define FLASH_SECTOR_4 4U
400 #define FLASH_SECTOR_5 5U
401 #define FLASH_SECTOR_6 6U
402 #define FLASH_SECTOR_7 7U
403 #define FLASH_SECTOR_8 8U
404 #define FLASH_SECTOR_9 9U
405 #define FLASH_SECTOR_10 10U
406 #define FLASH_SECTOR_11 11U
407 #define FLASH_SECTOR_12 12U
408 #define FLASH_SECTOR_13 13U
409 #define FLASH_SECTOR_14 14U
410 #define FLASH_SECTOR_15 15U
415 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F412Zx) ||\
416 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx)
417 #define FLASH_SECTOR_0 0U
418 #define FLASH_SECTOR_1 1U
419 #define FLASH_SECTOR_2 2U
420 #define FLASH_SECTOR_3 3U
421 #define FLASH_SECTOR_4 4U
422 #define FLASH_SECTOR_5 5U
423 #define FLASH_SECTOR_6 6U
424 #define FLASH_SECTOR_7 7U
425 #define FLASH_SECTOR_8 8U
426 #define FLASH_SECTOR_9 9U
427 #define FLASH_SECTOR_10 10U
428 #define FLASH_SECTOR_11 11U
433 #if defined(STM32F401xC)
434 #define FLASH_SECTOR_0 0U
435 #define FLASH_SECTOR_1 1U
436 #define FLASH_SECTOR_2 2U
437 #define FLASH_SECTOR_3 3U
438 #define FLASH_SECTOR_4 4U
439 #define FLASH_SECTOR_5 5U
444 #if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
445 #define FLASH_SECTOR_0 0U
446 #define FLASH_SECTOR_1 1U
447 #define FLASH_SECTOR_2 2U
448 #define FLASH_SECTOR_3 3U
449 #define FLASH_SECTOR_4 4U
454 #if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx)
455 #define FLASH_SECTOR_0 0U
456 #define FLASH_SECTOR_1 1U
457 #define FLASH_SECTOR_2 2U
458 #define FLASH_SECTOR_3 3U
459 #define FLASH_SECTOR_4 4U
460 #define FLASH_SECTOR_5 5U
461 #define FLASH_SECTOR_6 6U
462 #define FLASH_SECTOR_7 7U
474 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
475 defined(STM32F469xx) || defined(STM32F479xx)
476 #define OB_WRP_SECTOR_0 0x00000001U
477 #define OB_WRP_SECTOR_1 0x00000002U
478 #define OB_WRP_SECTOR_2 0x00000004U
479 #define OB_WRP_SECTOR_3 0x00000008U
480 #define OB_WRP_SECTOR_4 0x00000010U
481 #define OB_WRP_SECTOR_5 0x00000020U
482 #define OB_WRP_SECTOR_6 0x00000040U
483 #define OB_WRP_SECTOR_7 0x00000080U
484 #define OB_WRP_SECTOR_8 0x00000100U
485 #define OB_WRP_SECTOR_9 0x00000200U
486 #define OB_WRP_SECTOR_10 0x00000400U
487 #define OB_WRP_SECTOR_11 0x00000800U
488 #define OB_WRP_SECTOR_12 0x00000001U << 12U
489 #define OB_WRP_SECTOR_13 0x00000002U << 12U
490 #define OB_WRP_SECTOR_14 0x00000004U << 12U
491 #define OB_WRP_SECTOR_15 0x00000008U << 12U
492 #define OB_WRP_SECTOR_16 0x00000010U << 12U
493 #define OB_WRP_SECTOR_17 0x00000020U << 12U
494 #define OB_WRP_SECTOR_18 0x00000040U << 12U
495 #define OB_WRP_SECTOR_19 0x00000080U << 12U
496 #define OB_WRP_SECTOR_20 0x00000100U << 12U
497 #define OB_WRP_SECTOR_21 0x00000200U << 12U
498 #define OB_WRP_SECTOR_22 0x00000400U << 12U
499 #define OB_WRP_SECTOR_23 0x00000800U << 12U
500 #define OB_WRP_SECTOR_All 0x00000FFFU << 12U
505 #if defined(STM32F413xx) || defined(STM32F423xx)
506 #define OB_WRP_SECTOR_0 0x00000001U
507 #define OB_WRP_SECTOR_1 0x00000002U
508 #define OB_WRP_SECTOR_2 0x00000004U
509 #define OB_WRP_SECTOR_3 0x00000008U
510 #define OB_WRP_SECTOR_4 0x00000010U
511 #define OB_WRP_SECTOR_5 0x00000020U
512 #define OB_WRP_SECTOR_6 0x00000040U
513 #define OB_WRP_SECTOR_7 0x00000080U
514 #define OB_WRP_SECTOR_8 0x00000100U
515 #define OB_WRP_SECTOR_9 0x00000200U
516 #define OB_WRP_SECTOR_10 0x00000400U
517 #define OB_WRP_SECTOR_11 0x00000800U
518 #define OB_WRP_SECTOR_12 0x00001000U
519 #define OB_WRP_SECTOR_13 0x00002000U
520 #define OB_WRP_SECTOR_14 0x00004000U
521 #define OB_WRP_SECTOR_15 0x00004000U
522 #define OB_WRP_SECTOR_All 0x00007FFFU
527 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F412Zx) ||\
528 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx)
529 #define OB_WRP_SECTOR_0 0x00000001U
530 #define OB_WRP_SECTOR_1 0x00000002U
531 #define OB_WRP_SECTOR_2 0x00000004U
532 #define OB_WRP_SECTOR_3 0x00000008U
533 #define OB_WRP_SECTOR_4 0x00000010U
534 #define OB_WRP_SECTOR_5 0x00000020U
535 #define OB_WRP_SECTOR_6 0x00000040U
536 #define OB_WRP_SECTOR_7 0x00000080U
537 #define OB_WRP_SECTOR_8 0x00000100U
538 #define OB_WRP_SECTOR_9 0x00000200U
539 #define OB_WRP_SECTOR_10 0x00000400U
540 #define OB_WRP_SECTOR_11 0x00000800U
541 #define OB_WRP_SECTOR_All 0x00000FFFU
546 #if defined(STM32F401xC)
547 #define OB_WRP_SECTOR_0 0x00000001U
548 #define OB_WRP_SECTOR_1 0x00000002U
549 #define OB_WRP_SECTOR_2 0x00000004U
550 #define OB_WRP_SECTOR_3 0x00000008U
551 #define OB_WRP_SECTOR_4 0x00000010U
552 #define OB_WRP_SECTOR_5 0x00000020U
553 #define OB_WRP_SECTOR_All 0x00000FFFU
558 #if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
559 #define OB_WRP_SECTOR_0 0x00000001U
560 #define OB_WRP_SECTOR_1 0x00000002U
561 #define OB_WRP_SECTOR_2 0x00000004U
562 #define OB_WRP_SECTOR_3 0x00000008U
563 #define OB_WRP_SECTOR_4 0x00000010U
564 #define OB_WRP_SECTOR_All 0x00000FFFU
569 #if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx)
570 #define OB_WRP_SECTOR_0 0x00000001U
571 #define OB_WRP_SECTOR_1 0x00000002U
572 #define OB_WRP_SECTOR_2 0x00000004U
573 #define OB_WRP_SECTOR_3 0x00000008U
574 #define OB_WRP_SECTOR_4 0x00000010U
575 #define OB_WRP_SECTOR_5 0x00000020U
576 #define OB_WRP_SECTOR_6 0x00000040U
577 #define OB_WRP_SECTOR_7 0x00000080U
578 #define OB_WRP_SECTOR_All 0x00000FFFU
589 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
590 defined(STM32F469xx) || defined(STM32F479xx)
591 #define OB_PCROP_SECTOR_0 0x00000001U
592 #define OB_PCROP_SECTOR_1 0x00000002U
593 #define OB_PCROP_SECTOR_2 0x00000004U
594 #define OB_PCROP_SECTOR_3 0x00000008U
595 #define OB_PCROP_SECTOR_4 0x00000010U
596 #define OB_PCROP_SECTOR_5 0x00000020U
597 #define OB_PCROP_SECTOR_6 0x00000040U
598 #define OB_PCROP_SECTOR_7 0x00000080U
599 #define OB_PCROP_SECTOR_8 0x00000100U
600 #define OB_PCROP_SECTOR_9 0x00000200U
601 #define OB_PCROP_SECTOR_10 0x00000400U
602 #define OB_PCROP_SECTOR_11 0x00000800U
603 #define OB_PCROP_SECTOR_12 0x00000001U
604 #define OB_PCROP_SECTOR_13 0x00000002U
605 #define OB_PCROP_SECTOR_14 0x00000004U
606 #define OB_PCROP_SECTOR_15 0x00000008U
607 #define OB_PCROP_SECTOR_16 0x00000010U
608 #define OB_PCROP_SECTOR_17 0x00000020U
609 #define OB_PCROP_SECTOR_18 0x00000040U
610 #define OB_PCROP_SECTOR_19 0x00000080U
611 #define OB_PCROP_SECTOR_20 0x00000100U
612 #define OB_PCROP_SECTOR_21 0x00000200U
613 #define OB_PCROP_SECTOR_22 0x00000400U
614 #define OB_PCROP_SECTOR_23 0x00000800U
615 #define OB_PCROP_SECTOR_All 0x00000FFFU
620 #if defined(STM32F413xx) || defined(STM32F423xx)
621 #define OB_PCROP_SECTOR_0 0x00000001U
622 #define OB_PCROP_SECTOR_1 0x00000002U
623 #define OB_PCROP_SECTOR_2 0x00000004U
624 #define OB_PCROP_SECTOR_3 0x00000008U
625 #define OB_PCROP_SECTOR_4 0x00000010U
626 #define OB_PCROP_SECTOR_5 0x00000020U
627 #define OB_PCROP_SECTOR_6 0x00000040U
628 #define OB_PCROP_SECTOR_7 0x00000080U
629 #define OB_PCROP_SECTOR_8 0x00000100U
630 #define OB_PCROP_SECTOR_9 0x00000200U
631 #define OB_PCROP_SECTOR_10 0x00000400U
632 #define OB_PCROP_SECTOR_11 0x00000800U
633 #define OB_PCROP_SECTOR_12 0x00001000U
634 #define OB_PCROP_SECTOR_13 0x00002000U
635 #define OB_PCROP_SECTOR_14 0x00004000U
636 #define OB_PCROP_SECTOR_15 0x00004000U
637 #define OB_PCROP_SECTOR_All 0x00007FFFU
642 #if defined(STM32F401xC)
643 #define OB_PCROP_SECTOR_0 0x00000001U
644 #define OB_PCROP_SECTOR_1 0x00000002U
645 #define OB_PCROP_SECTOR_2 0x00000004U
646 #define OB_PCROP_SECTOR_3 0x00000008U
647 #define OB_PCROP_SECTOR_4 0x00000010U
648 #define OB_PCROP_SECTOR_5 0x00000020U
649 #define OB_PCROP_SECTOR_All 0x00000FFFU
654 #if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
655 #define OB_PCROP_SECTOR_0 0x00000001U
656 #define OB_PCROP_SECTOR_1 0x00000002U
657 #define OB_PCROP_SECTOR_2 0x00000004U
658 #define OB_PCROP_SECTOR_3 0x00000008U
659 #define OB_PCROP_SECTOR_4 0x00000010U
660 #define OB_PCROP_SECTOR_All 0x00000FFFU
665 #if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
666 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx)
667 #define OB_PCROP_SECTOR_0 0x00000001U
668 #define OB_PCROP_SECTOR_1 0x00000002U
669 #define OB_PCROP_SECTOR_2 0x00000004U
670 #define OB_PCROP_SECTOR_3 0x00000008U
671 #define OB_PCROP_SECTOR_4 0x00000010U
672 #define OB_PCROP_SECTOR_5 0x00000020U
673 #define OB_PCROP_SECTOR_6 0x00000040U
674 #define OB_PCROP_SECTOR_7 0x00000080U
675 #define OB_PCROP_SECTOR_All 0x00000FFFU
686 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
687 defined(STM32F469xx) || defined(STM32F479xx)
688 #define OB_DUAL_BOOT_ENABLE ((uint8_t)0x10)
689 #define OB_DUAL_BOOT_DISABLE ((uint8_t)0x00)
698 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
699 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
700 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\
701 defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\
702 defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
703 #define OB_PCROP_DESELECTED ((uint8_t)0x00)
704 #define OB_PCROP_SELECTED ((uint8_t)0x80)
732 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
733 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
734 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\
735 defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\
736 defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
737 HAL_StatusTypeDef HAL_FLASHEx_AdvOBProgram (FLASH_AdvOBProgramInitTypeDef *pAdvOBInit);
738 void HAL_FLASHEx_AdvOBGetConfig(FLASH_AdvOBProgramInitTypeDef *pAdvOBInit);
745 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
746 defined(STM32F469xx) || defined(STM32F479xx)
747 uint16_t HAL_FLASHEx_OB_GetBank2WRP(
void);
763 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
764 #define FLASH_SECTOR_TOTAL 24U
768 #if defined(STM32F413xx) || defined(STM32F423xx)
769 #define FLASH_SECTOR_TOTAL 16U
773 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F412Zx) ||\
774 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx)
775 #define FLASH_SECTOR_TOTAL 12U
779 #if defined(STM32F401xC)
780 #define FLASH_SECTOR_TOTAL 6U
784 #if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
785 #define FLASH_SECTOR_TOTAL 5U
789 #if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx)
790 #define FLASH_SECTOR_TOTAL 8U
796 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
797 #define OPTCR1_BYTE2_ADDRESS 0x40023C1AU
813 #define IS_FLASH_TYPEERASE(VALUE)(((VALUE) == FLASH_TYPEERASE_SECTORS) || \
814 ((VALUE) == FLASH_TYPEERASE_MASSERASE))
816 #define IS_VOLTAGERANGE(RANGE)(((RANGE) == FLASH_VOLTAGE_RANGE_1) || \
817 ((RANGE) == FLASH_VOLTAGE_RANGE_2) || \
818 ((RANGE) == FLASH_VOLTAGE_RANGE_3) || \
819 ((RANGE) == FLASH_VOLTAGE_RANGE_4))
821 #define IS_WRPSTATE(VALUE)(((VALUE) == OB_WRPSTATE_DISABLE) || \
822 ((VALUE) == OB_WRPSTATE_ENABLE))
824 #define IS_OPTIONBYTE(VALUE)(((VALUE) <= (OPTIONBYTE_WRP|OPTIONBYTE_RDP|OPTIONBYTE_USER|OPTIONBYTE_BOR)))
826 #define IS_OB_RDP_LEVEL(LEVEL) (((LEVEL) == OB_RDP_LEVEL_0) ||\
827 ((LEVEL) == OB_RDP_LEVEL_1) ||\
828 ((LEVEL) == OB_RDP_LEVEL_2))
830 #define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW))
832 #define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NO_RST) || ((SOURCE) == OB_STOP_RST))
834 #define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NO_RST) || ((SOURCE) == OB_STDBY_RST))
836 #define IS_OB_BOR_LEVEL(LEVEL) (((LEVEL) == OB_BOR_LEVEL1) || ((LEVEL) == OB_BOR_LEVEL2) ||\
837 ((LEVEL) == OB_BOR_LEVEL3) || ((LEVEL) == OB_BOR_OFF))
839 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
840 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
841 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\
842 defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\
843 defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
844 #define IS_PCROPSTATE(VALUE)(((VALUE) == OB_PCROP_STATE_DISABLE) || \
845 ((VALUE) == OB_PCROP_STATE_ENABLE))
850 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
851 defined(STM32F469xx) || defined(STM32F479xx)
852 #define IS_OBEX(VALUE)(((VALUE) == OPTIONBYTE_PCROP) || \
853 ((VALUE) == OPTIONBYTE_BOOTCONFIG))
856 #if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
857 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
858 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\
860 #define IS_OBEX(VALUE)(((VALUE) == OPTIONBYTE_PCROP))
864 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
865 defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
866 #define IS_FLASH_LATENCY(LATENCY) (((LATENCY) == FLASH_LATENCY_0) || \
867 ((LATENCY) == FLASH_LATENCY_1) || \
868 ((LATENCY) == FLASH_LATENCY_2) || \
869 ((LATENCY) == FLASH_LATENCY_3) || \
870 ((LATENCY) == FLASH_LATENCY_4) || \
871 ((LATENCY) == FLASH_LATENCY_5) || \
872 ((LATENCY) == FLASH_LATENCY_6) || \
873 ((LATENCY) == FLASH_LATENCY_7) || \
874 ((LATENCY) == FLASH_LATENCY_8) || \
875 ((LATENCY) == FLASH_LATENCY_9) || \
876 ((LATENCY) == FLASH_LATENCY_10) || \
877 ((LATENCY) == FLASH_LATENCY_11) || \
878 ((LATENCY) == FLASH_LATENCY_12) || \
879 ((LATENCY) == FLASH_LATENCY_13) || \
880 ((LATENCY) == FLASH_LATENCY_14) || \
881 ((LATENCY) == FLASH_LATENCY_15))
884 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\
885 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
886 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\
887 defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
888 #define IS_FLASH_LATENCY(LATENCY) (((LATENCY) == FLASH_LATENCY_0) || \
889 ((LATENCY) == FLASH_LATENCY_1) || \
890 ((LATENCY) == FLASH_LATENCY_2) || \
891 ((LATENCY) == FLASH_LATENCY_3) || \
892 ((LATENCY) == FLASH_LATENCY_4) || \
893 ((LATENCY) == FLASH_LATENCY_5) || \
894 ((LATENCY) == FLASH_LATENCY_6) || \
895 ((LATENCY) == FLASH_LATENCY_7))
899 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
900 #define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1) || \
901 ((BANK) == FLASH_BANK_2) || \
902 ((BANK) == FLASH_BANK_BOTH))
905 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\
906 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
907 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
908 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\
910 #define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1))
914 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
915 #define IS_FLASH_SECTOR(SECTOR) ( ((SECTOR) == FLASH_SECTOR_0) || ((SECTOR) == FLASH_SECTOR_1) ||\
916 ((SECTOR) == FLASH_SECTOR_2) || ((SECTOR) == FLASH_SECTOR_3) ||\
917 ((SECTOR) == FLASH_SECTOR_4) || ((SECTOR) == FLASH_SECTOR_5) ||\
918 ((SECTOR) == FLASH_SECTOR_6) || ((SECTOR) == FLASH_SECTOR_7) ||\
919 ((SECTOR) == FLASH_SECTOR_8) || ((SECTOR) == FLASH_SECTOR_9) ||\
920 ((SECTOR) == FLASH_SECTOR_10) || ((SECTOR) == FLASH_SECTOR_11) ||\
921 ((SECTOR) == FLASH_SECTOR_12) || ((SECTOR) == FLASH_SECTOR_13) ||\
922 ((SECTOR) == FLASH_SECTOR_14) || ((SECTOR) == FLASH_SECTOR_15) ||\
923 ((SECTOR) == FLASH_SECTOR_16) || ((SECTOR) == FLASH_SECTOR_17) ||\
924 ((SECTOR) == FLASH_SECTOR_18) || ((SECTOR) == FLASH_SECTOR_19) ||\
925 ((SECTOR) == FLASH_SECTOR_20) || ((SECTOR) == FLASH_SECTOR_21) ||\
926 ((SECTOR) == FLASH_SECTOR_22) || ((SECTOR) == FLASH_SECTOR_23))
929 #if defined(STM32F413xx) || defined(STM32F423xx)
930 #define IS_FLASH_SECTOR(SECTOR) ( ((SECTOR) == FLASH_SECTOR_0) || ((SECTOR) == FLASH_SECTOR_1) ||\
931 ((SECTOR) == FLASH_SECTOR_2) || ((SECTOR) == FLASH_SECTOR_3) ||\
932 ((SECTOR) == FLASH_SECTOR_4) || ((SECTOR) == FLASH_SECTOR_5) ||\
933 ((SECTOR) == FLASH_SECTOR_6) || ((SECTOR) == FLASH_SECTOR_7) ||\
934 ((SECTOR) == FLASH_SECTOR_8) || ((SECTOR) == FLASH_SECTOR_9) ||\
935 ((SECTOR) == FLASH_SECTOR_10) || ((SECTOR) == FLASH_SECTOR_11) ||\
936 ((SECTOR) == FLASH_SECTOR_12) || ((SECTOR) == FLASH_SECTOR_13) ||\
937 ((SECTOR) == FLASH_SECTOR_14) || ((SECTOR) == FLASH_SECTOR_15))
940 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F412Zx) ||\
941 defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx)
942 #define IS_FLASH_SECTOR(SECTOR) (((SECTOR) == FLASH_SECTOR_0) || ((SECTOR) == FLASH_SECTOR_1) ||\
943 ((SECTOR) == FLASH_SECTOR_2) || ((SECTOR) == FLASH_SECTOR_3) ||\
944 ((SECTOR) == FLASH_SECTOR_4) || ((SECTOR) == FLASH_SECTOR_5) ||\
945 ((SECTOR) == FLASH_SECTOR_6) || ((SECTOR) == FLASH_SECTOR_7) ||\
946 ((SECTOR) == FLASH_SECTOR_8) || ((SECTOR) == FLASH_SECTOR_9) ||\
947 ((SECTOR) == FLASH_SECTOR_10) || ((SECTOR) == FLASH_SECTOR_11))
950 #if defined(STM32F401xC)
951 #define IS_FLASH_SECTOR(SECTOR) (((SECTOR) == FLASH_SECTOR_0) || ((SECTOR) == FLASH_SECTOR_1) ||\
952 ((SECTOR) == FLASH_SECTOR_2) || ((SECTOR) == FLASH_SECTOR_3) ||\
953 ((SECTOR) == FLASH_SECTOR_4) || ((SECTOR) == FLASH_SECTOR_5))
956 #if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
957 #define IS_FLASH_SECTOR(SECTOR) (((SECTOR) == FLASH_SECTOR_0) || ((SECTOR) == FLASH_SECTOR_1) ||\
958 ((SECTOR) == FLASH_SECTOR_2) || ((SECTOR) == FLASH_SECTOR_3) ||\
959 ((SECTOR) == FLASH_SECTOR_4))
962 #if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx)
963 #define IS_FLASH_SECTOR(SECTOR) (((SECTOR) == FLASH_SECTOR_0) || ((SECTOR) == FLASH_SECTOR_1) ||\
964 ((SECTOR) == FLASH_SECTOR_2) || ((SECTOR) == FLASH_SECTOR_3) ||\
965 ((SECTOR) == FLASH_SECTOR_4) || ((SECTOR) == FLASH_SECTOR_5) ||\
966 ((SECTOR) == FLASH_SECTOR_6) || ((SECTOR) == FLASH_SECTOR_7))
969 #define IS_FLASH_ADDRESS(ADDRESS) ((((ADDRESS) >= FLASH_BASE) && ((ADDRESS) <= FLASH_END)) || \
970 (((ADDRESS) >= FLASH_OTP_BASE) && ((ADDRESS) <= FLASH_OTP_END)))
972 #define IS_FLASH_NBSECTORS(NBSECTORS) (((NBSECTORS) != 0) && ((NBSECTORS) <= FLASH_SECTOR_TOTAL))
974 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
975 #define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFF000000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
978 #if defined(STM32F413xx) || defined(STM32F423xx)
979 #define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFF8000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
982 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)
983 #define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
986 #if defined(STM32F401xC)
987 #define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
990 #if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
991 #define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
994 #if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\
995 defined(STM32F412Rx) || defined(STM32F412Cx)
996 #define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
999 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
1000 #define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
1003 #if defined(STM32F413xx) || defined(STM32F423xx)
1004 #define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFF8000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
1007 #if defined(STM32F401xC)
1008 #define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
1011 #if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx)
1012 #define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
1015 #if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\
1016 defined(STM32F412Rx) || defined(STM32F412Cx)
1017 #define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
1020 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
1021 defined(STM32F469xx) || defined(STM32F479xx)
1022 #define IS_OB_BOOT(BOOT) (((BOOT) == OB_DUAL_BOOT_ENABLE) || ((BOOT) == OB_DUAL_BOOT_DISABLE))
1025 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
1026 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\
1027 defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\
1028 defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\
1029 defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
1030 #define IS_OB_PCROP_SELECT(PCROP) (((PCROP) == OB_PCROP_SELECTED) || ((PCROP) == OB_PCROP_DESELECTED))