File indexing completed on 2025-05-11 08:23:35
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #ifndef STM32H7xx_HAL_FLASH_EX_H
0020 #define STM32H7xx_HAL_FLASH_EX_H
0021
0022 #ifdef __cplusplus
0023 extern "C" {
0024 #endif
0025
0026
0027 #include "stm32h7xx_hal_def.h"
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046 typedef struct
0047 {
0048 uint32_t TypeErase;
0049
0050
0051 uint32_t Banks;
0052
0053
0054 uint32_t Sector;
0055
0056
0057 uint32_t NbSectors;
0058
0059
0060 uint32_t VoltageRange;
0061
0062
0063 } FLASH_EraseInitTypeDef;
0064
0065
0066
0067
0068
0069 typedef struct
0070 {
0071 uint32_t OptionType;
0072
0073
0074 uint32_t WRPState;
0075
0076
0077 uint32_t WRPSector;
0078
0079
0080 uint32_t RDPLevel;
0081
0082
0083 uint32_t BORLevel;
0084
0085
0086 uint32_t USERType;
0087
0088
0089 uint32_t USERConfig;
0090
0091
0092 uint32_t Banks;
0093
0094
0095 uint32_t PCROPConfig;
0096
0097
0098
0099 uint32_t PCROPStartAddr;
0100
0101
0102 uint32_t PCROPEndAddr;
0103
0104
0105 uint32_t BootConfig;
0106
0107
0108 uint32_t BootAddr0;
0109
0110
0111 uint32_t BootAddr1;
0112
0113 #if defined(DUAL_CORE)
0114 uint32_t CM4BootConfig;
0115
0116
0117
0118 uint32_t CM4BootAddr0;
0119
0120
0121 uint32_t CM4BootAddr1;
0122
0123 #endif
0124
0125 uint32_t SecureAreaConfig;
0126
0127
0128
0129 uint32_t SecureAreaStartAddr;
0130
0131
0132 uint32_t SecureAreaEndAddr;
0133
0134
0135 #if defined (FLASH_OTPBL_LOCKBL)
0136 uint32_t OTPBlockLock;
0137
0138 #endif
0139
0140 #if defined (FLASH_OPTSR2_TCM_AXI_SHARED)
0141 uint32_t SharedRamConfig;
0142
0143 #endif
0144
0145 #if defined (FLASH_OPTSR2_CPUFREQ_BOOST)
0146 uint32_t FreqBoostState;
0147
0148 #endif
0149
0150 } FLASH_OBProgramInitTypeDef;
0151
0152
0153
0154
0155 typedef struct
0156 {
0157 uint32_t TypeCRC;
0158
0159
0160 uint32_t BurstSize;
0161
0162
0163 uint32_t Bank;
0164
0165
0166 uint32_t Sector;
0167
0168
0169 uint32_t NbSectors;
0170
0171
0172 uint32_t CRCStartAddr;
0173
0174
0175 uint32_t CRCEndAddr;
0176
0177
0178 } FLASH_CRCInitTypeDef;
0179
0180 #if (USE_FLASH_ECC == 1U)
0181
0182
0183
0184 typedef struct
0185 {
0186 uint32_t Area;
0187
0188
0189 uint32_t Address;
0190
0191 } FLASH_EccInfoTypeDef;
0192 #endif
0193
0194
0195
0196
0197
0198
0199
0200
0201
0202
0203
0204
0205
0206
0207
0208 #define FLASH_TYPEERASE_SECTORS 0x00U
0209 #define FLASH_TYPEERASE_MASSERASE 0x01U
0210
0211
0212
0213
0214 #if defined (FLASH_CR_PSIZE)
0215
0216
0217
0218
0219 #define FLASH_VOLTAGE_RANGE_1 0x00000000U
0220 #define FLASH_VOLTAGE_RANGE_2 FLASH_CR_PSIZE_0
0221 #define FLASH_VOLTAGE_RANGE_3 FLASH_CR_PSIZE_1
0222 #define FLASH_VOLTAGE_RANGE_4 FLASH_CR_PSIZE
0223
0224
0225
0226 #endif
0227
0228
0229
0230
0231
0232 #define OB_WRPSTATE_DISABLE 0x00000000U
0233 #define OB_WRPSTATE_ENABLE 0x00000001U
0234
0235
0236
0237
0238 #if (USE_FLASH_ECC == 1U)
0239
0240
0241
0242
0243 #define FLASH_ECC_AREA_USER_BANK1 0x00000000U
0244 #define FLASH_ECC_AREA_USER_BANK2 0x00000001U
0245
0246
0247
0248 #endif
0249
0250
0251
0252
0253
0254 #define OPTIONBYTE_WRP 0x01U
0255 #define OPTIONBYTE_RDP 0x02U
0256 #define OPTIONBYTE_USER 0x04U
0257 #define OPTIONBYTE_PCROP 0x08U
0258 #define OPTIONBYTE_BOR 0x10U
0259 #define OPTIONBYTE_SECURE_AREA 0x20U
0260 #if defined (DUAL_CORE)
0261 #define OPTIONBYTE_CM7_BOOTADD 0x40U
0262 #define OPTIONBYTE_CM4_BOOTADD 0x80U
0263 #define OPTIONBYTE_BOOTADD OPTIONBYTE_CM7_BOOTADD
0264 #else
0265 #define OPTIONBYTE_BOOTADD 0x40U
0266 #endif
0267 #if defined (FLASH_OTPBL_LOCKBL)
0268 #define OPTIONBYTE_OTP_LOCK 0x80U
0269 #endif
0270 #if defined (FLASH_OPTSR2_TCM_AXI_SHARED)
0271 #define OPTIONBYTE_SHARED_RAM 0x100U
0272 #endif
0273 #if defined (FLASH_OPTSR2_CPUFREQ_BOOST)
0274 #define OPTIONBYTE_FREQ_BOOST 0x200U
0275 #endif
0276
0277 #if defined (DUAL_CORE)
0278 #define OPTIONBYTE_ALL (OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER |\
0279 OPTIONBYTE_PCROP | OPTIONBYTE_BOR | OPTIONBYTE_SECURE_AREA |\
0280 OPTIONBYTE_CM7_BOOTADD | OPTIONBYTE_CM4_BOOTADD)
0281 #elif defined (FLASH_OTPBL_LOCKBL)
0282 #define OPTIONBYTE_ALL (OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER |\
0283 OPTIONBYTE_PCROP | OPTIONBYTE_BOR | OPTIONBYTE_SECURE_AREA |\
0284 OPTIONBYTE_BOOTADD | OPTIONBYTE_OTP_LOCK)
0285 #elif defined (FLASH_OPTSR2_TCM_AXI_SHARED)
0286 #define OPTIONBYTE_ALL (OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER |\
0287 OPTIONBYTE_PCROP | OPTIONBYTE_BOR | OPTIONBYTE_SECURE_AREA |\
0288 OPTIONBYTE_BOOTADD | OPTIONBYTE_SHARED_RAM | OPTIONBYTE_FREQ_BOOST)
0289 #else
0290 #define OPTIONBYTE_ALL (OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER |\
0291 OPTIONBYTE_PCROP | OPTIONBYTE_BOR | OPTIONBYTE_SECURE_AREA |\
0292 OPTIONBYTE_BOOTADD)
0293 #endif
0294
0295
0296
0297
0298
0299
0300
0301
0302 #define OB_RDP_LEVEL_0 0xAA00U
0303 #define OB_RDP_LEVEL_1 0x5500U
0304 #define OB_RDP_LEVEL_2 0xCC00U
0305
0306
0307
0308
0309
0310
0311
0312
0313
0314 #define OB_IWDG_SW OB_IWDG1_SW
0315 #define OB_IWDG_HW OB_IWDG1_HW
0316
0317
0318
0319
0320
0321
0322
0323
0324 #define OB_STOP_NO_RST 0x40U
0325 #define OB_STOP_RST 0x00U
0326
0327
0328
0329
0330
0331
0332
0333
0334 #define OB_STDBY_NO_RST 0x80U
0335 #define OB_STDBY_RST 0x00U
0336
0337
0338
0339
0340
0341
0342
0343
0344 #define OB_IWDG_STOP_FREEZE 0x00000000U
0345 #define OB_IWDG_STOP_ACTIVE FLASH_OPTSR_FZ_IWDG_STOP
0346
0347
0348
0349
0350
0351
0352
0353
0354 #define OB_IWDG_STDBY_FREEZE 0x00000000U
0355 #define OB_IWDG_STDBY_ACTIVE FLASH_OPTSR_FZ_IWDG_SDBY
0356
0357
0358
0359
0360
0361
0362
0363
0364 #define OB_BOR_LEVEL0 0x00000000U
0365 #define OB_BOR_LEVEL1 FLASH_OPTSR_BOR_LEV_0
0366 #define OB_BOR_LEVEL2 FLASH_OPTSR_BOR_LEV_1
0367 #define OB_BOR_LEVEL3 (FLASH_OPTSR_BOR_LEV_1 | FLASH_OPTSR_BOR_LEV_0)
0368
0369
0370
0371
0372
0373
0374
0375
0376
0377
0378 #define OB_BOOTADDR_ITCM_RAM 0x0000U
0379 #define OB_BOOTADDR_SYSTEM 0x0040U
0380 #define OB_BOOTADDR_ITCM_FLASH 0x0080U
0381 #define OB_BOOTADDR_AXIM_FLASH 0x2000U
0382 #define OB_BOOTADDR_DTCM_RAM 0x8000U
0383 #define OB_BOOTADDR_SRAM1 0x8004U
0384 #define OB_BOOTADDR_SRAM2 0x8013U
0385
0386
0387
0388
0389
0390
0391
0392
0393 #define FLASH_LATENCY_0 FLASH_ACR_LATENCY_0WS
0394 #define FLASH_LATENCY_1 FLASH_ACR_LATENCY_1WS
0395 #define FLASH_LATENCY_2 FLASH_ACR_LATENCY_2WS
0396 #define FLASH_LATENCY_3 FLASH_ACR_LATENCY_3WS
0397 #define FLASH_LATENCY_4 FLASH_ACR_LATENCY_4WS
0398 #define FLASH_LATENCY_5 FLASH_ACR_LATENCY_5WS
0399 #define FLASH_LATENCY_6 FLASH_ACR_LATENCY_6WS
0400 #define FLASH_LATENCY_7 FLASH_ACR_LATENCY_7WS
0401
0402
0403 #define FLASH_LATENCY_8 FLASH_ACR_LATENCY_8WS
0404 #define FLASH_LATENCY_9 FLASH_ACR_LATENCY_9WS
0405 #define FLASH_LATENCY_10 FLASH_ACR_LATENCY_10WS
0406 #define FLASH_LATENCY_11 FLASH_ACR_LATENCY_11WS
0407 #define FLASH_LATENCY_12 FLASH_ACR_LATENCY_12WS
0408 #define FLASH_LATENCY_13 FLASH_ACR_LATENCY_13WS
0409 #define FLASH_LATENCY_14 FLASH_ACR_LATENCY_14WS
0410 #define FLASH_LATENCY_15 FLASH_ACR_LATENCY_15WS
0411
0412
0413
0414
0415
0416
0417
0418
0419 #define FLASH_BANK_1 0x01U
0420 #if defined (DUAL_BANK)
0421 #define FLASH_BANK_2 0x02U
0422 #define FLASH_BANK_BOTH (FLASH_BANK_1 | FLASH_BANK_2)
0423 #endif
0424
0425
0426
0427
0428
0429
0430
0431
0432 #define OB_PCROP_RDP_NOT_ERASE 0x00000000U
0433
0434 #define OB_PCROP_RDP_ERASE FLASH_PRAR_DMEP
0435
0436
0437
0438
0439
0440
0441
0442
0443
0444
0445 #if (FLASH_SECTOR_TOTAL == 128)
0446 #define OB_WRP_SECTOR_0TO3 0x00000001U
0447 #define OB_WRP_SECTOR_4TO7 0x00000002U
0448 #define OB_WRP_SECTOR_8TO11 0x00000004U
0449 #define OB_WRP_SECTOR_12TO15 0x00000008U
0450 #define OB_WRP_SECTOR_16TO19 0x00000010U
0451 #define OB_WRP_SECTOR_20TO23 0x00000020U
0452 #define OB_WRP_SECTOR_24TO27 0x00000040U
0453 #define OB_WRP_SECTOR_28TO31 0x00000080U
0454 #define OB_WRP_SECTOR_32TO35 0x00000100U
0455 #define OB_WRP_SECTOR_36TO39 0x00000200U
0456 #define OB_WRP_SECTOR_40TO43 0x00000400U
0457 #define OB_WRP_SECTOR_44TO47 0x00000800U
0458 #define OB_WRP_SECTOR_48TO51 0x00001000U
0459 #define OB_WRP_SECTOR_52TO55 0x00002000U
0460 #define OB_WRP_SECTOR_56TO59 0x00004000U
0461 #define OB_WRP_SECTOR_60TO63 0x00008000U
0462 #define OB_WRP_SECTOR_64TO67 0x00010000U
0463 #define OB_WRP_SECTOR_68TO71 0x00020000U
0464 #define OB_WRP_SECTOR_72TO75 0x00040000U
0465 #define OB_WRP_SECTOR_76TO79 0x00080000U
0466 #define OB_WRP_SECTOR_80TO83 0x00100000U
0467 #define OB_WRP_SECTOR_84TO87 0x00200000U
0468 #define OB_WRP_SECTOR_88TO91 0x00400000U
0469 #define OB_WRP_SECTOR_92TO95 0x00800000U
0470 #define OB_WRP_SECTOR_96TO99 0x01000000U
0471 #define OB_WRP_SECTOR_100TO103 0x02000000U
0472 #define OB_WRP_SECTOR_104TO107 0x04000000U
0473 #define OB_WRP_SECTOR_108TO111 0x08000000U
0474 #define OB_WRP_SECTOR_112TO115 0x10000000U
0475 #define OB_WRP_SECTOR_116TO119 0x20000000U
0476 #define OB_WRP_SECTOR_120TO123 0x40000000U
0477 #define OB_WRP_SECTOR_124TO127 0x80000000U
0478 #define OB_WRP_SECTOR_ALL 0xFFFFFFFFU
0479 #else
0480 #define OB_WRP_SECTOR_0 0x00000001U
0481 #define OB_WRP_SECTOR_1 0x00000002U
0482 #define OB_WRP_SECTOR_2 0x00000004U
0483 #define OB_WRP_SECTOR_3 0x00000008U
0484 #define OB_WRP_SECTOR_4 0x00000010U
0485 #define OB_WRP_SECTOR_5 0x00000020U
0486 #define OB_WRP_SECTOR_6 0x00000040U
0487 #define OB_WRP_SECTOR_7 0x00000080U
0488 #define OB_WRP_SECTOR_ALL 0x000000FFU
0489 #endif
0490
0491
0492
0493
0494
0495
0496
0497
0498 #define OB_SECURITY_DISABLE 0x00000000U
0499 #define OB_SECURITY_ENABLE FLASH_OPTSR_SECURITY
0500
0501
0502
0503
0504
0505
0506
0507
0508 #define OB_ST_RAM_SIZE_2KB 0x00000000U
0509 #define OB_ST_RAM_SIZE_4KB FLASH_OPTSR_ST_RAM_SIZE_0
0510 #define OB_ST_RAM_SIZE_8KB FLASH_OPTSR_ST_RAM_SIZE_1
0511 #define OB_ST_RAM_SIZE_16KB FLASH_OPTSR_ST_RAM_SIZE
0512
0513
0514
0515
0516 #if defined(DUAL_CORE)
0517
0518
0519
0520
0521 #define OB_BCM7_DISABLE 0x00000000U
0522 #define OB_BCM7_ENABLE FLASH_OPTSR_BCM7
0523
0524
0525
0526
0527
0528
0529
0530
0531
0532 #define OB_BCM4_DISABLE 0x00000000U
0533 #define OB_BCM4_ENABLE FLASH_OPTSR_BCM4
0534
0535
0536
0537 #endif
0538
0539
0540
0541
0542
0543 #define OB_IWDG1_SW FLASH_OPTSR_IWDG1_SW
0544 #define OB_IWDG1_HW 0x00000000U
0545
0546
0547
0548
0549 #if defined(DUAL_CORE)
0550
0551
0552
0553
0554 #define OB_IWDG2_SW FLASH_OPTSR_IWDG2_SW
0555 #define OB_IWDG2_HW 0x00000000U
0556
0557
0558
0559 #endif
0560
0561
0562
0563
0564
0565 #define OB_STOP_RST_D1 0x00000000U
0566 #define OB_STOP_NO_RST_D1 FLASH_OPTSR_NRST_STOP_D1
0567
0568
0569
0570
0571
0572
0573
0574
0575 #define OB_STDBY_RST_D1 0x00000000U
0576 #define OB_STDBY_NO_RST_D1 FLASH_OPTSR_NRST_STBY_D1
0577
0578
0579
0580
0581 #if defined (FLASH_OPTSR_NRST_STOP_D2)
0582
0583
0584
0585
0586 #define OB_STOP_RST_D2 0x00000000U
0587 #define OB_STOP_NO_RST_D2 FLASH_OPTSR_NRST_STOP_D2
0588
0589
0590
0591
0592
0593
0594
0595
0596 #define OB_STDBY_RST_D2 0x00000000U
0597 #define OB_STDBY_NO_RST_D2 FLASH_OPTSR_NRST_STBY_D2
0598
0599
0600
0601 #endif
0602
0603 #if defined (DUAL_BANK)
0604
0605
0606
0607
0608 #define OB_SWAP_BANK_DISABLE 0x00000000U
0609 #define OB_SWAP_BANK_ENABLE FLASH_OPTSR_SWAP_BANK_OPT
0610
0611
0612
0613 #endif
0614
0615
0616
0617
0618
0619 #define OB_IOHSLV_DISABLE 0x00000000U
0620 #define OB_IOHSLV_ENABLE FLASH_OPTSR_IO_HSLV
0621
0622
0623
0624
0625 #if defined (FLASH_OPTSR_VDDMMC_HSLV)
0626
0627
0628
0629
0630 #define OB_VDDMMC_HSLV_DISABLE 0x00000000U
0631 #define OB_VDDMMC_HSLV_ENABLE FLASH_OPTSR_VDDMMC_HSLV
0632
0633
0634
0635 #endif
0636
0637 #if defined (FLASH_OPTSR2_CPUFREQ_BOOST)
0638
0639
0640
0641
0642 #define OB_CPUFREQ_BOOST_DISABLE 0x00000000U
0643 #define OB_CPUFREQ_BOOST_ENABLE FLASH_OPTSR2_CPUFREQ_BOOST
0644
0645
0646
0647 #endif
0648
0649 #if defined (FLASH_OPTSR2_TCM_AXI_SHARED)
0650
0651
0652
0653
0654 #define OB_TCM_AXI_SHARED_ITCM64KB 0x00000000U
0655 #define OB_TCM_AXI_SHARED_ITCM128KB FLASH_OPTSR2_TCM_AXI_SHARED_0
0656 #define OB_TCM_AXI_SHARED_ITCM192KB FLASH_OPTSR2_TCM_AXI_SHARED_1
0657 #define OB_TCM_AXI_SHARED_ITCM256KB FLASH_OPTSR2_TCM_AXI_SHARED
0658
0659
0660
0661 #endif
0662
0663
0664
0665
0666
0667 #define OB_USER_IWDG1_SW 0x0001U
0668 #define OB_USER_NRST_STOP_D1 0x0002U
0669 #define OB_USER_NRST_STDBY_D1 0x0004U
0670 #define OB_USER_IWDG_STOP 0x0008U
0671 #define OB_USER_IWDG_STDBY 0x0010U
0672 #define OB_USER_ST_RAM_SIZE 0x0020U
0673 #define OB_USER_SECURITY 0x0040U
0674 #define OB_USER_IOHSLV 0x0080U
0675 #if defined (DUAL_BANK)
0676 #define OB_USER_SWAP_BANK 0x0100U
0677 #endif
0678 #if defined (FLASH_OPTSR_VDDMMC_HSLV)
0679 #define OB_USER_VDDMMC_HSLV 0x0200U
0680 #endif
0681 #if defined (DUAL_CORE)
0682 #define OB_USER_IWDG2_SW 0x0200U
0683 #define OB_USER_BCM4 0x0400U
0684 #define OB_USER_BCM7 0x0800U
0685 #endif
0686 #if defined (FLASH_OPTSR_NRST_STOP_D2)
0687 #define OB_USER_NRST_STOP_D2 0x1000U
0688 #define OB_USER_NRST_STDBY_D2 0x2000U
0689 #endif
0690
0691 #if defined (DUAL_CORE)
0692 #define OB_USER_ALL (OB_USER_IWDG1_SW | OB_USER_NRST_STOP_D1 | OB_USER_NRST_STDBY_D1 |\
0693 OB_USER_IWDG_STOP | OB_USER_IWDG_STDBY | OB_USER_ST_RAM_SIZE |\
0694 OB_USER_SECURITY | OB_USER_IOHSLV | OB_USER_SWAP_BANK |\
0695 OB_USER_IWDG2_SW | OB_USER_BCM4 | OB_USER_BCM7 |\
0696 OB_USER_NRST_STOP_D2 | OB_USER_NRST_STDBY_D2)
0697 #elif defined (FLASH_OPTSR_VDDMMC_HSLV)
0698 #if defined (DUAL_BANK)
0699 #define OB_USER_ALL (OB_USER_IWDG1_SW | OB_USER_NRST_STOP_D1 | OB_USER_NRST_STDBY_D1 |\
0700 OB_USER_IWDG_STOP | OB_USER_IWDG_STDBY | OB_USER_ST_RAM_SIZE |\
0701 OB_USER_SECURITY | OB_USER_IOHSLV | OB_USER_SWAP_BANK |\
0702 OB_USER_VDDMMC_HSLV)
0703 #else
0704 #define OB_USER_ALL (OB_USER_IWDG1_SW | OB_USER_NRST_STOP_D1 | OB_USER_NRST_STDBY_D1 |\
0705 OB_USER_IWDG_STOP | OB_USER_IWDG_STDBY | OB_USER_ST_RAM_SIZE |\
0706 OB_USER_SECURITY | OB_USER_IOHSLV |\
0707 OB_USER_VDDMMC_HSLV)
0708 #endif
0709 #elif defined (FLASH_OPTSR2_TCM_AXI_SHARED)
0710 #define OB_USER_ALL (OB_USER_IWDG1_SW | OB_USER_NRST_STOP_D1 | OB_USER_NRST_STDBY_D1 |\
0711 OB_USER_IWDG_STOP | OB_USER_IWDG_STDBY | OB_USER_ST_RAM_SIZE |\
0712 OB_USER_SECURITY | OB_USER_IOHSLV |\
0713 OB_USER_NRST_STOP_D2 | OB_USER_NRST_STDBY_D2)
0714 #else
0715 #if defined (DUAL_BANK)
0716 #define OB_USER_ALL (OB_USER_IWDG1_SW | OB_USER_NRST_STOP_D1 | OB_USER_NRST_STDBY_D1 |\
0717 OB_USER_IWDG_STOP | OB_USER_IWDG_STDBY | OB_USER_ST_RAM_SIZE |\
0718 OB_USER_SECURITY | OB_USER_IOHSLV | OB_USER_SWAP_BANK )
0719 #else
0720 #define OB_USER_ALL (OB_USER_IWDG1_SW | OB_USER_NRST_STOP_D1 | OB_USER_NRST_STDBY_D1 |\
0721 OB_USER_IWDG_STOP | OB_USER_IWDG_STDBY | OB_USER_ST_RAM_SIZE |\
0722 OB_USER_SECURITY | OB_USER_IOHSLV )
0723 #endif
0724 #endif
0725
0726
0727
0728
0729
0730
0731
0732
0733 #define OB_BOOT_ADD0 0x01U
0734 #define OB_BOOT_ADD1 0x02U
0735 #define OB_BOOT_ADD_BOTH 0x03U
0736
0737
0738
0739
0740
0741
0742
0743
0744 #define OB_SECURE_RDP_NOT_ERASE 0x00000000U
0745
0746 #define OB_SECURE_RDP_ERASE FLASH_SCAR_DMES
0747
0748
0749
0750
0751
0752
0753
0754
0755
0756 #define FLASH_CRC_ADDR 0x00000000U
0757 #define FLASH_CRC_SECTORS FLASH_CRCCR_CRC_BY_SECT
0758 #define FLASH_CRC_BANK (FLASH_CRCCR_ALL_BANK | FLASH_CRCCR_CRC_BY_SECT)
0759
0760
0761
0762
0763
0764
0765
0766
0767 #define FLASH_CRC_BURST_SIZE_4 0x00000000U
0768 #define FLASH_CRC_BURST_SIZE_16 FLASH_CRCCR_CRC_BURST_0
0769 #define FLASH_CRC_BURST_SIZE_64 FLASH_CRCCR_CRC_BURST_1
0770 #define FLASH_CRC_BURST_SIZE_256 FLASH_CRCCR_CRC_BURST
0771
0772
0773
0774
0775
0776
0777
0778
0779 #define FLASH_PROGRAMMING_DELAY_0 0x00000000U
0780 #define FLASH_PROGRAMMING_DELAY_1 FLASH_ACR_WRHIGHFREQ_0
0781 #define FLASH_PROGRAMMING_DELAY_2 FLASH_ACR_WRHIGHFREQ_1
0782 #define FLASH_PROGRAMMING_DELAY_3 FLASH_ACR_WRHIGHFREQ
0783
0784
0785
0786
0787 #if defined (FLASH_OTPBL_LOCKBL)
0788
0789
0790
0791
0792 #define FLASH_OTP_BLOCK_0 0x00000001U
0793 #define FLASH_OTP_BLOCK_1 0x00000002U
0794 #define FLASH_OTP_BLOCK_2 0x00000004U
0795 #define FLASH_OTP_BLOCK_3 0x00000008U
0796 #define FLASH_OTP_BLOCK_4 0x00000010U
0797 #define FLASH_OTP_BLOCK_5 0x00000020U
0798 #define FLASH_OTP_BLOCK_6 0x00000040U
0799 #define FLASH_OTP_BLOCK_7 0x00000080U
0800 #define FLASH_OTP_BLOCK_8 0x00000100U
0801 #define FLASH_OTP_BLOCK_9 0x00000200U
0802 #define FLASH_OTP_BLOCK_10 0x00000400U
0803 #define FLASH_OTP_BLOCK_11 0x00000800U
0804 #define FLASH_OTP_BLOCK_12 0x00001000U
0805 #define FLASH_OTP_BLOCK_13 0x00002000U
0806 #define FLASH_OTP_BLOCK_14 0x00004000U
0807 #define FLASH_OTP_BLOCK_15 0x00008000U
0808 #define FLASH_OTP_BLOCK_ALL 0x0000FFFFU
0809
0810
0811
0812 #endif
0813
0814
0815
0816
0817
0818
0819
0820
0821
0822
0823
0824
0825
0826
0827
0828 #define __HAL_FLASH_CALC_BOOT_BASE_ADR(__ADDRESS__) ((__ADDRESS__) >> 14U)
0829
0830 #if defined (FLASH_CR_PSIZE)
0831
0832
0833
0834
0835
0836
0837
0838 #if defined (DUAL_BANK)
0839 #define __HAL_FLASH_SET_PSIZE(__PSIZE__, __BANK__) (((__BANK__) == FLASH_BANK_1) ? \
0840 MODIFY_REG(FLASH->CR1, FLASH_CR_PSIZE, (__PSIZE__)) : \
0841 MODIFY_REG(FLASH->CR2, FLASH_CR_PSIZE, (__PSIZE__)))
0842 #else
0843 #define __HAL_FLASH_SET_PSIZE(__PSIZE__, __BANK__) MODIFY_REG(FLASH->CR1, FLASH_CR_PSIZE, (__PSIZE__))
0844 #endif
0845
0846
0847
0848
0849
0850
0851
0852 #if defined (DUAL_BANK)
0853 #define __HAL_FLASH_GET_PSIZE(__BANK__) (((__BANK__) == FLASH_BANK_1) ? \
0854 READ_BIT((FLASH->CR1), FLASH_CR_PSIZE) : \
0855 READ_BIT((FLASH->CR2), FLASH_CR_PSIZE))
0856 #else
0857 #define __HAL_FLASH_GET_PSIZE(__BANK__) READ_BIT((FLASH->CR1), FLASH_CR_PSIZE)
0858 #endif
0859
0860 #endif
0861
0862
0863
0864
0865
0866
0867
0868 #define __HAL_FLASH_SET_PROGRAM_DELAY(__DELAY__) MODIFY_REG(FLASH->ACR, FLASH_ACR_WRHIGHFREQ, (__DELAY__))
0869
0870
0871
0872
0873
0874
0875 #define __HAL_FLASH_GET_PROGRAM_DELAY() READ_BIT(FLASH->ACR, FLASH_ACR_WRHIGHFREQ)
0876
0877
0878
0879
0880
0881
0882
0883
0884
0885
0886
0887
0888
0889 HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *SectorError);
0890 HAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit);
0891 HAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit);
0892 void HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit);
0893
0894 HAL_StatusTypeDef HAL_FLASHEx_Unlock_Bank1(void);
0895 HAL_StatusTypeDef HAL_FLASHEx_Lock_Bank1(void);
0896 #if defined (DUAL_BANK)
0897 HAL_StatusTypeDef HAL_FLASHEx_Unlock_Bank2(void);
0898 HAL_StatusTypeDef HAL_FLASHEx_Lock_Bank2(void);
0899 #endif
0900
0901 HAL_StatusTypeDef HAL_FLASHEx_ComputeCRC(FLASH_CRCInitTypeDef *pCRCInit, uint32_t *CRC_Result);
0902
0903
0904
0905
0906
0907 #if (USE_FLASH_ECC == 1U)
0908
0909
0910
0911 void HAL_FLASHEx_EnableEccCorrectionInterrupt(void);
0912 void HAL_FLASHEx_DisableEccCorrectionInterrupt(void);
0913 void HAL_FLASHEx_EnableEccCorrectionInterrupt_Bank1(void);
0914 void HAL_FLASHEx_DisableEccCorrectionInterrupt_Bank1(void);
0915 #if defined (DUAL_BANK)
0916 void HAL_FLASHEx_EnableEccCorrectionInterrupt_Bank2(void);
0917 void HAL_FLASHEx_DisableEccCorrectionInterrupt_Bank2(void);
0918 #endif
0919
0920 void HAL_FLASHEx_EnableEccDetectionInterrupt(void);
0921 void HAL_FLASHEx_DisableEccDetectionInterrupt(void);
0922 void HAL_FLASHEx_EnableEccDetectionInterrupt_Bank1(void);
0923 void HAL_FLASHEx_DisableEccDetectionInterrupt_Bank1(void);
0924 #if defined (DUAL_BANK)
0925 void HAL_FLASHEx_EnableEccDetectionInterrupt_Bank2(void);
0926 void HAL_FLASHEx_DisableEccDetectionInterrupt_Bank2(void);
0927 #endif
0928
0929 void HAL_FLASHEx_GetEccInfo(FLASH_EccInfoTypeDef *pData);
0930 void HAL_FLASHEx_BusFault_IRQHandler(void);
0931
0932 __weak void HAL_FLASHEx_EccDetectionCallback(void);
0933 __weak void HAL_FLASHEx_EccCorrectionCallback(void);
0934
0935
0936
0937 #endif
0938
0939
0940
0941
0942
0943
0944
0945
0946
0947
0948
0949
0950
0951
0952
0953
0954
0955
0956 #define IS_FLASH_TYPEERASE(VALUE) (((VALUE) == FLASH_TYPEERASE_SECTORS) || \
0957 ((VALUE) == FLASH_TYPEERASE_MASSERASE))
0958
0959 #if defined (FLASH_CR_PSIZE)
0960 #define IS_VOLTAGERANGE(RANGE) (((RANGE) == FLASH_VOLTAGE_RANGE_1) || \
0961 ((RANGE) == FLASH_VOLTAGE_RANGE_2) || \
0962 ((RANGE) == FLASH_VOLTAGE_RANGE_3) || \
0963 ((RANGE) == FLASH_VOLTAGE_RANGE_4))
0964 #endif
0965
0966 #define IS_WRPSTATE(VALUE) (((VALUE) == OB_WRPSTATE_DISABLE) || \
0967 ((VALUE) == OB_WRPSTATE_ENABLE))
0968
0969 #define IS_OPTIONBYTE(VALUE) ((((VALUE) & OPTIONBYTE_ALL) != 0U) && \
0970 (((VALUE) & ~OPTIONBYTE_ALL) == 0U))
0971
0972 #define IS_OB_BOOT_ADDRESS(ADDRESS) ((ADDRESS) <= 0x8013U)
0973
0974 #define IS_OB_RDP_LEVEL(LEVEL) (((LEVEL) == OB_RDP_LEVEL_0) ||\
0975 ((LEVEL) == OB_RDP_LEVEL_1) ||\
0976 ((LEVEL) == OB_RDP_LEVEL_2))
0977
0978 #define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW))
0979
0980 #define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NO_RST) || ((SOURCE) == OB_STOP_RST))
0981
0982 #define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NO_RST) || ((SOURCE) == OB_STDBY_RST))
0983
0984 #define IS_OB_IWDG_STOP_FREEZE(FREEZE) (((FREEZE) == OB_IWDG_STOP_FREEZE) || ((FREEZE) == OB_IWDG_STOP_ACTIVE))
0985
0986 #define IS_OB_IWDG_STDBY_FREEZE(FREEZE) (((FREEZE) == OB_IWDG_STDBY_FREEZE) || ((FREEZE) == OB_IWDG_STDBY_ACTIVE))
0987
0988 #define IS_OB_BOR_LEVEL(LEVEL) (((LEVEL) == OB_BOR_LEVEL0) || ((LEVEL) == OB_BOR_LEVEL1) || \
0989 ((LEVEL) == OB_BOR_LEVEL2) || ((LEVEL) == OB_BOR_LEVEL3))
0990
0991 #define IS_FLASH_LATENCY(LATENCY) (((LATENCY) == FLASH_LATENCY_0) || \
0992 ((LATENCY) == FLASH_LATENCY_1) || \
0993 ((LATENCY) == FLASH_LATENCY_2) || \
0994 ((LATENCY) == FLASH_LATENCY_3) || \
0995 ((LATENCY) == FLASH_LATENCY_4) || \
0996 ((LATENCY) == FLASH_LATENCY_5) || \
0997 ((LATENCY) == FLASH_LATENCY_6) || \
0998 ((LATENCY) == FLASH_LATENCY_7) || \
0999 ((LATENCY) == FLASH_LATENCY_8) || \
1000 ((LATENCY) == FLASH_LATENCY_9) || \
1001 ((LATENCY) == FLASH_LATENCY_10) || \
1002 ((LATENCY) == FLASH_LATENCY_11) || \
1003 ((LATENCY) == FLASH_LATENCY_12) || \
1004 ((LATENCY) == FLASH_LATENCY_13) || \
1005 ((LATENCY) == FLASH_LATENCY_14) || \
1006 ((LATENCY) == FLASH_LATENCY_15))
1007
1008 #define IS_FLASH_SECTOR(SECTOR) ((SECTOR) < FLASH_SECTOR_TOTAL)
1009
1010 #if (FLASH_SECTOR_TOTAL == 8U)
1011 #define IS_OB_WRP_SECTOR(SECTOR) ((((SECTOR) & 0xFFFFFF00U) == 0x00000000U) && ((SECTOR) != 0x00000000U))
1012 #else
1013 #define IS_OB_WRP_SECTOR(SECTOR) ((SECTOR) != 0x00000000U)
1014 #endif
1015
1016 #define IS_OB_PCROP_RDP(CONFIG) (((CONFIG) == OB_PCROP_RDP_NOT_ERASE) || \
1017 ((CONFIG) == OB_PCROP_RDP_ERASE))
1018
1019 #define IS_OB_SECURE_RDP(CONFIG) (((CONFIG) == OB_SECURE_RDP_NOT_ERASE) || \
1020 ((CONFIG) == OB_SECURE_RDP_ERASE))
1021
1022 #if defined (DUAL_BANK)
1023 #define IS_OB_USER_SWAP_BANK(VALUE) (((VALUE) == OB_SWAP_BANK_DISABLE) || ((VALUE) == OB_SWAP_BANK_ENABLE))
1024 #endif
1025
1026 #define IS_OB_USER_IOHSLV(VALUE) (((VALUE) == OB_IOHSLV_DISABLE) || ((VALUE) == OB_IOHSLV_ENABLE))
1027
1028 #if defined (FLASH_OPTSR_VDDMMC_HSLV)
1029 #define IS_OB_USER_VDDMMC_HSLV(VALUE) (((VALUE) == OB_VDDMMC_HSLV_DISABLE) || ((VALUE) == OB_VDDMMC_HSLV_ENABLE))
1030 #endif
1031
1032 #define IS_OB_IWDG1_SOURCE(SOURCE) (((SOURCE) == OB_IWDG1_SW) || ((SOURCE) == OB_IWDG1_HW))
1033 #if defined (DUAL_CORE)
1034 #define IS_OB_IWDG2_SOURCE(SOURCE) (((SOURCE) == OB_IWDG2_SW) || ((SOURCE) == OB_IWDG2_HW))
1035 #endif
1036 #define IS_OB_STOP_D1_RESET(VALUE) (((VALUE) == OB_STOP_NO_RST_D1) || ((VALUE) == OB_STOP_RST_D1))
1037
1038 #define IS_OB_STDBY_D1_RESET(VALUE) (((VALUE) == OB_STDBY_NO_RST_D1) || ((VALUE) == OB_STDBY_RST_D1))
1039
1040 #define IS_OB_USER_IWDG_STOP(VALUE) (((VALUE) == OB_IWDG_STOP_FREEZE) || ((VALUE) == OB_IWDG_STOP_ACTIVE))
1041
1042 #define IS_OB_USER_IWDG_STDBY(VALUE) (((VALUE) == OB_IWDG_STDBY_FREEZE) || ((VALUE) == OB_IWDG_STDBY_ACTIVE))
1043
1044 #define IS_OB_USER_ST_RAM_SIZE(VALUE) (((VALUE) == OB_ST_RAM_SIZE_2KB) || ((VALUE) == OB_ST_RAM_SIZE_4KB) || \
1045 ((VALUE) == OB_ST_RAM_SIZE_8KB) || ((VALUE) == OB_ST_RAM_SIZE_16KB))
1046
1047 #define IS_OB_USER_SECURITY(VALUE) (((VALUE) == OB_SECURITY_ENABLE) || ((VALUE) == OB_SECURITY_DISABLE))
1048
1049 #if defined (DUAL_CORE)
1050 #define IS_OB_USER_BCM4(VALUE) (((VALUE) == OB_BCM4_DISABLE) || ((VALUE) == OB_BCM4_ENABLE))
1051
1052 #define IS_OB_USER_BCM7(VALUE) (((VALUE) == OB_BCM7_DISABLE) || ((VALUE) == OB_BCM7_ENABLE))
1053 #endif
1054
1055 #if defined (FLASH_OPTSR_NRST_STOP_D2)
1056 #define IS_OB_STOP_D2_RESET(VALUE) (((VALUE) == OB_STOP_NO_RST_D2) || ((VALUE) == OB_STOP_RST_D2))
1057
1058 #define IS_OB_STDBY_D2_RESET(VALUE) (((VALUE) == OB_STDBY_NO_RST_D2) || ((VALUE) == OB_STDBY_RST_D2))
1059 #endif
1060
1061 #if defined (FLASH_OPTSR2_TCM_AXI_SHARED)
1062 #define IS_OB_USER_TCM_AXI_SHARED(VALUE) (((VALUE) == OB_TCM_AXI_SHARED_ITCM64KB) || ((VALUE) == OB_TCM_AXI_SHARED_ITCM128KB) || \
1063 ((VALUE) == OB_TCM_AXI_SHARED_ITCM192KB) || ((VALUE) == OB_TCM_AXI_SHARED_ITCM256KB))
1064 #endif
1065
1066 #if defined (FLASH_OPTSR2_CPUFREQ_BOOST)
1067 #define IS_OB_USER_CPUFREQ_BOOST(VALUE) (((VALUE) == OB_CPUFREQ_BOOST_DISABLE) || ((VALUE) == OB_CPUFREQ_BOOST_ENABLE))
1068 #endif
1069
1070 #define IS_OB_USER_TYPE(TYPE) ((((TYPE) & OB_USER_ALL) != 0U) && \
1071 (((TYPE) & ~OB_USER_ALL) == 0U))
1072
1073 #define IS_OB_BOOT_ADD_OPTION(VALUE) (((VALUE) == OB_BOOT_ADD0) || \
1074 ((VALUE) == OB_BOOT_ADD1) || \
1075 ((VALUE) == OB_BOOT_ADD_BOTH))
1076
1077 #define IS_FLASH_TYPECRC(VALUE) (((VALUE) == FLASH_CRC_ADDR) || \
1078 ((VALUE) == FLASH_CRC_SECTORS) || \
1079 ((VALUE) == FLASH_CRC_BANK))
1080
1081 #if defined (FLASH_OTPBL_LOCKBL)
1082 #define IS_OTP_BLOCK(VALUE) ((((VALUE) & 0xFFFF0000U) == 0x00000000U) && ((VALUE) != 0x00000000U))
1083 #endif
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097 void FLASH_Erase_Sector(uint32_t Sector, uint32_t Banks, uint32_t VoltageRange);
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110 #ifdef __cplusplus
1111 }
1112 #endif
1113
1114 #endif
1115