Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:35

0001 /**
0002   ******************************************************************************
0003   * @file    stm32h7xx_hal_flash.h
0004   * @author  MCD Application Team
0005   * @brief   Header file of FLASH HAL module.
0006   ******************************************************************************
0007   * @attention
0008   *
0009   * Copyright (c) 2017 STMicroelectronics.
0010   * All rights reserved.
0011   *
0012   * This software is licensed under terms that can be found in the LICENSE file in
0013   * the root directory of this software component.
0014   * If no LICENSE file comes with this software, it is provided AS-IS.
0015   ******************************************************************************
0016   */
0017 
0018 /* Define to prevent recursive inclusion -------------------------------------*/
0019 #ifndef STM32H7xx_HAL_FLASH_H
0020 #define STM32H7xx_HAL_FLASH_H
0021 
0022 #ifdef __cplusplus
0023  extern "C" {
0024 #endif
0025 
0026 /* Includes ------------------------------------------------------------------*/
0027 #include "stm32h7xx_hal_def.h"
0028 
0029 /** @addtogroup STM32H7xx_HAL_Driver
0030   * @{
0031   */
0032 
0033 /** @addtogroup FLASH
0034   * @{
0035   */
0036 
0037 /* Exported types ------------------------------------------------------------*/
0038 /** @defgroup FLASH_Exported_Types FLASH Exported Types
0039   * @ingroup RTEMSBSPsARMSTM32H7
0040   * @{
0041   */
0042 
0043 /**
0044   * @brief  FLASH Procedure structure definition
0045   */
0046 typedef enum
0047 {
0048   FLASH_PROC_NONE = 0U,
0049   FLASH_PROC_SECTERASE_BANK1,
0050   FLASH_PROC_MASSERASE_BANK1,
0051   FLASH_PROC_PROGRAM_BANK1,
0052   FLASH_PROC_SECTERASE_BANK2,
0053   FLASH_PROC_MASSERASE_BANK2,
0054   FLASH_PROC_PROGRAM_BANK2,
0055   FLASH_PROC_ALLBANK_MASSERASE
0056 } FLASH_ProcedureTypeDef;
0057 
0058 
0059 /**
0060   * @brief  FLASH handle Structure definition
0061   */
0062 typedef struct
0063 {
0064   __IO FLASH_ProcedureTypeDef ProcedureOnGoing;   /*!< Internal variable to indicate which procedure is ongoing or not in IT context */
0065 
0066   __IO uint32_t               NbSectorsToErase;   /*!< Internal variable to save the remaining sectors to erase in IT context        */
0067 
0068   __IO uint32_t               VoltageForErase;    /*!< Internal variable to provide voltage range selected by user in IT context     */
0069 
0070   __IO uint32_t               Sector;             /*!< Internal variable to define the current sector which is erasing               */
0071 
0072   __IO uint32_t               Address;            /*!< Internal variable to save address selected for program                        */
0073 
0074   HAL_LockTypeDef             Lock;               /*!< FLASH locking object                                                          */
0075 
0076   __IO uint32_t               ErrorCode;          /*!< FLASH error code                                                              */
0077 
0078 }FLASH_ProcessTypeDef;
0079 
0080 /**
0081   * @}
0082   */
0083 
0084 /* Exported constants --------------------------------------------------------*/
0085 /** @defgroup FLASH_Exported_Constants FLASH Exported Constants
0086   * @ingroup RTEMSBSPsARMSTM32H7
0087   * @{
0088   */
0089 
0090 /** @defgroup FLASH_Error_Code FLASH Error Code
0091   * @ingroup RTEMSBSPsARMSTM32H7
0092   * @brief    FLASH Error Code
0093   * @{
0094   */
0095 #define HAL_FLASH_ERROR_NONE         0x00000000U               /*!< No error                              */
0096 
0097 #define HAL_FLASH_ERROR_WRP          FLASH_FLAG_WRPERR         /*!< Write Protection Error                */
0098 #define HAL_FLASH_ERROR_PGS          FLASH_FLAG_PGSERR         /*!< Program Sequence Error                */
0099 #define HAL_FLASH_ERROR_STRB         FLASH_FLAG_STRBERR        /*!< Strobe Error                          */
0100 #define HAL_FLASH_ERROR_INC          FLASH_FLAG_INCERR         /*!< Inconsistency Error                   */
0101 #if defined (FLASH_SR_OPERR)
0102 #define HAL_FLASH_ERROR_OPE          FLASH_FLAG_OPERR          /*!< Operation Error                       */
0103 #endif /* FLASH_SR_OPERR */
0104 #define HAL_FLASH_ERROR_RDP          FLASH_FLAG_RDPERR         /*!< Read Protection Error                 */
0105 #define HAL_FLASH_ERROR_RDS          FLASH_FLAG_RDSERR         /*!< Read Secured Error                    */
0106 #define HAL_FLASH_ERROR_SNECC        FLASH_FLAG_SNECCERR       /*!< ECC Single Correction Error           */
0107 #define HAL_FLASH_ERROR_DBECC        FLASH_FLAG_DBECCERR       /*!< ECC Double Detection Error            */
0108 #define HAL_FLASH_ERROR_CRCRD        FLASH_FLAG_CRCRDERR       /*!< CRC Read Error                        */
0109 
0110 #define HAL_FLASH_ERROR_WRP_BANK1    FLASH_FLAG_WRPERR_BANK1   /*!< Write Protection Error on Bank 1      */
0111 #define HAL_FLASH_ERROR_PGS_BANK1    FLASH_FLAG_PGSERR_BANK1   /*!< Program Sequence Error on Bank 1      */
0112 #define HAL_FLASH_ERROR_STRB_BANK1   FLASH_FLAG_STRBERR_BANK1  /*!< Strobe Error on Bank 1                */
0113 #define HAL_FLASH_ERROR_INC_BANK1    FLASH_FLAG_INCERR_BANK1   /*!< Inconsistency Error on Bank 1         */
0114 #if defined (FLASH_SR_OPERR)
0115 #define HAL_FLASH_ERROR_OPE_BANK1    FLASH_FLAG_OPERR_BANK1    /*!< Operation Error on Bank 1             */
0116 #endif /* FLASH_SR_OPERR */
0117 #define HAL_FLASH_ERROR_RDP_BANK1    FLASH_FLAG_RDPERR_BANK1   /*!< Read Protection Error on Bank 1       */
0118 #define HAL_FLASH_ERROR_RDS_BANK1    FLASH_FLAG_RDSERR_BANK1   /*!< Read Secured Error on Bank 1          */
0119 #define HAL_FLASH_ERROR_SNECC_BANK1  FLASH_FLAG_SNECCERR_BANK1 /*!< ECC Single Correction Error on Bank 1 */
0120 #define HAL_FLASH_ERROR_DBECC_BANK1  FLASH_FLAG_DBECCERR_BANK1 /*!< ECC Double Detection Error on Bank 1  */
0121 #define HAL_FLASH_ERROR_CRCRD_BANK1  FLASH_FLAG_CRCRDERR_BANK1 /*!< CRC Read Error on Bank1               */
0122 
0123 #define HAL_FLASH_ERROR_WRP_BANK2    FLASH_FLAG_WRPERR_BANK2    /*!< Write Protection Error on Bank 2      */
0124 #define HAL_FLASH_ERROR_PGS_BANK2    FLASH_FLAG_PGSERR_BANK2    /*!< Program Sequence Error on Bank 2      */
0125 #define HAL_FLASH_ERROR_STRB_BANK2   FLASH_FLAG_STRBERR_BANK2   /*!< Strobe Error on Bank 2                */
0126 #define HAL_FLASH_ERROR_INC_BANK2    FLASH_FLAG_INCERR_BANK2    /*!< Inconsistency Error on Bank 2         */
0127 #if defined (FLASH_SR_OPERR)
0128 #define HAL_FLASH_ERROR_OPE_BANK2    FLASH_FLAG_OPERR_BANK2     /*!< Operation Error on Bank 2             */
0129 #endif /* FLASH_SR_OPERR */
0130 #define HAL_FLASH_ERROR_RDP_BANK2    FLASH_FLAG_RDPERR_BANK2    /*!< Read Protection Error on Bank 2       */
0131 #define HAL_FLASH_ERROR_RDS_BANK2    FLASH_FLAG_RDSERR_BANK2    /*!< Read Secured Error on Bank 2          */
0132 #define HAL_FLASH_ERROR_SNECC_BANK2  FLASH_FLAG_SNECCERR_BANK2  /*!< ECC Single Correction Error on Bank 2 */
0133 #define HAL_FLASH_ERROR_DBECC_BANK2  FLASH_FLAG_DBECCERR_BANK2  /*!< ECC Double Detection Error on Bank 2  */
0134 #define HAL_FLASH_ERROR_CRCRD_BANK2  FLASH_FLAG_CRCRDERR_BANK2  /*!< CRC Read Error on Bank2               */
0135 
0136 #define HAL_FLASH_ERROR_OB_CHANGE    FLASH_OPTSR_OPTCHANGEERR   /*!< Option Byte Change Error              */
0137 /**
0138   * @}
0139   */
0140 
0141 /** @defgroup FLASH_Type_Program FLASH Type Program
0142   * @ingroup RTEMSBSPsARMSTM32H7
0143   * @{
0144   */
0145 #define FLASH_TYPEPROGRAM_FLASHWORD  0x01U        /*!< Program a flash word at a specified address */
0146 #if defined (FLASH_OPTCR_PG_OTP)
0147 #define FLASH_TYPEPROGRAM_OTPWORD    0x02U        /*!< Program an OTP word at a specified address  */
0148 #endif /* FLASH_OPTCR_PG_OTP */
0149 /**
0150   * @}
0151   */
0152 
0153 /** @defgroup FLASH_Flag_definition FLASH Flag definition
0154   * @ingroup RTEMSBSPsARMSTM32H7
0155   * @brief Flag definition
0156   * @{
0157   */
0158 #define FLASH_FLAG_BSY                     FLASH_SR_BSY             /*!< FLASH Busy flag */
0159 #define FLASH_FLAG_WBNE                    FLASH_SR_WBNE            /*!< Write Buffer Not Empty flag */
0160 #define FLASH_FLAG_QW                      FLASH_SR_QW              /*!< Wait Queue on flag */
0161 #define FLASH_FLAG_CRC_BUSY                FLASH_SR_CRC_BUSY        /*!< CRC Busy flag */
0162 #define FLASH_FLAG_EOP                     FLASH_SR_EOP             /*!< End Of Program on flag */
0163 #define FLASH_FLAG_WRPERR                  FLASH_SR_WRPERR          /*!< Write Protection Error on flag */
0164 #define FLASH_FLAG_PGSERR                  FLASH_SR_PGSERR          /*!< Program Sequence Error on flag */
0165 #define FLASH_FLAG_STRBERR                 FLASH_SR_STRBERR         /*!< Strobe Error flag */
0166 #define FLASH_FLAG_INCERR                  FLASH_SR_INCERR          /*!< Inconsistency Error on flag */
0167 #if defined (FLASH_SR_OPERR)
0168 #define FLASH_FLAG_OPERR                   FLASH_SR_OPERR           /*!< Operation Error on flag */
0169 #endif /* FLASH_SR_OPERR */
0170 #define FLASH_FLAG_RDPERR                  FLASH_SR_RDPERR          /*!< Read Protection Error on flag */
0171 #define FLASH_FLAG_RDSERR                  FLASH_SR_RDSERR          /*!< Read Secured Error on flag */
0172 #define FLASH_FLAG_SNECCERR                FLASH_SR_SNECCERR        /*!< Single ECC Error Correction on flag */
0173 #define FLASH_FLAG_DBECCERR                FLASH_SR_DBECCERR        /*!< Double Detection ECC Error on flag */
0174 #define FLASH_FLAG_CRCEND                  FLASH_SR_CRCEND          /*!< CRC End of Calculation flag */
0175 #define FLASH_FLAG_CRCRDERR                FLASH_SR_CRCRDERR        /*!< CRC Read Error on bank flag */
0176 
0177 #define FLASH_FLAG_BSY_BANK1               FLASH_SR_BSY             /*!< FLASH Bank 1 Busy flag */
0178 #define FLASH_FLAG_WBNE_BANK1              FLASH_SR_WBNE            /*!< Write Buffer Not Empty on Bank 1 flag */
0179 #define FLASH_FLAG_QW_BANK1                FLASH_SR_QW              /*!< Wait Queue on Bank 1 flag */
0180 #define FLASH_FLAG_CRC_BUSY_BANK1          FLASH_SR_CRC_BUSY        /*!< CRC Busy on Bank 1 flag */
0181 #define FLASH_FLAG_EOP_BANK1               FLASH_SR_EOP             /*!< End Of Program on Bank 1 flag */
0182 #define FLASH_FLAG_WRPERR_BANK1            FLASH_SR_WRPERR          /*!< Write Protection Error on Bank 1 flag */
0183 #define FLASH_FLAG_PGSERR_BANK1            FLASH_SR_PGSERR          /*!< Program Sequence Error on Bank 1 flag */
0184 #define FLASH_FLAG_STRBERR_BANK1           FLASH_SR_STRBERR         /*!< Strobe Error on Bank 1 flag */
0185 #define FLASH_FLAG_INCERR_BANK1            FLASH_SR_INCERR          /*!< Inconsistency Error on Bank 1 flag */
0186 #if defined (FLASH_SR_OPERR)
0187 #define FLASH_FLAG_OPERR_BANK1             FLASH_SR_OPERR           /*!< Operation Error on Bank 1 flag */
0188 #endif /* FLASH_SR_OPERR */
0189 #define FLASH_FLAG_RDPERR_BANK1            FLASH_SR_RDPERR          /*!< Read Protection Error on Bank 1 flag */
0190 #define FLASH_FLAG_RDSERR_BANK1            FLASH_SR_RDSERR          /*!< Read Secured Error on Bank 1 flag */
0191 #define FLASH_FLAG_SNECCERR_BANK1          FLASH_SR_SNECCERR        /*!< Single ECC Error Correction on Bank 1 flag */
0192 #define FLASH_FLAG_DBECCERR_BANK1          FLASH_SR_DBECCERR        /*!< Double Detection ECC Error on Bank 1 flag */
0193 #define FLASH_FLAG_CRCEND_BANK1            FLASH_SR_CRCEND          /*!< CRC End of Calculation on Bank 1 flag */
0194 #define FLASH_FLAG_CRCRDERR_BANK1          FLASH_SR_CRCRDERR        /*!< CRC Read error on Bank 1 flag */
0195 
0196 #if defined (FLASH_SR_OPERR)
0197 #define FLASH_FLAG_ALL_ERRORS_BANK1       (FLASH_FLAG_WRPERR_BANK1   | FLASH_FLAG_PGSERR_BANK1   | \
0198                                            FLASH_FLAG_STRBERR_BANK1  | FLASH_FLAG_INCERR_BANK1   | \
0199                                            FLASH_FLAG_OPERR_BANK1    | FLASH_FLAG_RDPERR_BANK1   | \
0200                                            FLASH_FLAG_RDSERR_BANK1   | FLASH_FLAG_SNECCERR_BANK1 | \
0201                                            FLASH_FLAG_DBECCERR_BANK1 | FLASH_FLAG_CRCRDERR_BANK1) /*!< All Bank 1 error flags */
0202 #else
0203 #define FLASH_FLAG_ALL_ERRORS_BANK1       (FLASH_FLAG_WRPERR_BANK1   | FLASH_FLAG_PGSERR_BANK1   | \
0204                                            FLASH_FLAG_STRBERR_BANK1  | FLASH_FLAG_INCERR_BANK1   | \
0205                                            FLASH_FLAG_RDPERR_BANK1   | FLASH_FLAG_RDSERR_BANK1   | \
0206                                            FLASH_FLAG_SNECCERR_BANK1 | FLASH_FLAG_DBECCERR_BANK1 | \
0207                                            FLASH_FLAG_CRCRDERR_BANK1) /*!< All Bank 1 error flags */
0208 #endif /* FLASH_SR_OPERR */
0209 
0210 #define FLASH_FLAG_ALL_BANK1              (FLASH_FLAG_BSY_BANK1      | FLASH_FLAG_WBNE_BANK1     | \
0211                                            FLASH_FLAG_QW_BANK1       | FLASH_FLAG_CRC_BUSY_BANK1 | \
0212                                            FLASH_FLAG_EOP_BANK1      | FLASH_FLAG_CRCEND_BANK1   | \
0213                                            FLASH_FLAG_ALL_ERRORS_BANK1) /*!< All Bank 1 flags */
0214 
0215 #define FLASH_FLAG_BSY_BANK2               (FLASH_SR_BSY      | 0x80000000U)        /*!< FLASH Bank 2 Busy flag */
0216 #define FLASH_FLAG_WBNE_BANK2              (FLASH_SR_WBNE     | 0x80000000U)        /*!< Write Buffer Not Empty on Bank 2 flag */
0217 #define FLASH_FLAG_QW_BANK2                (FLASH_SR_QW       | 0x80000000U)        /*!< Wait Queue on Bank 2 flag */
0218 #define FLASH_FLAG_CRC_BUSY_BANK2          (FLASH_SR_CRC_BUSY | 0x80000000U)        /*!< CRC Busy on Bank 2 flag */
0219 #define FLASH_FLAG_EOP_BANK2               (FLASH_SR_EOP      | 0x80000000U)        /*!< End Of Program on Bank 2 flag */
0220 #define FLASH_FLAG_WRPERR_BANK2            (FLASH_SR_WRPERR   | 0x80000000U)        /*!< Write Protection Error on Bank 2 flag */
0221 #define FLASH_FLAG_PGSERR_BANK2            (FLASH_SR_PGSERR   | 0x80000000U)        /*!< Program Sequence Error on Bank 2 flag */
0222 #define FLASH_FLAG_STRBERR_BANK2           (FLASH_SR_STRBERR  | 0x80000000U)        /*!< Strobe Error on Bank 2 flag */
0223 #define FLASH_FLAG_INCERR_BANK2            (FLASH_SR_INCERR   | 0x80000000U)        /*!< Inconsistency Error on Bank 2 flag */
0224 #if defined (FLASH_SR_OPERR)
0225 #define FLASH_FLAG_OPERR_BANK2             (FLASH_SR_OPERR    | 0x80000000U)        /*!< Operation Error on Bank 2 flag */
0226 #endif /* FLASH_SR_OPERR */
0227 #define FLASH_FLAG_RDPERR_BANK2            (FLASH_SR_RDPERR   | 0x80000000U)        /*!< Read Protection Error on Bank 2 flag */
0228 #define FLASH_FLAG_RDSERR_BANK2            (FLASH_SR_RDSERR   | 0x80000000U)        /*!< Read Secured Error on Bank 2 flag */
0229 #define FLASH_FLAG_SNECCERR_BANK2          (FLASH_SR_SNECCERR | 0x80000000U)        /*!< Single ECC Error Correction on Bank 2 flag */
0230 #define FLASH_FLAG_DBECCERR_BANK2          (FLASH_SR_DBECCERR | 0x80000000U)        /*!< Double Detection ECC Error on Bank 2 flag */
0231 #define FLASH_FLAG_CRCEND_BANK2            (FLASH_SR_CRCEND   | 0x80000000U)        /*!< CRC End of Calculation on Bank 2 flag */
0232 #define FLASH_FLAG_CRCRDERR_BANK2          (FLASH_SR_CRCRDERR | 0x80000000U)        /*!< CRC Read error on Bank 2 flag */
0233 
0234 #if defined (FLASH_SR_OPERR)
0235 #define FLASH_FLAG_ALL_ERRORS_BANK2       (FLASH_FLAG_WRPERR_BANK2   | FLASH_FLAG_PGSERR_BANK2   | \
0236                                            FLASH_FLAG_STRBERR_BANK2  | FLASH_FLAG_INCERR_BANK2   | \
0237                                            FLASH_FLAG_OPERR_BANK2    | FLASH_FLAG_RDPERR_BANK2   | \
0238                                            FLASH_FLAG_RDSERR_BANK2   | FLASH_FLAG_SNECCERR_BANK2 | \
0239                                            FLASH_FLAG_DBECCERR_BANK2 | FLASH_FLAG_CRCRDERR_BANK2) /*!< All Bank 2 error flags */
0240 #else
0241 #define FLASH_FLAG_ALL_ERRORS_BANK2       (FLASH_FLAG_WRPERR_BANK2   | FLASH_FLAG_PGSERR_BANK2   | \
0242                                            FLASH_FLAG_STRBERR_BANK2  | FLASH_FLAG_INCERR_BANK2   | \
0243                                            FLASH_FLAG_RDPERR_BANK2   | FLASH_FLAG_RDSERR_BANK2   | \
0244                                            FLASH_FLAG_SNECCERR_BANK2 | FLASH_FLAG_DBECCERR_BANK2 | \
0245                                            FLASH_FLAG_CRCRDERR_BANK2) /*!< All Bank 2 error flags */
0246 #endif /* FLASH_SR_OPERR */
0247 
0248 #define FLASH_FLAG_ALL_BANK2              (FLASH_FLAG_BSY_BANK2      | FLASH_FLAG_WBNE_BANK2     | \
0249                                            FLASH_FLAG_QW_BANK2       | FLASH_FLAG_CRC_BUSY_BANK2 | \
0250                                            FLASH_FLAG_EOP_BANK2      | FLASH_FLAG_CRCEND_BANK2   | \
0251                                            FLASH_FLAG_ALL_ERRORS_BANK2) /*!< All Bank 2 flags */
0252 /**
0253   * @}
0254   */
0255 
0256 /** @defgroup FLASH_Interrupt_definition FLASH Interrupt definition
0257   * @ingroup RTEMSBSPsARMSTM32H7
0258   * @brief FLASH Interrupt definition
0259   * @{
0260   */
0261 #define FLASH_IT_EOP_BANK1                  FLASH_CR_EOPIE       /*!< End of FLASH Bank 1 Operation Interrupt source */
0262 #define FLASH_IT_WRPERR_BANK1               FLASH_CR_WRPERRIE    /*!< Write Protection Error on Bank 1 Interrupt source */
0263 #define FLASH_IT_PGSERR_BANK1               FLASH_CR_PGSERRIE    /*!< Program Sequence Error on Bank 1 Interrupt source */
0264 #define FLASH_IT_STRBERR_BANK1              FLASH_CR_STRBERRIE   /*!< Strobe Error on Bank 1 Interrupt source */
0265 #define FLASH_IT_INCERR_BANK1               FLASH_CR_INCERRIE    /*!< Inconsistency Error on Bank 1 Interrupt source */
0266 #if defined (FLASH_CR_OPERRIE)
0267 #define FLASH_IT_OPERR_BANK1                FLASH_CR_OPERRIE     /*!< Operation Error on Bank 1 Interrupt source */
0268 #endif /* FLASH_CR_OPERRIE */
0269 #define FLASH_IT_RDPERR_BANK1               FLASH_CR_RDPERRIE    /*!< Read protection Error on Bank 1 Interrupt source */
0270 #define FLASH_IT_RDSERR_BANK1               FLASH_CR_RDSERRIE    /*!< Read Secured Error on Bank 1 Interrupt source */
0271 #define FLASH_IT_SNECCERR_BANK1             FLASH_CR_SNECCERRIE  /*!< Single ECC Error Correction on Bank 1 Interrupt source */
0272 #define FLASH_IT_DBECCERR_BANK1             FLASH_CR_DBECCERRIE  /*!< Double Detection ECC Error on Bank 1 Interrupt source */
0273 #define FLASH_IT_CRCEND_BANK1               FLASH_CR_CRCENDIE    /*!< CRC End on Bank 1 Interrupt source */
0274 #define FLASH_IT_CRCRDERR_BANK1             FLASH_CR_CRCRDERRIE  /*!< CRC Read error on Bank 1 Interrupt source */
0275 
0276 #if defined (FLASH_CR_OPERRIE)
0277 #define FLASH_IT_ALL_BANK1                 (FLASH_IT_EOP_BANK1       | FLASH_IT_WRPERR_BANK1    | \
0278                                             FLASH_IT_PGSERR_BANK1    | FLASH_IT_STRBERR_BANK1   | \
0279                                             FLASH_IT_INCERR_BANK1    | FLASH_IT_OPERR_BANK1     | \
0280                                             FLASH_IT_RDPERR_BANK1    | FLASH_IT_RDSERR_BANK1    | \
0281                                             FLASH_IT_SNECCERR_BANK1  | FLASH_IT_DBECCERR_BANK1  | \
0282                                             FLASH_IT_CRCEND_BANK1    | FLASH_IT_CRCRDERR_BANK1) /*!< All Bank 1 Interrupt sources */
0283 #else
0284 #define FLASH_IT_ALL_BANK1                 (FLASH_IT_EOP_BANK1       | FLASH_IT_WRPERR_BANK1    | \
0285                                             FLASH_IT_PGSERR_BANK1    | FLASH_IT_STRBERR_BANK1   | \
0286                                             FLASH_IT_INCERR_BANK1    | FLASH_IT_RDPERR_BANK1    | \
0287                                             FLASH_IT_RDSERR_BANK1    | FLASH_IT_SNECCERR_BANK1  | \
0288                                             FLASH_IT_DBECCERR_BANK1  | FLASH_IT_CRCEND_BANK1    | \
0289                                             FLASH_IT_CRCRDERR_BANK1) /*!< All Bank 1 Interrupt sources */
0290 #endif /* FLASH_CR_OPERRIE */
0291 
0292 #define FLASH_IT_EOP_BANK2                 (FLASH_CR_EOPIE      | 0x80000000U)  /*!< End of FLASH Bank 2 Operation Interrupt source */
0293 #define FLASH_IT_WRPERR_BANK2              (FLASH_CR_WRPERRIE   | 0x80000000U)  /*!< Write Protection Error on Bank 2 Interrupt source */
0294 #define FLASH_IT_PGSERR_BANK2              (FLASH_CR_PGSERRIE   | 0x80000000U)  /*!< Program Sequence Error on Bank 2 Interrupt source */
0295 #define FLASH_IT_STRBERR_BANK2             (FLASH_CR_STRBERRIE  | 0x80000000U)  /*!< Strobe Error on Bank 2 Interrupt source */
0296 #define FLASH_IT_INCERR_BANK2              (FLASH_CR_INCERRIE   | 0x80000000U)  /*!< Inconsistency Error on Bank 2 Interrupt source */
0297 #if defined (FLASH_CR_OPERRIE)
0298 #define FLASH_IT_OPERR_BANK2               (FLASH_CR_OPERRIE    | 0x80000000U)  /*!< Operation Error on Bank 2 Interrupt source */
0299 #endif /* FLASH_CR_OPERRIE */
0300 #define FLASH_IT_RDPERR_BANK2              (FLASH_CR_RDPERRIE   | 0x80000000U)  /*!< Read protection Error on Bank 2 Interrupt source */
0301 #define FLASH_IT_RDSERR_BANK2              (FLASH_CR_RDSERRIE   | 0x80000000U)  /*!< Read Secured Error on Bank 2 Interrupt source */
0302 #define FLASH_IT_SNECCERR_BANK2            (FLASH_CR_SNECCERRIE | 0x80000000U)  /*!< Single ECC Error Correction on Bank 2 Interrupt source */
0303 #define FLASH_IT_DBECCERR_BANK2            (FLASH_CR_DBECCERRIE | 0x80000000U)  /*!< Double Detection ECC Error on Bank 2 Interrupt source */
0304 #define FLASH_IT_CRCEND_BANK2              (FLASH_CR_CRCENDIE   | 0x80000000U)  /*!< CRC End on Bank 2 Interrupt source */
0305 #define FLASH_IT_CRCRDERR_BANK2            (FLASH_CR_CRCRDERRIE | 0x80000000U)  /*!< CRC Read Error on Bank 2 Interrupt source */
0306 
0307 #if defined (FLASH_CR_OPERRIE)
0308 #define FLASH_IT_ALL_BANK2                 (FLASH_IT_EOP_BANK2       | FLASH_IT_WRPERR_BANK2    | \
0309                                             FLASH_IT_PGSERR_BANK2    | FLASH_IT_STRBERR_BANK2   | \
0310                                             FLASH_IT_INCERR_BANK2    | FLASH_IT_OPERR_BANK2     | \
0311                                             FLASH_IT_RDPERR_BANK2    | FLASH_IT_RDSERR_BANK2    | \
0312                                             FLASH_IT_SNECCERR_BANK2  | FLASH_IT_DBECCERR_BANK2  | \
0313                                             FLASH_IT_CRCEND_BANK2    | FLASH_IT_CRCRDERR_BANK2) /*!< All Bank 2 Interrupt sources */
0314 #else
0315 #define FLASH_IT_ALL_BANK2                 (FLASH_IT_EOP_BANK2       | FLASH_IT_WRPERR_BANK2    | \
0316                                             FLASH_IT_PGSERR_BANK2    | FLASH_IT_STRBERR_BANK2   | \
0317                                             FLASH_IT_INCERR_BANK2    | FLASH_IT_RDPERR_BANK2    | \
0318                                             FLASH_IT_RDSERR_BANK2    | FLASH_IT_SNECCERR_BANK2  | \
0319                                             FLASH_IT_DBECCERR_BANK2  | FLASH_IT_CRCEND_BANK2    | \
0320                                             FLASH_IT_CRCRDERR_BANK2) /*!< All Bank 2 Interrupt sources */
0321 #endif /* FLASH_CR_OPERRIE */
0322 /**
0323   * @}
0324   */
0325 
0326 #if defined (FLASH_CR_PSIZE)
0327 /** @defgroup FLASH_Program_Parallelism FLASH Program Parallelism
0328   * @ingroup RTEMSBSPsARMSTM32H7
0329   * @{
0330   */
0331 #define FLASH_PSIZE_BYTE           0x00000000U       /*!< Flash program/erase by 8 bits  */
0332 #define FLASH_PSIZE_HALF_WORD      FLASH_CR_PSIZE_0  /*!< Flash program/erase by 16 bits */
0333 #define FLASH_PSIZE_WORD           FLASH_CR_PSIZE_1  /*!< Flash program/erase by 32 bits */
0334 #define FLASH_PSIZE_DOUBLE_WORD    FLASH_CR_PSIZE    /*!< Flash program/erase by 64 bits */
0335 /**
0336   * @}
0337   */
0338 #endif /* FLASH_CR_PSIZE */
0339 
0340 
0341 /** @defgroup FLASH_Keys FLASH Keys
0342   * @ingroup RTEMSBSPsARMSTM32H7
0343   * @{
0344   */
0345 #define FLASH_KEY1                 0x45670123U
0346 #define FLASH_KEY2                 0xCDEF89ABU
0347 #define FLASH_OPT_KEY1             0x08192A3BU
0348 #define FLASH_OPT_KEY2             0x4C5D6E7FU
0349 /**
0350   * @}
0351   */
0352 
0353 /** @defgroup FLASH_Sectors FLASH Sectors
0354   * @ingroup RTEMSBSPsARMSTM32H7
0355   * @{
0356   */
0357 #define FLASH_SECTOR_0             0U       /*!< Sector Number 0   */
0358 #define FLASH_SECTOR_1             1U       /*!< Sector Number 1   */
0359 #define FLASH_SECTOR_2             2U       /*!< Sector Number 2   */
0360 #define FLASH_SECTOR_3             3U       /*!< Sector Number 3   */
0361 #define FLASH_SECTOR_4             4U       /*!< Sector Number 4   */
0362 #define FLASH_SECTOR_5             5U       /*!< Sector Number 5   */
0363 #define FLASH_SECTOR_6             6U       /*!< Sector Number 6   */
0364 #define FLASH_SECTOR_7             7U       /*!< Sector Number 7   */
0365 #if (FLASH_SECTOR_TOTAL == 128)
0366 #define FLASH_SECTOR_8             8U       /*!< Sector Number 8   */
0367 #define FLASH_SECTOR_9             9U       /*!< Sector Number 9   */
0368 #define FLASH_SECTOR_10            10U      /*!< Sector Number 10  */
0369 #define FLASH_SECTOR_11            11U      /*!< Sector Number 11  */
0370 #define FLASH_SECTOR_12            12U      /*!< Sector Number 12  */
0371 #define FLASH_SECTOR_13            13U      /*!< Sector Number 13  */
0372 #define FLASH_SECTOR_14            14U      /*!< Sector Number 14  */
0373 #define FLASH_SECTOR_15            15U      /*!< Sector Number 15  */
0374 #define FLASH_SECTOR_16            16U      /*!< Sector Number 16  */
0375 #define FLASH_SECTOR_17            17U      /*!< Sector Number 17  */
0376 #define FLASH_SECTOR_18            18U      /*!< Sector Number 18  */
0377 #define FLASH_SECTOR_19            19U      /*!< Sector Number 19  */
0378 #define FLASH_SECTOR_20            20U      /*!< Sector Number 20  */
0379 #define FLASH_SECTOR_21            21U      /*!< Sector Number 21  */
0380 #define FLASH_SECTOR_22            22U      /*!< Sector Number 22  */
0381 #define FLASH_SECTOR_23            23U      /*!< Sector Number 23  */
0382 #define FLASH_SECTOR_24            24U      /*!< Sector Number 24  */
0383 #define FLASH_SECTOR_25            25U      /*!< Sector Number 25  */
0384 #define FLASH_SECTOR_26            26U      /*!< Sector Number 26  */
0385 #define FLASH_SECTOR_27            27U      /*!< Sector Number 27  */
0386 #define FLASH_SECTOR_28            28U      /*!< Sector Number 28  */
0387 #define FLASH_SECTOR_29            29U      /*!< Sector Number 29  */
0388 #define FLASH_SECTOR_30            30U      /*!< Sector Number 30  */
0389 #define FLASH_SECTOR_31            31U      /*!< Sector Number 31  */
0390 #define FLASH_SECTOR_32            32U      /*!< Sector Number 32  */
0391 #define FLASH_SECTOR_33            33U      /*!< Sector Number 33  */
0392 #define FLASH_SECTOR_34            34U      /*!< Sector Number 34  */
0393 #define FLASH_SECTOR_35            35U      /*!< Sector Number 35  */
0394 #define FLASH_SECTOR_36            36U      /*!< Sector Number 36  */
0395 #define FLASH_SECTOR_37            37U      /*!< Sector Number 37  */
0396 #define FLASH_SECTOR_38            38U      /*!< Sector Number 38  */
0397 #define FLASH_SECTOR_39            39U      /*!< Sector Number 39  */
0398 #define FLASH_SECTOR_40            40U      /*!< Sector Number 40  */
0399 #define FLASH_SECTOR_41            41U      /*!< Sector Number 41  */
0400 #define FLASH_SECTOR_42            42U      /*!< Sector Number 42  */
0401 #define FLASH_SECTOR_43            43U      /*!< Sector Number 43  */
0402 #define FLASH_SECTOR_44            44U      /*!< Sector Number 44  */
0403 #define FLASH_SECTOR_45            45U      /*!< Sector Number 45  */
0404 #define FLASH_SECTOR_46            46U      /*!< Sector Number 46  */
0405 #define FLASH_SECTOR_47            47U      /*!< Sector Number 47  */
0406 #define FLASH_SECTOR_48            48U      /*!< Sector Number 48  */
0407 #define FLASH_SECTOR_49            49U      /*!< Sector Number 49  */
0408 #define FLASH_SECTOR_50            50U      /*!< Sector Number 50  */
0409 #define FLASH_SECTOR_51            51U      /*!< Sector Number 51  */
0410 #define FLASH_SECTOR_52            52U      /*!< Sector Number 52  */
0411 #define FLASH_SECTOR_53            53U      /*!< Sector Number 53  */
0412 #define FLASH_SECTOR_54            54U      /*!< Sector Number 54  */
0413 #define FLASH_SECTOR_55            55U      /*!< Sector Number 55  */
0414 #define FLASH_SECTOR_56            56U      /*!< Sector Number 56  */
0415 #define FLASH_SECTOR_57            57U      /*!< Sector Number 57  */
0416 #define FLASH_SECTOR_58            58U      /*!< Sector Number 58  */
0417 #define FLASH_SECTOR_59            59U      /*!< Sector Number 59  */
0418 #define FLASH_SECTOR_60            60U      /*!< Sector Number 60  */
0419 #define FLASH_SECTOR_61            61U      /*!< Sector Number 61  */
0420 #define FLASH_SECTOR_62            62U      /*!< Sector Number 62  */
0421 #define FLASH_SECTOR_63            63U      /*!< Sector Number 63  */
0422 #define FLASH_SECTOR_64            64U      /*!< Sector Number 64  */
0423 #define FLASH_SECTOR_65            65U      /*!< Sector Number 65  */
0424 #define FLASH_SECTOR_66            66U      /*!< Sector Number 66  */
0425 #define FLASH_SECTOR_67            67U      /*!< Sector Number 67  */
0426 #define FLASH_SECTOR_68            68U      /*!< Sector Number 68  */
0427 #define FLASH_SECTOR_69            69U      /*!< Sector Number 69  */
0428 #define FLASH_SECTOR_70            70U      /*!< Sector Number 70  */
0429 #define FLASH_SECTOR_71            71U      /*!< Sector Number 71  */
0430 #define FLASH_SECTOR_72            72U      /*!< Sector Number 72  */
0431 #define FLASH_SECTOR_73            73U      /*!< Sector Number 73  */
0432 #define FLASH_SECTOR_74            74U      /*!< Sector Number 74  */
0433 #define FLASH_SECTOR_75            75U      /*!< Sector Number 75  */
0434 #define FLASH_SECTOR_76            76U      /*!< Sector Number 76  */
0435 #define FLASH_SECTOR_77            77U      /*!< Sector Number 77  */
0436 #define FLASH_SECTOR_78            78U      /*!< Sector Number 78  */
0437 #define FLASH_SECTOR_79            79U      /*!< Sector Number 79  */
0438 #define FLASH_SECTOR_80            80U      /*!< Sector Number 80  */
0439 #define FLASH_SECTOR_81            81U      /*!< Sector Number 81  */
0440 #define FLASH_SECTOR_82            82U      /*!< Sector Number 82  */
0441 #define FLASH_SECTOR_83            83U      /*!< Sector Number 83  */
0442 #define FLASH_SECTOR_84            84U      /*!< Sector Number 84  */
0443 #define FLASH_SECTOR_85            85U      /*!< Sector Number 85  */
0444 #define FLASH_SECTOR_86            86U      /*!< Sector Number 86  */
0445 #define FLASH_SECTOR_87            87U      /*!< Sector Number 87  */
0446 #define FLASH_SECTOR_88            88U      /*!< Sector Number 88  */
0447 #define FLASH_SECTOR_89            89U      /*!< Sector Number 89  */
0448 #define FLASH_SECTOR_90            90U      /*!< Sector Number 90  */
0449 #define FLASH_SECTOR_91            91U      /*!< Sector Number 91  */
0450 #define FLASH_SECTOR_92            92U      /*!< Sector Number 92  */
0451 #define FLASH_SECTOR_93            93U      /*!< Sector Number 93  */
0452 #define FLASH_SECTOR_94            94U      /*!< Sector Number 94  */
0453 #define FLASH_SECTOR_95            95U      /*!< Sector Number 95  */
0454 #define FLASH_SECTOR_96            96U      /*!< Sector Number 96  */
0455 #define FLASH_SECTOR_97            97U      /*!< Sector Number 97  */
0456 #define FLASH_SECTOR_98            98U      /*!< Sector Number 98  */
0457 #define FLASH_SECTOR_99            99U      /*!< Sector Number 99  */
0458 #define FLASH_SECTOR_100           100U     /*!< Sector Number 100 */
0459 #define FLASH_SECTOR_101           101U     /*!< Sector Number 101 */
0460 #define FLASH_SECTOR_102           102U     /*!< Sector Number 102 */
0461 #define FLASH_SECTOR_103           103U     /*!< Sector Number 103 */
0462 #define FLASH_SECTOR_104           104U     /*!< Sector Number 104 */
0463 #define FLASH_SECTOR_105           105U     /*!< Sector Number 105 */
0464 #define FLASH_SECTOR_106           106U     /*!< Sector Number 106 */
0465 #define FLASH_SECTOR_107           107U     /*!< Sector Number 107 */
0466 #define FLASH_SECTOR_108           108U     /*!< Sector Number 108 */
0467 #define FLASH_SECTOR_109           109U     /*!< Sector Number 109 */
0468 #define FLASH_SECTOR_110           110U     /*!< Sector Number 110 */
0469 #define FLASH_SECTOR_111           111U     /*!< Sector Number 111 */
0470 #define FLASH_SECTOR_112           112U     /*!< Sector Number 112 */
0471 #define FLASH_SECTOR_113           113U     /*!< Sector Number 113 */
0472 #define FLASH_SECTOR_114           114U     /*!< Sector Number 114 */
0473 #define FLASH_SECTOR_115           115U     /*!< Sector Number 115 */
0474 #define FLASH_SECTOR_116           116U     /*!< Sector Number 116 */
0475 #define FLASH_SECTOR_117           117U     /*!< Sector Number 117 */
0476 #define FLASH_SECTOR_118           118U     /*!< Sector Number 118 */
0477 #define FLASH_SECTOR_119           119U     /*!< Sector Number 119 */
0478 #define FLASH_SECTOR_120           120U     /*!< Sector Number 120 */
0479 #define FLASH_SECTOR_121           121U     /*!< Sector Number 121 */
0480 #define FLASH_SECTOR_122           122U     /*!< Sector Number 122 */
0481 #define FLASH_SECTOR_123           123U     /*!< Sector Number 123 */
0482 #define FLASH_SECTOR_124           124U     /*!< Sector Number 124 */
0483 #define FLASH_SECTOR_125           125U     /*!< Sector Number 125 */
0484 #define FLASH_SECTOR_126           126U     /*!< Sector Number 126 */
0485 #define FLASH_SECTOR_127           127U     /*!< Sector Number 127 */
0486 #endif /* FLASH_SECTOR_TOTAL == 128 */
0487 /**
0488   * @}
0489   */
0490 
0491 /**
0492   * @}
0493   */
0494 
0495 /* Exported macro ------------------------------------------------------------*/
0496 /** @defgroup FLASH_Exported_Macros FLASH Exported Macros
0497   * @ingroup RTEMSBSPsARMSTM32H7
0498   * @{
0499   */
0500 /**
0501   * @brief  Set the FLASH Latency.
0502   * @param  __LATENCY__: FLASH Latency
0503   *         The value of this parameter depend on device used within the same series
0504   * @retval none
0505   */
0506 #define __HAL_FLASH_SET_LATENCY(__LATENCY__) \
0507                   MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(__LATENCY__))
0508 
0509 /**
0510   * @brief  Get the FLASH Latency.
0511   * @retval FLASH Latency
0512   *          The value of this parameter depend on device used within the same series
0513   */
0514 #define __HAL_FLASH_GET_LATENCY()     (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY))
0515 
0516 /**
0517   * @brief  Enable the specified FLASH interrupt.
0518   * @param  __INTERRUPT__ : FLASH interrupt
0519   *   In case of Bank 1 This parameter can be any combination of the following values:
0520   *     @arg FLASH_IT_EOP_BANK1       : End of FLASH Bank 1 Operation Interrupt source
0521   *     @arg FLASH_IT_WRPERR_BANK1    : Write Protection Error on Bank 1 Interrupt source
0522   *     @arg FLASH_IT_PGSERR_BANK1    : Program Sequence Error on Bank 1 Interrupt source
0523   *     @arg FLASH_IT_STRBERR_BANK1   : Strobe Error on Bank 1 Interrupt source
0524   *     @arg FLASH_IT_INCERR_BANK1    : Inconsistency Error on Bank 1 Interrupt source
0525   *     @arg FLASH_IT_OPERR_BANK1     : Operation Error on Bank 1 Interrupt source
0526   *     @arg FLASH_IT_RDPERR_BANK1    : Read protection Error on Bank 1 Interrupt source
0527   *     @arg FLASH_IT_RDSERR_BANK1    : Read secure Error on Bank 1 Interrupt source
0528   *     @arg FLASH_IT_SNECCERR_BANK1  : Single ECC Error Correction on Bank 1 Interrupt source
0529   *     @arg FLASH_IT_DBECCERR_BANK1  : Double Detection ECC Error on Bank 1 Interrupt source
0530   *     @arg FLASH_IT_CRCEND_BANK1    : CRC End on Bank 1 Interrupt source
0531   *     @arg FLASH_IT_CRCRDERR_BANK1  : CRC Read error on Bank 1 Interrupt source
0532   *     @arg FLASH_IT_ALL_BANK1       : All Bank 1 Interrupt sources
0533   *
0534   *   In case of Bank 2, this parameter can be any combination of the following values:
0535   *     @arg FLASH_IT_EOP_BANK2       : End of FLASH Bank 2 Operation Interrupt source
0536   *     @arg FLASH_IT_WRPERR_BANK2    : Write Protection Error on Bank 2 Interrupt source
0537   *     @arg FLASH_IT_PGSERR_BANK2    : Program Sequence Error on Bank 2 Interrupt source
0538   *     @arg FLASH_IT_STRBERR_BANK2   : Strobe Error on Bank 2 Interrupt source
0539   *     @arg FLASH_IT_INCERR_BANK2    : Inconsistency Error on Bank 2 Interrupt source
0540   *     @arg FLASH_IT_OPERR_BANK2     : Operation Error on Bank 2 Interrupt source
0541   *     @arg FLASH_IT_RDPERR_BANK2    : Read protection Error on Bank 2 Interrupt source
0542   *     @arg FLASH_IT_RDSERR_BANK2    : Read secure Error on Bank 2 Interrupt source
0543   *     @arg FLASH_IT_SNECCERR_BANK2  : Single ECC Error Correction on Bank 2 Interrupt source
0544   *     @arg FLASH_IT_DBECCERR_BANK2  : Double Detection ECC Error on Bank 2 Interrupt source
0545   *     @arg FLASH_IT_CRCEND_BANK2    : CRC End on Bank 2 Interrupt source
0546   *     @arg FLASH_IT_CRCRDERR_BANK2  : CRC Read error on Bank 2 Interrupt source
0547   *     @arg FLASH_IT_ALL_BANK2       : All Bank 2 Interrupt sources
0548   * @retval none
0549   */
0550 
0551 #define __HAL_FLASH_ENABLE_IT_BANK1(__INTERRUPT__)      (FLASH->CR1 |= (__INTERRUPT__))
0552 
0553 #define __HAL_FLASH_ENABLE_IT_BANK2(__INTERRUPT__)      (FLASH->CR2 |= ((__INTERRUPT__) & 0x7FFFFFFFU))
0554 
0555 #if defined (DUAL_BANK)
0556 #define __HAL_FLASH_ENABLE_IT(__INTERRUPT__)    (IS_FLASH_IT_BANK1(__INTERRUPT__) ? \
0557                                                  __HAL_FLASH_ENABLE_IT_BANK1(__INTERRUPT__) : \
0558                                                  __HAL_FLASH_ENABLE_IT_BANK2(__INTERRUPT__))
0559 #else
0560 #define __HAL_FLASH_ENABLE_IT(__INTERRUPT__)    __HAL_FLASH_ENABLE_IT_BANK1(__INTERRUPT__)
0561 #endif /* DUAL_BANK */
0562 
0563 
0564 /**
0565   * @brief  Disable the specified FLASH interrupt.
0566   * @param  __INTERRUPT__ : FLASH interrupt
0567   *   In case of Bank 1 This parameter can be any combination of the following values:
0568   *     @arg FLASH_IT_EOP_BANK1       : End of FLASH Bank 1 Operation Interrupt source
0569   *     @arg FLASH_IT_WRPERR_BANK1    : Write Protection Error on Bank 1 Interrupt source
0570   *     @arg FLASH_IT_PGSERR_BANK1    : Program Sequence Error on Bank 1 Interrupt source
0571   *     @arg FLASH_IT_STRBERR_BANK1   : Strobe Error on Bank 1 Interrupt source
0572   *     @arg FLASH_IT_INCERR_BANK1    : Inconsistency Error on Bank 1 Interrupt source
0573   *     @arg FLASH_IT_OPERR_BANK1     : Operation Error on Bank 1 Interrupt source
0574   *     @arg FLASH_IT_RDPERR_BANK1    : Read protection Error on Bank 1 Interrupt source
0575   *     @arg FLASH_IT_RDSERR_BANK1    : Read secure Error on Bank 1 Interrupt source
0576   *     @arg FLASH_IT_SNECCERR_BANK1  : Single ECC Error Correction on Bank 1 Interrupt source
0577   *     @arg FLASH_IT_DBECCERR_BANK1  : Double Detection ECC Error on Bank 1 Interrupt source
0578   *     @arg FLASH_IT_CRCEND_BANK1    : CRC End on Bank 1 Interrupt source
0579   *     @arg FLASH_IT_CRCRDERR_BANK1  : CRC Read error on Bank 1 Interrupt source
0580   *     @arg FLASH_IT_ALL_BANK1       : All Bank 1 Interrupt sources
0581   *
0582   *   In case of Bank 2, this parameter can be any combination of the following values:
0583   *     @arg FLASH_IT_EOP_BANK2       : End of FLASH Bank 2 Operation Interrupt source
0584   *     @arg FLASH_IT_WRPERR_BANK2    : Write Protection Error on Bank 2 Interrupt source
0585   *     @arg FLASH_IT_PGSERR_BANK2    : Program Sequence Error on Bank 2 Interrupt source
0586   *     @arg FLASH_IT_STRBERR_BANK2   : Strobe Error on Bank 2 Interrupt source
0587   *     @arg FLASH_IT_INCERR_BANK2    : Inconsistency Error on Bank 2 Interrupt source
0588   *     @arg FLASH_IT_OPERR_BANK2     : Operation Error on Bank 2 Interrupt source
0589   *     @arg FLASH_IT_RDPERR_BANK2    : Read protection Error on Bank 2 Interrupt source
0590   *     @arg FLASH_IT_RDSERR_BANK2    : Read secure Error on Bank 2 Interrupt source
0591   *     @arg FLASH_IT_SNECCERR_BANK2  : Single ECC Error Correction on Bank 2 Interrupt source
0592   *     @arg FLASH_IT_DBECCERR_BANK2  : Double Detection ECC Error on Bank 2 Interrupt source
0593   *     @arg FLASH_IT_CRCEND_BANK2    : CRC End on Bank 2 Interrupt source
0594   *     @arg FLASH_IT_CRCRDERR_BANK2  : CRC Read error on Bank 2 Interrupt source
0595   *     @arg FLASH_IT_ALL_BANK2       : All Bank 2 Interrupt sources
0596   * @retval none
0597   */
0598 
0599 #define __HAL_FLASH_DISABLE_IT_BANK1(__INTERRUPT__)  (FLASH->CR1 &= ~(uint32_t)(__INTERRUPT__))
0600 
0601 #define __HAL_FLASH_DISABLE_IT_BANK2(__INTERRUPT__)  (FLASH->CR2 &= ~(uint32_t)((__INTERRUPT__) & 0x7FFFFFFFU))
0602 
0603 #if defined (DUAL_BANK)
0604 #define __HAL_FLASH_DISABLE_IT(__INTERRUPT__)  (IS_FLASH_IT_BANK1(__INTERRUPT__) ? \
0605                                                 __HAL_FLASH_DISABLE_IT_BANK1(__INTERRUPT__) : \
0606                                                 __HAL_FLASH_DISABLE_IT_BANK2(__INTERRUPT__))
0607 #else
0608 #define __HAL_FLASH_DISABLE_IT(__INTERRUPT__)  __HAL_FLASH_DISABLE_IT_BANK1(__INTERRUPT__)
0609 #endif /* DUAL_BANK */
0610 
0611 
0612 /**
0613   * @brief  Checks whether the specified FLASH flag is set or not.
0614   * @param  __FLAG__: specifies the FLASH flag to check.
0615   *   In case of Bank 1 This parameter can be one of the following values :
0616   *     @arg FLASH_FLAG_BSY_BANK1      : FLASH Bank 1 Busy flag
0617   *     @arg FLASH_FLAG_WBNE_BANK1     : Write Buffer Not Empty on Bank 1 flag
0618   *     @arg FLASH_FLAG_QW_BANK1       : Wait Queue on Bank 1 flag
0619   *     @arg FLASH_FLAG_CRC_BUSY_BANK1 : CRC module is working on Bank 1 flag
0620   *     @arg FLASH_FLAG_EOP_BANK1      : End Of Program on Bank 1 flag
0621   *     @arg FLASH_FLAG_WRPERR_BANK1   : Write Protection Error on Bank 1 flag
0622   *     @arg FLASH_FLAG_PGSERR_BANK1   : Program Sequence Error on Bank 1 flag
0623   *     @arg FLASH_FLAG_STRBER_BANK1   : Program Alignment Error on Bank 1 flag
0624   *     @arg FLASH_FLAG_INCERR_BANK1   : Inconsistency Error on Bank 1 flag
0625   *     @arg FLASH_FLAG_OPERR_BANK1    : Operation Error on Bank 1 flag
0626   *     @arg FLASH_FLAG_RDPERR_BANK1   : Read Protection Error on Bank 1 flag
0627   *     @arg FLASH_FLAG_RDSERR_BANK1   : Read secure  Error on Bank 1 flag
0628   *     @arg FLASH_FLAG_SNECCE_BANK1   : Single ECC Error Correction on Bank 1 flag
0629   *     @arg FLASH_FLAG_DBECCE_BANK1   : Double Detection ECC Error on Bank 1 flag
0630   *     @arg FLASH_FLAG_CRCEND_BANK1   : CRC End on Bank 1 flag
0631   *     @arg FLASH_FLAG_CRCRDERR_BANK1 : CRC Read error on Bank 1 flag
0632   *
0633   *   In case of Bank 2 This parameter can be one of the following values :
0634   *     @arg FLASH_FLAG_BSY_BANK2      : FLASH Bank 2 Busy flag
0635   *     @arg FLASH_FLAG_WBNE_BANK2     : Write Buffer Not Empty on Bank 2 flag
0636   *     @arg FLASH_FLAG_QW_BANK2       : Wait Queue on Bank 2 flag
0637   *     @arg FLASH_FLAG_CRC_BUSY_BANK2 : CRC module is working on Bank 2 flag
0638   *     @arg FLASH_FLAG_EOP_BANK2      : End Of Program on Bank 2 flag
0639   *     @arg FLASH_FLAG_WRPERR_BANK2   : Write Protection Error on Bank 2 flag
0640   *     @arg FLASH_FLAG_PGSERR_BANK2   : Program Sequence Error on Bank 2 flag
0641   *     @arg FLASH_FLAG_STRBER_BANK2   : Program Alignment Error on Bank 2 flag
0642   *     @arg FLASH_FLAG_INCERR_BANK2   : Inconsistency Error on Bank 2 flag
0643   *     @arg FLASH_FLAG_OPERR_BANK2    : Operation Error on Bank 2 flag
0644   *     @arg FLASH_FLAG_RDPERR_BANK2   : Read Protection Error on Bank 2 flag
0645   *     @arg FLASH_FLAG_RDSERR_BANK2   : Read secure  Error on Bank 2 flag
0646   *     @arg FLASH_FLAG_SNECCE_BANK2   : Single ECC Error Correction on Bank 2 flag
0647   *     @arg FLASH_FLAG_DBECCE_BANK2   : Double Detection ECC Error on Bank 2 flag
0648   *     @arg FLASH_FLAG_CRCEND_BANK2   : CRC End on Bank 2 flag
0649   *     @arg FLASH_FLAG_CRCRDERR_BANK2 : CRC Read error on Bank 2 flag
0650   * @retval The new state of FLASH_FLAG (SET or RESET).
0651   */
0652 #define __HAL_FLASH_GET_FLAG_BANK1(__FLAG__)     (READ_BIT(FLASH->SR1, (__FLAG__)) == (__FLAG__))
0653 
0654 #define __HAL_FLASH_GET_FLAG_BANK2(__FLAG__)     (READ_BIT(FLASH->SR2, ((__FLAG__) & 0x7FFFFFFFU)) == (((__FLAG__) & 0x7FFFFFFFU)))
0655 
0656 #if defined (DUAL_BANK)
0657 #define __HAL_FLASH_GET_FLAG(__FLAG__)           (IS_FLASH_FLAG_BANK1(__FLAG__) ?  __HAL_FLASH_GET_FLAG_BANK1(__FLAG__) : \
0658                                                   __HAL_FLASH_GET_FLAG_BANK2(__FLAG__))
0659 #else
0660 #define __HAL_FLASH_GET_FLAG(__FLAG__)           __HAL_FLASH_GET_FLAG_BANK1(__FLAG__)
0661 #endif /* DUAL_BANK */
0662 
0663 
0664 /**
0665   * @brief  Clear the specified FLASH flag.
0666   * @param  __FLAG__: specifies the FLASH flags to clear.
0667   *    In case of Bank 1, this parameter can be any combination of the following values:
0668   *     @arg FLASH_FLAG_EOP_BANK1        : End Of Program on Bank 1 flag
0669   *     @arg FLASH_FLAG_WRPERR_BANK1     : Write Protection Error on Bank 1 flag
0670   *     @arg FLASH_FLAG_PGSERR_BANK1     : Program Sequence Error on Bank 1 flag
0671   *     @arg FLASH_FLAG_STRBER_BANK1     : Program Alignment Error on Bank 1 flag
0672   *     @arg FLASH_FLAG_INCERR_BANK1     : Inconsistency Error on Bank 1 flag
0673   *     @arg FLASH_FLAG_OPERR_BANK1      : Operation Error on Bank 1 flag
0674   *     @arg FLASH_FLAG_RDPERR_BANK1     : Read Protection Error on Bank 1 flag
0675   *     @arg FLASH_FLAG_RDSERR_BANK1     : Read secure  Error on Bank 1 flag
0676   *     @arg FLASH_FLAG_SNECCE_BANK1     : Single ECC Error Correction on Bank 1 flag
0677   *     @arg FLASH_FLAG_DBECCE_BANK1     : Double Detection ECC Error on Bank 1 flag
0678   *     @arg FLASH_FLAG_CRCEND_BANK1     : CRC End on Bank 1 flag
0679   *     @arg FLASH_FLAG_CRCRDERR_BANK1   : CRC Read error on Bank 1 flag
0680   *     @arg FLASH_FLAG_ALL_ERRORS_BANK1 : All Bank 1 error flags
0681   *     @arg FLASH_FLAG_ALL_BANK1        : All Bank 1 flags
0682   *
0683   *   In case of Bank 2, this parameter can be any combination of the following values :
0684   *     @arg FLASH_FLAG_EOP_BANK2        : End Of Program on Bank 2 flag
0685   *     @arg FLASH_FLAG_WRPERR_BANK2     : Write Protection Error on Bank 2 flag
0686   *     @arg FLASH_FLAG_PGSERR_BANK2     : Program Sequence Error on Bank 2 flag
0687   *     @arg FLASH_FLAG_STRBER_BANK2     : Program Alignment Error on Bank 2 flag
0688   *     @arg FLASH_FLAG_INCERR_BANK2     : Inconsistency Error on Bank 2 flag
0689   *     @arg FLASH_FLAG_OPERR_BANK2      : Operation Error on Bank 2 flag
0690   *     @arg FLASH_FLAG_RDPERR_BANK2     : Read Protection Error on Bank 2 flag
0691   *     @arg FLASH_FLAG_RDSERR_BANK2     : Read secure  Error on Bank 2 flag
0692   *     @arg FLASH_FLAG_SNECCE_BANK2     : Single ECC Error Correction on Bank 2 flag
0693   *     @arg FLASH_FLAG_DBECCE_BANK2     : Double Detection ECC Error on Bank 2 flag
0694   *     @arg FLASH_FLAG_CRCEND_BANK2     : CRC End on Bank 2 flag
0695   *     @arg FLASH_FLAG_CRCRDERR_BANK2   : CRC Read error on Bank 2 flag
0696   *     @arg FLASH_FLAG_ALL_ERRORS_BANK2 : All Bank 2 error flags
0697   *     @arg FLASH_FLAG_ALL_BANK2        : All Bank 2 flags
0698   * @retval none
0699   */
0700 
0701 #define __HAL_FLASH_CLEAR_FLAG_BANK1(__FLAG__)    WRITE_REG(FLASH->CCR1, (__FLAG__))
0702 
0703 #define __HAL_FLASH_CLEAR_FLAG_BANK2(__FLAG__)    WRITE_REG(FLASH->CCR2, ((__FLAG__) & 0x7FFFFFFFU))
0704 
0705 #if defined (DUAL_BANK)
0706 #define __HAL_FLASH_CLEAR_FLAG(__FLAG__)         (IS_FLASH_FLAG_BANK1(__FLAG__) ?  __HAL_FLASH_CLEAR_FLAG_BANK1(__FLAG__) : \
0707                                                   __HAL_FLASH_CLEAR_FLAG_BANK2(__FLAG__))
0708 #else
0709 #define __HAL_FLASH_CLEAR_FLAG(__FLAG__)         __HAL_FLASH_CLEAR_FLAG_BANK1(__FLAG__)
0710 #endif /* DUAL_BANK */
0711 
0712 /**
0713   * @}
0714   */
0715 
0716 /* Include FLASH HAL Extension module */
0717 #include "stm32h7xx_hal_flash_ex.h"
0718 
0719 /* Exported functions --------------------------------------------------------*/
0720 /** @addtogroup FLASH_Exported_Functions
0721   * @{
0722   */
0723 /** @addtogroup FLASH_Exported_Functions_Group1
0724   * @{
0725   */
0726 /* Program operation functions  ***********************************************/
0727 HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t FlashAddress, uint32_t DataAddress);
0728 HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t FlashAddress, uint32_t DataAddress);
0729 /* FLASH IRQ handler method */
0730 void HAL_FLASH_IRQHandler(void);
0731 /* Callbacks in non blocking modes */
0732 void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue);
0733 void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue);
0734 /**
0735   * @}
0736   */
0737 
0738 /** @addtogroup FLASH_Exported_Functions_Group2
0739   * @{
0740   */
0741 /* Peripheral Control functions  **********************************************/
0742 HAL_StatusTypeDef HAL_FLASH_Unlock(void);
0743 HAL_StatusTypeDef HAL_FLASH_Lock(void);
0744 HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void);
0745 HAL_StatusTypeDef HAL_FLASH_OB_Lock(void);
0746 /* Option bytes control */
0747 HAL_StatusTypeDef HAL_FLASH_OB_Launch(void);
0748 /**
0749   * @}
0750   */
0751 
0752 /** @addtogroup FLASH_Exported_Functions_Group3
0753   * @{
0754   */
0755 /* Peripheral State functions  ************************************************/
0756 uint32_t HAL_FLASH_GetError(void);
0757 /**
0758   * @}
0759   */
0760 
0761 /**
0762   * @}
0763   */
0764 /* Private types -------------------------------------------------------------*/
0765 /* Private variables ---------------------------------------------------------*/
0766 /** @defgroup FLASH_Private_Variables FLASH Private Variables
0767   * @ingroup RTEMSBSPsARMSTM32H7
0768   * @{
0769   */
0770 extern FLASH_ProcessTypeDef pFlash;
0771 /**
0772   * @}
0773   */
0774 /* Private constants ---------------------------------------------------------*/
0775 /** @defgroup FLASH_Private_Constants FLASH Private Constants
0776   * @ingroup RTEMSBSPsARMSTM32H7
0777   * @{
0778   */
0779 
0780 /**
0781   * @}
0782   */
0783 
0784 /* Private macros ------------------------------------------------------------*/
0785 /** @defgroup FLASH_Private_Macros FLASH Private Macros
0786   * @ingroup RTEMSBSPsARMSTM32H7
0787   * @{
0788   */
0789 
0790 #if defined (FLASH_OPTCR_PG_OTP)
0791 #define IS_FLASH_TYPEPROGRAM(VALUE)      (((VALUE) == FLASH_TYPEPROGRAM_FLASHWORD) || \
0792                                           ((VALUE) == FLASH_TYPEPROGRAM_OTPWORD))
0793 #else
0794 #define IS_FLASH_TYPEPROGRAM(VALUE)      ((VALUE) == FLASH_TYPEPROGRAM_FLASHWORD)
0795 #endif /* FLASH_OPTCR_PG_OTP */
0796 
0797 #define IS_FLASH_IT_BANK1(IT)            (((IT) & FLASH_IT_ALL_BANK1) == (IT))
0798 #if defined (DUAL_BANK)
0799 #define IS_FLASH_IT_BANK2(IT)            (((IT) & FLASH_IT_ALL_BANK2) == (IT))
0800 #endif /* DUAL_BANK */
0801 
0802 #define IS_FLASH_FLAG_BANK1(FLAG)        (((FLAG) & FLASH_FLAG_ALL_BANK1) == (FLAG))
0803 #if defined (DUAL_BANK)
0804 #define IS_FLASH_FLAG_BANK2(FLAG)        (((FLAG) & FLASH_FLAG_ALL_BANK2) == (FLAG))
0805 #endif /* DUAL_BANK */
0806 
0807 #if defined (DUAL_BANK)
0808 #define IS_FLASH_PROGRAM_ADDRESS_BANK1(ADDRESS) (((ADDRESS) >= FLASH_BANK1_BASE) && ((ADDRESS) < FLASH_BANK2_BASE))
0809 #define IS_FLASH_PROGRAM_ADDRESS_BANK2(ADDRESS) (((ADDRESS) >= FLASH_BANK2_BASE ) && ((ADDRESS) <= FLASH_END))
0810 #else
0811 #define IS_FLASH_PROGRAM_ADDRESS_BANK1(ADDRESS) (((ADDRESS) >= FLASH_BANK1_BASE) && ((ADDRESS) <= FLASH_END))
0812 #endif /* DUAL_BANK */
0813 
0814 #if defined (DUAL_BANK)
0815 #if defined (FLASH_OPTCR_PG_OTP)
0816 #define IS_FLASH_PROGRAM_ADDRESS_OTP(ADDRESS)   (((ADDRESS) >= 0x08FFF000U) && ((ADDRESS) <= 0x08FFF3FFU))
0817 #define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)       (IS_FLASH_PROGRAM_ADDRESS_BANK1(ADDRESS) || \
0818                                                  IS_FLASH_PROGRAM_ADDRESS_BANK2(ADDRESS) || \
0819                                                  IS_FLASH_PROGRAM_ADDRESS_OTP(ADDRESS))
0820 #else
0821 #define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)       (IS_FLASH_PROGRAM_ADDRESS_BANK1(ADDRESS) || \
0822                                                  IS_FLASH_PROGRAM_ADDRESS_BANK2(ADDRESS))
0823 #endif /* FLASH_OPTCR_PG_OTP */
0824 #else
0825 #if defined (FLASH_OPTCR_PG_OTP)
0826 #define IS_FLASH_PROGRAM_ADDRESS_OTP(ADDRESS)   (((ADDRESS) >= 0x08FFF000U) && ((ADDRESS) <= 0x08FFF3FFU))
0827 #define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)       (IS_FLASH_PROGRAM_ADDRESS_BANK1(ADDRESS) || \
0828                                                  IS_FLASH_PROGRAM_ADDRESS_OTP(ADDRESS))
0829 #else
0830 #define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)       (IS_FLASH_PROGRAM_ADDRESS_BANK1(ADDRESS))
0831 #endif /* FLASH_OPTCR_PG_OTP */
0832 #endif /* DUAL_BANK */
0833 
0834 #define IS_BOOT_ADDRESS(ADDRESS)         ((ADDRESS) <= (0x3FFF0000U))
0835 
0836 #if defined (DUAL_BANK)
0837 #define IS_FLASH_BANK(BANK)              (((BANK) == FLASH_BANK_1)  || \
0838                                           ((BANK) == FLASH_BANK_2)  || \
0839                                           ((BANK) == FLASH_BANK_BOTH))
0840 #define IS_FLASH_BANK_EXCLUSIVE(BANK)    (((BANK) == FLASH_BANK_1)  || \
0841                                           ((BANK) == FLASH_BANK_2))
0842 #else
0843 #define IS_FLASH_BANK(BANK)              ((BANK) == FLASH_BANK_1)
0844 #define IS_FLASH_BANK_EXCLUSIVE(BANK)    ((BANK) == FLASH_BANK_1)
0845 #endif /* DUAL_BANK */
0846 
0847 /**
0848   * @}
0849   */
0850 /* Private functions ---------------------------------------------------------*/
0851 /** @defgroup FLASH_Private_Functions FLASH Private functions
0852   * @ingroup RTEMSBSPsARMSTM32H7
0853   * @{
0854   */
0855 HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout, uint32_t Bank);
0856 HAL_StatusTypeDef FLASH_OB_WaitForLastOperation(uint32_t Timeout);
0857 HAL_StatusTypeDef FLASH_CRC_WaitForLastOperation(uint32_t Timeout, uint32_t Bank);
0858 /**
0859   * @}
0860   */
0861 
0862 /**
0863   * @}
0864   */
0865 
0866 /**
0867   * @}
0868   */
0869 
0870 #ifdef __cplusplus
0871 }
0872 #endif
0873 
0874 #endif /* STM32H7xx_HAL_FLASH_H */
0875