STM32H735xx HAL User Manual
stm32h7xx_hal_flash.h
Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32h7xx_hal_flash.h
00004   * @author  MCD Application Team
00005   * @brief   Header file of FLASH HAL module.
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * Copyright (c) 2017 STMicroelectronics.
00010   * All rights reserved.
00011   *
00012   * This software is licensed under terms that can be found in the LICENSE file in
00013   * the root directory of this software component.
00014   * If no LICENSE file comes with this software, it is provided AS-IS.
00015   ******************************************************************************
00016   */
00017 
00018 /* Define to prevent recursive inclusion -------------------------------------*/
00019 #ifndef STM32H7xx_HAL_FLASH_H
00020 #define STM32H7xx_HAL_FLASH_H
00021 
00022 #ifdef __cplusplus
00023  extern "C" {
00024 #endif
00025 
00026 /* Includes ------------------------------------------------------------------*/
00027 #include "stm32h7xx_hal_def.h"
00028 
00029 /** @addtogroup STM32H7xx_HAL_Driver
00030   * @{
00031   */
00032 
00033 /** @addtogroup FLASH
00034   * @{
00035   */
00036 
00037 /* Exported types ------------------------------------------------------------*/
00038 /** @defgroup FLASH_Exported_Types FLASH Exported Types
00039   * @{
00040   */
00041 
00042 /**
00043   * @brief  FLASH Procedure structure definition
00044   */
00045 typedef enum
00046 {
00047   FLASH_PROC_NONE = 0U,
00048   FLASH_PROC_SECTERASE_BANK1,
00049   FLASH_PROC_MASSERASE_BANK1,
00050   FLASH_PROC_PROGRAM_BANK1,
00051   FLASH_PROC_SECTERASE_BANK2,
00052   FLASH_PROC_MASSERASE_BANK2,
00053   FLASH_PROC_PROGRAM_BANK2,
00054   FLASH_PROC_ALLBANK_MASSERASE
00055 } FLASH_ProcedureTypeDef;
00056 
00057 
00058 /**
00059   * @brief  FLASH handle Structure definition
00060   */
00061 typedef struct
00062 {
00063   __IO FLASH_ProcedureTypeDef ProcedureOnGoing;   /*!< Internal variable to indicate which procedure is ongoing or not in IT context */
00064 
00065   __IO uint32_t               NbSectorsToErase;   /*!< Internal variable to save the remaining sectors to erase in IT context        */
00066 
00067   __IO uint32_t               VoltageForErase;    /*!< Internal variable to provide voltage range selected by user in IT context     */
00068 
00069   __IO uint32_t               Sector;             /*!< Internal variable to define the current sector which is erasing               */
00070 
00071   __IO uint32_t               Address;            /*!< Internal variable to save address selected for program                        */
00072 
00073   HAL_LockTypeDef             Lock;               /*!< FLASH locking object                                                          */
00074 
00075   __IO uint32_t               ErrorCode;          /*!< FLASH error code                                                              */
00076 
00077 }FLASH_ProcessTypeDef;
00078 
00079 /**
00080   * @}
00081   */
00082 
00083 /* Exported constants --------------------------------------------------------*/
00084 /** @defgroup FLASH_Exported_Constants FLASH Exported Constants
00085   * @{
00086   */
00087 
00088 /** @defgroup FLASH_Error_Code FLASH Error Code
00089   * @brief    FLASH Error Code
00090   * @{
00091   */
00092 #define HAL_FLASH_ERROR_NONE         0x00000000U               /*!< No error                              */
00093 
00094 #define HAL_FLASH_ERROR_WRP          FLASH_FLAG_WRPERR         /*!< Write Protection Error                */
00095 #define HAL_FLASH_ERROR_PGS          FLASH_FLAG_PGSERR         /*!< Program Sequence Error                */
00096 #define HAL_FLASH_ERROR_STRB         FLASH_FLAG_STRBERR        /*!< Strobe Error                          */
00097 #define HAL_FLASH_ERROR_INC          FLASH_FLAG_INCERR         /*!< Inconsistency Error                   */
00098 #if defined (FLASH_SR_OPERR)
00099 #define HAL_FLASH_ERROR_OPE          FLASH_FLAG_OPERR          /*!< Operation Error                       */
00100 #endif /* FLASH_SR_OPERR */
00101 #define HAL_FLASH_ERROR_RDP          FLASH_FLAG_RDPERR         /*!< Read Protection Error                 */
00102 #define HAL_FLASH_ERROR_RDS          FLASH_FLAG_RDSERR         /*!< Read Secured Error                    */
00103 #define HAL_FLASH_ERROR_SNECC        FLASH_FLAG_SNECCERR       /*!< ECC Single Correction Error           */
00104 #define HAL_FLASH_ERROR_DBECC        FLASH_FLAG_DBECCERR       /*!< ECC Double Detection Error            */
00105 #define HAL_FLASH_ERROR_CRCRD        FLASH_FLAG_CRCRDERR       /*!< CRC Read Error                        */
00106 
00107 #define HAL_FLASH_ERROR_WRP_BANK1    FLASH_FLAG_WRPERR_BANK1   /*!< Write Protection Error on Bank 1      */
00108 #define HAL_FLASH_ERROR_PGS_BANK1    FLASH_FLAG_PGSERR_BANK1   /*!< Program Sequence Error on Bank 1      */
00109 #define HAL_FLASH_ERROR_STRB_BANK1   FLASH_FLAG_STRBERR_BANK1  /*!< Strobe Error on Bank 1                */
00110 #define HAL_FLASH_ERROR_INC_BANK1    FLASH_FLAG_INCERR_BANK1   /*!< Inconsistency Error on Bank 1         */
00111 #if defined (FLASH_SR_OPERR)
00112 #define HAL_FLASH_ERROR_OPE_BANK1    FLASH_FLAG_OPERR_BANK1    /*!< Operation Error on Bank 1             */
00113 #endif /* FLASH_SR_OPERR */
00114 #define HAL_FLASH_ERROR_RDP_BANK1    FLASH_FLAG_RDPERR_BANK1   /*!< Read Protection Error on Bank 1       */
00115 #define HAL_FLASH_ERROR_RDS_BANK1    FLASH_FLAG_RDSERR_BANK1   /*!< Read Secured Error on Bank 1          */
00116 #define HAL_FLASH_ERROR_SNECC_BANK1  FLASH_FLAG_SNECCERR_BANK1 /*!< ECC Single Correction Error on Bank 1 */
00117 #define HAL_FLASH_ERROR_DBECC_BANK1  FLASH_FLAG_DBECCERR_BANK1 /*!< ECC Double Detection Error on Bank 1  */
00118 #define HAL_FLASH_ERROR_CRCRD_BANK1  FLASH_FLAG_CRCRDERR_BANK1 /*!< CRC Read Error on Bank1               */
00119 
00120 #define HAL_FLASH_ERROR_WRP_BANK2    FLASH_FLAG_WRPERR_BANK2    /*!< Write Protection Error on Bank 2      */
00121 #define HAL_FLASH_ERROR_PGS_BANK2    FLASH_FLAG_PGSERR_BANK2    /*!< Program Sequence Error on Bank 2      */
00122 #define HAL_FLASH_ERROR_STRB_BANK2   FLASH_FLAG_STRBERR_BANK2   /*!< Strobe Error on Bank 2                */
00123 #define HAL_FLASH_ERROR_INC_BANK2    FLASH_FLAG_INCERR_BANK2    /*!< Inconsistency Error on Bank 2         */
00124 #if defined (FLASH_SR_OPERR)
00125 #define HAL_FLASH_ERROR_OPE_BANK2    FLASH_FLAG_OPERR_BANK2     /*!< Operation Error on Bank 2             */
00126 #endif /* FLASH_SR_OPERR */
00127 #define HAL_FLASH_ERROR_RDP_BANK2    FLASH_FLAG_RDPERR_BANK2    /*!< Read Protection Error on Bank 2       */
00128 #define HAL_FLASH_ERROR_RDS_BANK2    FLASH_FLAG_RDSERR_BANK2    /*!< Read Secured Error on Bank 2          */
00129 #define HAL_FLASH_ERROR_SNECC_BANK2  FLASH_FLAG_SNECCERR_BANK2  /*!< ECC Single Correction Error on Bank 2 */
00130 #define HAL_FLASH_ERROR_DBECC_BANK2  FLASH_FLAG_DBECCERR_BANK2  /*!< ECC Double Detection Error on Bank 2  */
00131 #define HAL_FLASH_ERROR_CRCRD_BANK2  FLASH_FLAG_CRCRDERR_BANK2  /*!< CRC Read Error on Bank2               */
00132 
00133 #define HAL_FLASH_ERROR_OB_CHANGE    FLASH_OPTSR_OPTCHANGEERR   /*!< Option Byte Change Error              */
00134 /**
00135   * @}
00136   */
00137 
00138 /** @defgroup FLASH_Type_Program FLASH Type Program
00139   * @{
00140   */
00141 #define FLASH_TYPEPROGRAM_FLASHWORD  0x01U        /*!< Program a flash word at a specified address */
00142 #if defined (FLASH_OPTCR_PG_OTP)
00143 #define FLASH_TYPEPROGRAM_OTPWORD    0x02U        /*!< Program an OTP word at a specified address  */
00144 #endif /* FLASH_OPTCR_PG_OTP */
00145 /**
00146   * @}
00147   */
00148 
00149 /** @defgroup FLASH_Flag_definition FLASH Flag definition
00150   * @brief Flag definition
00151   * @{
00152   */
00153 #define FLASH_FLAG_BSY                     FLASH_SR_BSY             /*!< FLASH Busy flag */
00154 #define FLASH_FLAG_WBNE                    FLASH_SR_WBNE            /*!< Write Buffer Not Empty flag */
00155 #define FLASH_FLAG_QW                      FLASH_SR_QW              /*!< Wait Queue on flag */
00156 #define FLASH_FLAG_CRC_BUSY                FLASH_SR_CRC_BUSY        /*!< CRC Busy flag */
00157 #define FLASH_FLAG_EOP                     FLASH_SR_EOP             /*!< End Of Program on flag */
00158 #define FLASH_FLAG_WRPERR                  FLASH_SR_WRPERR          /*!< Write Protection Error on flag */
00159 #define FLASH_FLAG_PGSERR                  FLASH_SR_PGSERR          /*!< Program Sequence Error on flag */
00160 #define FLASH_FLAG_STRBERR                 FLASH_SR_STRBERR         /*!< Strobe Error flag */
00161 #define FLASH_FLAG_INCERR                  FLASH_SR_INCERR          /*!< Inconsistency Error on flag */
00162 #if defined (FLASH_SR_OPERR)
00163 #define FLASH_FLAG_OPERR                   FLASH_SR_OPERR           /*!< Operation Error on flag */
00164 #endif /* FLASH_SR_OPERR */
00165 #define FLASH_FLAG_RDPERR                  FLASH_SR_RDPERR          /*!< Read Protection Error on flag */
00166 #define FLASH_FLAG_RDSERR                  FLASH_SR_RDSERR          /*!< Read Secured Error on flag */
00167 #define FLASH_FLAG_SNECCERR                FLASH_SR_SNECCERR        /*!< Single ECC Error Correction on flag */
00168 #define FLASH_FLAG_DBECCERR                FLASH_SR_DBECCERR        /*!< Double Detection ECC Error on flag */
00169 #define FLASH_FLAG_CRCEND                  FLASH_SR_CRCEND          /*!< CRC End of Calculation flag */
00170 #define FLASH_FLAG_CRCRDERR                FLASH_SR_CRCRDERR        /*!< CRC Read Error on bank flag */
00171 
00172 #define FLASH_FLAG_BSY_BANK1               FLASH_SR_BSY             /*!< FLASH Bank 1 Busy flag */
00173 #define FLASH_FLAG_WBNE_BANK1              FLASH_SR_WBNE            /*!< Write Buffer Not Empty on Bank 1 flag */
00174 #define FLASH_FLAG_QW_BANK1                FLASH_SR_QW              /*!< Wait Queue on Bank 1 flag */
00175 #define FLASH_FLAG_CRC_BUSY_BANK1          FLASH_SR_CRC_BUSY        /*!< CRC Busy on Bank 1 flag */
00176 #define FLASH_FLAG_EOP_BANK1               FLASH_SR_EOP             /*!< End Of Program on Bank 1 flag */
00177 #define FLASH_FLAG_WRPERR_BANK1            FLASH_SR_WRPERR          /*!< Write Protection Error on Bank 1 flag */
00178 #define FLASH_FLAG_PGSERR_BANK1            FLASH_SR_PGSERR          /*!< Program Sequence Error on Bank 1 flag */
00179 #define FLASH_FLAG_STRBERR_BANK1           FLASH_SR_STRBERR         /*!< Strobe Error on Bank 1 flag */
00180 #define FLASH_FLAG_INCERR_BANK1            FLASH_SR_INCERR          /*!< Inconsistency Error on Bank 1 flag */
00181 #if defined (FLASH_SR_OPERR)
00182 #define FLASH_FLAG_OPERR_BANK1             FLASH_SR_OPERR           /*!< Operation Error on Bank 1 flag */
00183 #endif /* FLASH_SR_OPERR */
00184 #define FLASH_FLAG_RDPERR_BANK1            FLASH_SR_RDPERR          /*!< Read Protection Error on Bank 1 flag */
00185 #define FLASH_FLAG_RDSERR_BANK1            FLASH_SR_RDSERR          /*!< Read Secured Error on Bank 1 flag */
00186 #define FLASH_FLAG_SNECCERR_BANK1          FLASH_SR_SNECCERR        /*!< Single ECC Error Correction on Bank 1 flag */
00187 #define FLASH_FLAG_DBECCERR_BANK1          FLASH_SR_DBECCERR        /*!< Double Detection ECC Error on Bank 1 flag */
00188 #define FLASH_FLAG_CRCEND_BANK1            FLASH_SR_CRCEND          /*!< CRC End of Calculation on Bank 1 flag */
00189 #define FLASH_FLAG_CRCRDERR_BANK1          FLASH_SR_CRCRDERR        /*!< CRC Read error on Bank 1 flag */
00190 
00191 #if defined (FLASH_SR_OPERR)
00192 #define FLASH_FLAG_ALL_ERRORS_BANK1       (FLASH_FLAG_WRPERR_BANK1   | FLASH_FLAG_PGSERR_BANK1   | \
00193                                            FLASH_FLAG_STRBERR_BANK1  | FLASH_FLAG_INCERR_BANK1   | \
00194                                            FLASH_FLAG_OPERR_BANK1    | FLASH_FLAG_RDPERR_BANK1   | \
00195                                            FLASH_FLAG_RDSERR_BANK1   | FLASH_FLAG_SNECCERR_BANK1 | \
00196                                            FLASH_FLAG_DBECCERR_BANK1 | FLASH_FLAG_CRCRDERR_BANK1) /*!< All Bank 1 error flags */
00197 #else
00198 #define FLASH_FLAG_ALL_ERRORS_BANK1       (FLASH_FLAG_WRPERR_BANK1   | FLASH_FLAG_PGSERR_BANK1   | \
00199                                            FLASH_FLAG_STRBERR_BANK1  | FLASH_FLAG_INCERR_BANK1   | \
00200                                            FLASH_FLAG_RDPERR_BANK1   | FLASH_FLAG_RDSERR_BANK1   | \
00201                                            FLASH_FLAG_SNECCERR_BANK1 | FLASH_FLAG_DBECCERR_BANK1 | \
00202                                            FLASH_FLAG_CRCRDERR_BANK1) /*!< All Bank 1 error flags */
00203 #endif /* FLASH_SR_OPERR */
00204 
00205 #define FLASH_FLAG_ALL_BANK1              (FLASH_FLAG_BSY_BANK1      | FLASH_FLAG_WBNE_BANK1     | \
00206                                            FLASH_FLAG_QW_BANK1       | FLASH_FLAG_CRC_BUSY_BANK1 | \
00207                                            FLASH_FLAG_EOP_BANK1      | FLASH_FLAG_CRCEND_BANK1   | \
00208                                            FLASH_FLAG_ALL_ERRORS_BANK1) /*!< All Bank 1 flags */
00209 
00210 #define FLASH_FLAG_BSY_BANK2               (FLASH_SR_BSY      | 0x80000000U)        /*!< FLASH Bank 2 Busy flag */
00211 #define FLASH_FLAG_WBNE_BANK2              (FLASH_SR_WBNE     | 0x80000000U)        /*!< Write Buffer Not Empty on Bank 2 flag */
00212 #define FLASH_FLAG_QW_BANK2                (FLASH_SR_QW       | 0x80000000U)        /*!< Wait Queue on Bank 2 flag */
00213 #define FLASH_FLAG_CRC_BUSY_BANK2          (FLASH_SR_CRC_BUSY | 0x80000000U)        /*!< CRC Busy on Bank 2 flag */
00214 #define FLASH_FLAG_EOP_BANK2               (FLASH_SR_EOP      | 0x80000000U)        /*!< End Of Program on Bank 2 flag */
00215 #define FLASH_FLAG_WRPERR_BANK2            (FLASH_SR_WRPERR   | 0x80000000U)        /*!< Write Protection Error on Bank 2 flag */
00216 #define FLASH_FLAG_PGSERR_BANK2            (FLASH_SR_PGSERR   | 0x80000000U)        /*!< Program Sequence Error on Bank 2 flag */
00217 #define FLASH_FLAG_STRBERR_BANK2           (FLASH_SR_STRBERR  | 0x80000000U)        /*!< Strobe Error on Bank 2 flag */
00218 #define FLASH_FLAG_INCERR_BANK2            (FLASH_SR_INCERR   | 0x80000000U)        /*!< Inconsistency Error on Bank 2 flag */
00219 #if defined (FLASH_SR_OPERR)
00220 #define FLASH_FLAG_OPERR_BANK2             (FLASH_SR_OPERR    | 0x80000000U)        /*!< Operation Error on Bank 2 flag */
00221 #endif /* FLASH_SR_OPERR */
00222 #define FLASH_FLAG_RDPERR_BANK2            (FLASH_SR_RDPERR   | 0x80000000U)        /*!< Read Protection Error on Bank 2 flag */
00223 #define FLASH_FLAG_RDSERR_BANK2            (FLASH_SR_RDSERR   | 0x80000000U)        /*!< Read Secured Error on Bank 2 flag */
00224 #define FLASH_FLAG_SNECCERR_BANK2          (FLASH_SR_SNECCERR | 0x80000000U)        /*!< Single ECC Error Correction on Bank 2 flag */
00225 #define FLASH_FLAG_DBECCERR_BANK2          (FLASH_SR_DBECCERR | 0x80000000U)        /*!< Double Detection ECC Error on Bank 2 flag */
00226 #define FLASH_FLAG_CRCEND_BANK2            (FLASH_SR_CRCEND   | 0x80000000U)        /*!< CRC End of Calculation on Bank 2 flag */
00227 #define FLASH_FLAG_CRCRDERR_BANK2          (FLASH_SR_CRCRDERR | 0x80000000U)        /*!< CRC Read error on Bank 2 flag */
00228 
00229 #if defined (FLASH_SR_OPERR)
00230 #define FLASH_FLAG_ALL_ERRORS_BANK2       (FLASH_FLAG_WRPERR_BANK2   | FLASH_FLAG_PGSERR_BANK2   | \
00231                                            FLASH_FLAG_STRBERR_BANK2  | FLASH_FLAG_INCERR_BANK2   | \
00232                                            FLASH_FLAG_OPERR_BANK2    | FLASH_FLAG_RDPERR_BANK2   | \
00233                                            FLASH_FLAG_RDSERR_BANK2   | FLASH_FLAG_SNECCERR_BANK2 | \
00234                                            FLASH_FLAG_DBECCERR_BANK2 | FLASH_FLAG_CRCRDERR_BANK2) /*!< All Bank 2 error flags */
00235 #else
00236 #define FLASH_FLAG_ALL_ERRORS_BANK2       (FLASH_FLAG_WRPERR_BANK2   | FLASH_FLAG_PGSERR_BANK2   | \
00237                                            FLASH_FLAG_STRBERR_BANK2  | FLASH_FLAG_INCERR_BANK2   | \
00238                                            FLASH_FLAG_RDPERR_BANK2   | FLASH_FLAG_RDSERR_BANK2   | \
00239                                            FLASH_FLAG_SNECCERR_BANK2 | FLASH_FLAG_DBECCERR_BANK2 | \
00240                                            FLASH_FLAG_CRCRDERR_BANK2) /*!< All Bank 2 error flags */
00241 #endif /* FLASH_SR_OPERR */
00242 
00243 #define FLASH_FLAG_ALL_BANK2              (FLASH_FLAG_BSY_BANK2      | FLASH_FLAG_WBNE_BANK2     | \
00244                                            FLASH_FLAG_QW_BANK2       | FLASH_FLAG_CRC_BUSY_BANK2 | \
00245                                            FLASH_FLAG_EOP_BANK2      | FLASH_FLAG_CRCEND_BANK2   | \
00246                                            FLASH_FLAG_ALL_ERRORS_BANK2) /*!< All Bank 2 flags */
00247 /**
00248   * @}
00249   */
00250 
00251 /** @defgroup FLASH_Interrupt_definition FLASH Interrupt definition
00252   * @brief FLASH Interrupt definition
00253   * @{
00254   */
00255 #define FLASH_IT_EOP_BANK1                  FLASH_CR_EOPIE       /*!< End of FLASH Bank 1 Operation Interrupt source */
00256 #define FLASH_IT_WRPERR_BANK1               FLASH_CR_WRPERRIE    /*!< Write Protection Error on Bank 1 Interrupt source */
00257 #define FLASH_IT_PGSERR_BANK1               FLASH_CR_PGSERRIE    /*!< Program Sequence Error on Bank 1 Interrupt source */
00258 #define FLASH_IT_STRBERR_BANK1              FLASH_CR_STRBERRIE   /*!< Strobe Error on Bank 1 Interrupt source */
00259 #define FLASH_IT_INCERR_BANK1               FLASH_CR_INCERRIE    /*!< Inconsistency Error on Bank 1 Interrupt source */
00260 #if defined (FLASH_CR_OPERRIE)
00261 #define FLASH_IT_OPERR_BANK1                FLASH_CR_OPERRIE     /*!< Operation Error on Bank 1 Interrupt source */
00262 #endif /* FLASH_CR_OPERRIE */
00263 #define FLASH_IT_RDPERR_BANK1               FLASH_CR_RDPERRIE    /*!< Read protection Error on Bank 1 Interrupt source */
00264 #define FLASH_IT_RDSERR_BANK1               FLASH_CR_RDSERRIE    /*!< Read Secured Error on Bank 1 Interrupt source */
00265 #define FLASH_IT_SNECCERR_BANK1             FLASH_CR_SNECCERRIE  /*!< Single ECC Error Correction on Bank 1 Interrupt source */
00266 #define FLASH_IT_DBECCERR_BANK1             FLASH_CR_DBECCERRIE  /*!< Double Detection ECC Error on Bank 1 Interrupt source */
00267 #define FLASH_IT_CRCEND_BANK1               FLASH_CR_CRCENDIE    /*!< CRC End on Bank 1 Interrupt source */
00268 #define FLASH_IT_CRCRDERR_BANK1             FLASH_CR_CRCRDERRIE  /*!< CRC Read error on Bank 1 Interrupt source */
00269 
00270 #if defined (FLASH_CR_OPERRIE)
00271 #define FLASH_IT_ALL_BANK1                 (FLASH_IT_EOP_BANK1       | FLASH_IT_WRPERR_BANK1    | \
00272                                             FLASH_IT_PGSERR_BANK1    | FLASH_IT_STRBERR_BANK1   | \
00273                                             FLASH_IT_INCERR_BANK1    | FLASH_IT_OPERR_BANK1     | \
00274                                             FLASH_IT_RDPERR_BANK1    | FLASH_IT_RDSERR_BANK1    | \
00275                                             FLASH_IT_SNECCERR_BANK1  | FLASH_IT_DBECCERR_BANK1  | \
00276                                             FLASH_IT_CRCEND_BANK1    | FLASH_IT_CRCRDERR_BANK1) /*!< All Bank 1 Interrupt sources */
00277 #else
00278 #define FLASH_IT_ALL_BANK1                 (FLASH_IT_EOP_BANK1       | FLASH_IT_WRPERR_BANK1    | \
00279                                             FLASH_IT_PGSERR_BANK1    | FLASH_IT_STRBERR_BANK1   | \
00280                                             FLASH_IT_INCERR_BANK1    | FLASH_IT_RDPERR_BANK1    | \
00281                                             FLASH_IT_RDSERR_BANK1    | FLASH_IT_SNECCERR_BANK1  | \
00282                                             FLASH_IT_DBECCERR_BANK1  | FLASH_IT_CRCEND_BANK1    | \
00283                                             FLASH_IT_CRCRDERR_BANK1) /*!< All Bank 1 Interrupt sources */
00284 #endif /* FLASH_CR_OPERRIE */
00285 
00286 #define FLASH_IT_EOP_BANK2                 (FLASH_CR_EOPIE      | 0x80000000U)  /*!< End of FLASH Bank 2 Operation Interrupt source */
00287 #define FLASH_IT_WRPERR_BANK2              (FLASH_CR_WRPERRIE   | 0x80000000U)  /*!< Write Protection Error on Bank 2 Interrupt source */
00288 #define FLASH_IT_PGSERR_BANK2              (FLASH_CR_PGSERRIE   | 0x80000000U)  /*!< Program Sequence Error on Bank 2 Interrupt source */
00289 #define FLASH_IT_STRBERR_BANK2             (FLASH_CR_STRBERRIE  | 0x80000000U)  /*!< Strobe Error on Bank 2 Interrupt source */
00290 #define FLASH_IT_INCERR_BANK2              (FLASH_CR_INCERRIE   | 0x80000000U)  /*!< Inconsistency Error on Bank 2 Interrupt source */
00291 #if defined (FLASH_CR_OPERRIE)
00292 #define FLASH_IT_OPERR_BANK2               (FLASH_CR_OPERRIE    | 0x80000000U)  /*!< Operation Error on Bank 2 Interrupt source */
00293 #endif /* FLASH_CR_OPERRIE */
00294 #define FLASH_IT_RDPERR_BANK2              (FLASH_CR_RDPERRIE   | 0x80000000U)  /*!< Read protection Error on Bank 2 Interrupt source */
00295 #define FLASH_IT_RDSERR_BANK2              (FLASH_CR_RDSERRIE   | 0x80000000U)  /*!< Read Secured Error on Bank 2 Interrupt source */
00296 #define FLASH_IT_SNECCERR_BANK2            (FLASH_CR_SNECCERRIE | 0x80000000U)  /*!< Single ECC Error Correction on Bank 2 Interrupt source */
00297 #define FLASH_IT_DBECCERR_BANK2            (FLASH_CR_DBECCERRIE | 0x80000000U)  /*!< Double Detection ECC Error on Bank 2 Interrupt source */
00298 #define FLASH_IT_CRCEND_BANK2              (FLASH_CR_CRCENDIE   | 0x80000000U)  /*!< CRC End on Bank 2 Interrupt source */
00299 #define FLASH_IT_CRCRDERR_BANK2            (FLASH_CR_CRCRDERRIE | 0x80000000U)  /*!< CRC Read Error on Bank 2 Interrupt source */
00300 
00301 #if defined (FLASH_CR_OPERRIE)
00302 #define FLASH_IT_ALL_BANK2                 (FLASH_IT_EOP_BANK2       | FLASH_IT_WRPERR_BANK2    | \
00303                                             FLASH_IT_PGSERR_BANK2    | FLASH_IT_STRBERR_BANK2   | \
00304                                             FLASH_IT_INCERR_BANK2    | FLASH_IT_OPERR_BANK2     | \
00305                                             FLASH_IT_RDPERR_BANK2    | FLASH_IT_RDSERR_BANK2    | \
00306                                             FLASH_IT_SNECCERR_BANK2  | FLASH_IT_DBECCERR_BANK2  | \
00307                                             FLASH_IT_CRCEND_BANK2    | FLASH_IT_CRCRDERR_BANK2) /*!< All Bank 2 Interrupt sources */
00308 #else
00309 #define FLASH_IT_ALL_BANK2                 (FLASH_IT_EOP_BANK2       | FLASH_IT_WRPERR_BANK2    | \
00310                                             FLASH_IT_PGSERR_BANK2    | FLASH_IT_STRBERR_BANK2   | \
00311                                             FLASH_IT_INCERR_BANK2    | FLASH_IT_RDPERR_BANK2    | \
00312                                             FLASH_IT_RDSERR_BANK2    | FLASH_IT_SNECCERR_BANK2  | \
00313                                             FLASH_IT_DBECCERR_BANK2  | FLASH_IT_CRCEND_BANK2    | \
00314                                             FLASH_IT_CRCRDERR_BANK2) /*!< All Bank 2 Interrupt sources */
00315 #endif /* FLASH_CR_OPERRIE */
00316 /**
00317   * @}
00318   */
00319 
00320 #if defined (FLASH_CR_PSIZE)
00321 /** @defgroup FLASH_Program_Parallelism FLASH Program Parallelism
00322   * @{
00323   */
00324 #define FLASH_PSIZE_BYTE           0x00000000U       /*!< Flash program/erase by 8 bits  */
00325 #define FLASH_PSIZE_HALF_WORD      FLASH_CR_PSIZE_0  /*!< Flash program/erase by 16 bits */
00326 #define FLASH_PSIZE_WORD           FLASH_CR_PSIZE_1  /*!< Flash program/erase by 32 bits */
00327 #define FLASH_PSIZE_DOUBLE_WORD    FLASH_CR_PSIZE    /*!< Flash program/erase by 64 bits */
00328 /**
00329   * @}
00330   */
00331 #endif /* FLASH_CR_PSIZE */
00332 
00333 
00334 /** @defgroup FLASH_Keys FLASH Keys
00335   * @{
00336   */
00337 #define FLASH_KEY1                 0x45670123U
00338 #define FLASH_KEY2                 0xCDEF89ABU
00339 #define FLASH_OPT_KEY1             0x08192A3BU
00340 #define FLASH_OPT_KEY2             0x4C5D6E7FU
00341 /**
00342   * @}
00343   */
00344 
00345 /** @defgroup FLASH_Sectors FLASH Sectors
00346   * @{
00347   */
00348 #define FLASH_SECTOR_0             0U       /*!< Sector Number 0   */
00349 #define FLASH_SECTOR_1             1U       /*!< Sector Number 1   */
00350 #define FLASH_SECTOR_2             2U       /*!< Sector Number 2   */
00351 #define FLASH_SECTOR_3             3U       /*!< Sector Number 3   */
00352 #define FLASH_SECTOR_4             4U       /*!< Sector Number 4   */
00353 #define FLASH_SECTOR_5             5U       /*!< Sector Number 5   */
00354 #define FLASH_SECTOR_6             6U       /*!< Sector Number 6   */
00355 #define FLASH_SECTOR_7             7U       /*!< Sector Number 7   */
00356 #if (FLASH_SECTOR_TOTAL == 128)
00357 #define FLASH_SECTOR_8             8U       /*!< Sector Number 8   */
00358 #define FLASH_SECTOR_9             9U       /*!< Sector Number 9   */
00359 #define FLASH_SECTOR_10            10U      /*!< Sector Number 10  */
00360 #define FLASH_SECTOR_11            11U      /*!< Sector Number 11  */
00361 #define FLASH_SECTOR_12            12U      /*!< Sector Number 12  */
00362 #define FLASH_SECTOR_13            13U      /*!< Sector Number 13  */
00363 #define FLASH_SECTOR_14            14U      /*!< Sector Number 14  */
00364 #define FLASH_SECTOR_15            15U      /*!< Sector Number 15  */
00365 #define FLASH_SECTOR_16            16U      /*!< Sector Number 16  */
00366 #define FLASH_SECTOR_17            17U      /*!< Sector Number 17  */
00367 #define FLASH_SECTOR_18            18U      /*!< Sector Number 18  */
00368 #define FLASH_SECTOR_19            19U      /*!< Sector Number 19  */
00369 #define FLASH_SECTOR_20            20U      /*!< Sector Number 20  */
00370 #define FLASH_SECTOR_21            21U      /*!< Sector Number 21  */
00371 #define FLASH_SECTOR_22            22U      /*!< Sector Number 22  */
00372 #define FLASH_SECTOR_23            23U      /*!< Sector Number 23  */
00373 #define FLASH_SECTOR_24            24U      /*!< Sector Number 24  */
00374 #define FLASH_SECTOR_25            25U      /*!< Sector Number 25  */
00375 #define FLASH_SECTOR_26            26U      /*!< Sector Number 26  */
00376 #define FLASH_SECTOR_27            27U      /*!< Sector Number 27  */
00377 #define FLASH_SECTOR_28            28U      /*!< Sector Number 28  */
00378 #define FLASH_SECTOR_29            29U      /*!< Sector Number 29  */
00379 #define FLASH_SECTOR_30            30U      /*!< Sector Number 30  */
00380 #define FLASH_SECTOR_31            31U      /*!< Sector Number 31  */
00381 #define FLASH_SECTOR_32            32U      /*!< Sector Number 32  */
00382 #define FLASH_SECTOR_33            33U      /*!< Sector Number 33  */
00383 #define FLASH_SECTOR_34            34U      /*!< Sector Number 34  */
00384 #define FLASH_SECTOR_35            35U      /*!< Sector Number 35  */
00385 #define FLASH_SECTOR_36            36U      /*!< Sector Number 36  */
00386 #define FLASH_SECTOR_37            37U      /*!< Sector Number 37  */
00387 #define FLASH_SECTOR_38            38U      /*!< Sector Number 38  */
00388 #define FLASH_SECTOR_39            39U      /*!< Sector Number 39  */
00389 #define FLASH_SECTOR_40            40U      /*!< Sector Number 40  */
00390 #define FLASH_SECTOR_41            41U      /*!< Sector Number 41  */
00391 #define FLASH_SECTOR_42            42U      /*!< Sector Number 42  */
00392 #define FLASH_SECTOR_43            43U      /*!< Sector Number 43  */
00393 #define FLASH_SECTOR_44            44U      /*!< Sector Number 44  */
00394 #define FLASH_SECTOR_45            45U      /*!< Sector Number 45  */
00395 #define FLASH_SECTOR_46            46U      /*!< Sector Number 46  */
00396 #define FLASH_SECTOR_47            47U      /*!< Sector Number 47  */
00397 #define FLASH_SECTOR_48            48U      /*!< Sector Number 48  */
00398 #define FLASH_SECTOR_49            49U      /*!< Sector Number 49  */
00399 #define FLASH_SECTOR_50            50U      /*!< Sector Number 50  */
00400 #define FLASH_SECTOR_51            51U      /*!< Sector Number 51  */
00401 #define FLASH_SECTOR_52            52U      /*!< Sector Number 52  */
00402 #define FLASH_SECTOR_53            53U      /*!< Sector Number 53  */
00403 #define FLASH_SECTOR_54            54U      /*!< Sector Number 54  */
00404 #define FLASH_SECTOR_55            55U      /*!< Sector Number 55  */
00405 #define FLASH_SECTOR_56            56U      /*!< Sector Number 56  */
00406 #define FLASH_SECTOR_57            57U      /*!< Sector Number 57  */
00407 #define FLASH_SECTOR_58            58U      /*!< Sector Number 58  */
00408 #define FLASH_SECTOR_59            59U      /*!< Sector Number 59  */
00409 #define FLASH_SECTOR_60            60U      /*!< Sector Number 60  */
00410 #define FLASH_SECTOR_61            61U      /*!< Sector Number 61  */
00411 #define FLASH_SECTOR_62            62U      /*!< Sector Number 62  */
00412 #define FLASH_SECTOR_63            63U      /*!< Sector Number 63  */
00413 #define FLASH_SECTOR_64            64U      /*!< Sector Number 64  */
00414 #define FLASH_SECTOR_65            65U      /*!< Sector Number 65  */
00415 #define FLASH_SECTOR_66            66U      /*!< Sector Number 66  */
00416 #define FLASH_SECTOR_67            67U      /*!< Sector Number 67  */
00417 #define FLASH_SECTOR_68            68U      /*!< Sector Number 68  */
00418 #define FLASH_SECTOR_69            69U      /*!< Sector Number 69  */
00419 #define FLASH_SECTOR_70            70U      /*!< Sector Number 70  */
00420 #define FLASH_SECTOR_71            71U      /*!< Sector Number 71  */
00421 #define FLASH_SECTOR_72            72U      /*!< Sector Number 72  */
00422 #define FLASH_SECTOR_73            73U      /*!< Sector Number 73  */
00423 #define FLASH_SECTOR_74            74U      /*!< Sector Number 74  */
00424 #define FLASH_SECTOR_75            75U      /*!< Sector Number 75  */
00425 #define FLASH_SECTOR_76            76U      /*!< Sector Number 76  */
00426 #define FLASH_SECTOR_77            77U      /*!< Sector Number 77  */
00427 #define FLASH_SECTOR_78            78U      /*!< Sector Number 78  */
00428 #define FLASH_SECTOR_79            79U      /*!< Sector Number 79  */
00429 #define FLASH_SECTOR_80            80U      /*!< Sector Number 80  */
00430 #define FLASH_SECTOR_81            81U      /*!< Sector Number 81  */
00431 #define FLASH_SECTOR_82            82U      /*!< Sector Number 82  */
00432 #define FLASH_SECTOR_83            83U      /*!< Sector Number 83  */
00433 #define FLASH_SECTOR_84            84U      /*!< Sector Number 84  */
00434 #define FLASH_SECTOR_85            85U      /*!< Sector Number 85  */
00435 #define FLASH_SECTOR_86            86U      /*!< Sector Number 86  */
00436 #define FLASH_SECTOR_87            87U      /*!< Sector Number 87  */
00437 #define FLASH_SECTOR_88            88U      /*!< Sector Number 88  */
00438 #define FLASH_SECTOR_89            89U      /*!< Sector Number 89  */
00439 #define FLASH_SECTOR_90            90U      /*!< Sector Number 90  */
00440 #define FLASH_SECTOR_91            91U      /*!< Sector Number 91  */
00441 #define FLASH_SECTOR_92            92U      /*!< Sector Number 92  */
00442 #define FLASH_SECTOR_93            93U      /*!< Sector Number 93  */
00443 #define FLASH_SECTOR_94            94U      /*!< Sector Number 94  */
00444 #define FLASH_SECTOR_95            95U      /*!< Sector Number 95  */
00445 #define FLASH_SECTOR_96            96U      /*!< Sector Number 96  */
00446 #define FLASH_SECTOR_97            97U      /*!< Sector Number 97  */
00447 #define FLASH_SECTOR_98            98U      /*!< Sector Number 98  */
00448 #define FLASH_SECTOR_99            99U      /*!< Sector Number 99  */
00449 #define FLASH_SECTOR_100           100U     /*!< Sector Number 100 */
00450 #define FLASH_SECTOR_101           101U     /*!< Sector Number 101 */
00451 #define FLASH_SECTOR_102           102U     /*!< Sector Number 102 */
00452 #define FLASH_SECTOR_103           103U     /*!< Sector Number 103 */
00453 #define FLASH_SECTOR_104           104U     /*!< Sector Number 104 */
00454 #define FLASH_SECTOR_105           105U     /*!< Sector Number 105 */
00455 #define FLASH_SECTOR_106           106U     /*!< Sector Number 106 */
00456 #define FLASH_SECTOR_107           107U     /*!< Sector Number 107 */
00457 #define FLASH_SECTOR_108           108U     /*!< Sector Number 108 */
00458 #define FLASH_SECTOR_109           109U     /*!< Sector Number 109 */
00459 #define FLASH_SECTOR_110           110U     /*!< Sector Number 110 */
00460 #define FLASH_SECTOR_111           111U     /*!< Sector Number 111 */
00461 #define FLASH_SECTOR_112           112U     /*!< Sector Number 112 */
00462 #define FLASH_SECTOR_113           113U     /*!< Sector Number 113 */
00463 #define FLASH_SECTOR_114           114U     /*!< Sector Number 114 */
00464 #define FLASH_SECTOR_115           115U     /*!< Sector Number 115 */
00465 #define FLASH_SECTOR_116           116U     /*!< Sector Number 116 */
00466 #define FLASH_SECTOR_117           117U     /*!< Sector Number 117 */
00467 #define FLASH_SECTOR_118           118U     /*!< Sector Number 118 */
00468 #define FLASH_SECTOR_119           119U     /*!< Sector Number 119 */
00469 #define FLASH_SECTOR_120           120U     /*!< Sector Number 120 */
00470 #define FLASH_SECTOR_121           121U     /*!< Sector Number 121 */
00471 #define FLASH_SECTOR_122           122U     /*!< Sector Number 122 */
00472 #define FLASH_SECTOR_123           123U     /*!< Sector Number 123 */
00473 #define FLASH_SECTOR_124           124U     /*!< Sector Number 124 */
00474 #define FLASH_SECTOR_125           125U     /*!< Sector Number 125 */
00475 #define FLASH_SECTOR_126           126U     /*!< Sector Number 126 */
00476 #define FLASH_SECTOR_127           127U     /*!< Sector Number 127 */
00477 #endif /* FLASH_SECTOR_TOTAL == 128 */
00478 /**
00479   * @}
00480   */
00481 
00482 /**
00483   * @}
00484   */
00485 
00486 /* Exported macro ------------------------------------------------------------*/
00487 /** @defgroup FLASH_Exported_Macros FLASH Exported Macros
00488   * @{
00489   */
00490 /**
00491   * @brief  Set the FLASH Latency.
00492   * @param  __LATENCY__: FLASH Latency
00493   *         The value of this parameter depend on device used within the same series
00494   * @retval none
00495   */
00496 #define __HAL_FLASH_SET_LATENCY(__LATENCY__) \
00497                   MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(__LATENCY__))
00498 
00499 /**
00500   * @brief  Get the FLASH Latency.
00501   * @retval FLASH Latency
00502   *          The value of this parameter depend on device used within the same series
00503   */
00504 #define __HAL_FLASH_GET_LATENCY()     (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY))
00505 
00506 /**
00507   * @brief  Enable the specified FLASH interrupt.
00508   * @param  __INTERRUPT__ : FLASH interrupt
00509   *   In case of Bank 1 This parameter can be any combination of the following values:
00510   *     @arg FLASH_IT_EOP_BANK1       : End of FLASH Bank 1 Operation Interrupt source
00511   *     @arg FLASH_IT_WRPERR_BANK1    : Write Protection Error on Bank 1 Interrupt source
00512   *     @arg FLASH_IT_PGSERR_BANK1    : Program Sequence Error on Bank 1 Interrupt source
00513   *     @arg FLASH_IT_STRBERR_BANK1   : Strobe Error on Bank 1 Interrupt source
00514   *     @arg FLASH_IT_INCERR_BANK1    : Inconsistency Error on Bank 1 Interrupt source
00515   *     @arg FLASH_IT_OPERR_BANK1     : Operation Error on Bank 1 Interrupt source
00516   *     @arg FLASH_IT_RDPERR_BANK1    : Read protection Error on Bank 1 Interrupt source
00517   *     @arg FLASH_IT_RDSERR_BANK1    : Read secure Error on Bank 1 Interrupt source
00518   *     @arg FLASH_IT_SNECCERR_BANK1  : Single ECC Error Correction on Bank 1 Interrupt source
00519   *     @arg FLASH_IT_DBECCERR_BANK1  : Double Detection ECC Error on Bank 1 Interrupt source
00520   *     @arg FLASH_IT_CRCEND_BANK1    : CRC End on Bank 1 Interrupt source
00521   *     @arg FLASH_IT_CRCRDERR_BANK1  : CRC Read error on Bank 1 Interrupt source
00522   *     @arg FLASH_IT_ALL_BANK1       : All Bank 1 Interrupt sources
00523   *
00524   *   In case of Bank 2, this parameter can be any combination of the following values:
00525   *     @arg FLASH_IT_EOP_BANK2       : End of FLASH Bank 2 Operation Interrupt source
00526   *     @arg FLASH_IT_WRPERR_BANK2    : Write Protection Error on Bank 2 Interrupt source
00527   *     @arg FLASH_IT_PGSERR_BANK2    : Program Sequence Error on Bank 2 Interrupt source
00528   *     @arg FLASH_IT_STRBERR_BANK2   : Strobe Error on Bank 2 Interrupt source
00529   *     @arg FLASH_IT_INCERR_BANK2    : Inconsistency Error on Bank 2 Interrupt source
00530   *     @arg FLASH_IT_OPERR_BANK2     : Operation Error on Bank 2 Interrupt source
00531   *     @arg FLASH_IT_RDPERR_BANK2    : Read protection Error on Bank 2 Interrupt source
00532   *     @arg FLASH_IT_RDSERR_BANK2    : Read secure Error on Bank 2 Interrupt source
00533   *     @arg FLASH_IT_SNECCERR_BANK2  : Single ECC Error Correction on Bank 2 Interrupt source
00534   *     @arg FLASH_IT_DBECCERR_BANK2  : Double Detection ECC Error on Bank 2 Interrupt source
00535   *     @arg FLASH_IT_CRCEND_BANK2    : CRC End on Bank 2 Interrupt source
00536   *     @arg FLASH_IT_CRCRDERR_BANK2  : CRC Read error on Bank 2 Interrupt source
00537   *     @arg FLASH_IT_ALL_BANK2       : All Bank 2 Interrupt sources
00538   * @retval none
00539   */
00540 
00541 #define __HAL_FLASH_ENABLE_IT_BANK1(__INTERRUPT__)      (FLASH->CR1 |= (__INTERRUPT__))
00542 
00543 #define __HAL_FLASH_ENABLE_IT_BANK2(__INTERRUPT__)      (FLASH->CR2 |= ((__INTERRUPT__) & 0x7FFFFFFFU))
00544 
00545 #if defined (DUAL_BANK)
00546 #define __HAL_FLASH_ENABLE_IT(__INTERRUPT__)    (IS_FLASH_IT_BANK1(__INTERRUPT__) ? \
00547                                                  __HAL_FLASH_ENABLE_IT_BANK1(__INTERRUPT__) : \
00548                                                  __HAL_FLASH_ENABLE_IT_BANK2(__INTERRUPT__))
00549 #else
00550 #define __HAL_FLASH_ENABLE_IT(__INTERRUPT__)    __HAL_FLASH_ENABLE_IT_BANK1(__INTERRUPT__)
00551 #endif /* DUAL_BANK */
00552 
00553 
00554 /**
00555   * @brief  Disable the specified FLASH interrupt.
00556   * @param  __INTERRUPT__ : FLASH interrupt
00557   *   In case of Bank 1 This parameter can be any combination of the following values:
00558   *     @arg FLASH_IT_EOP_BANK1       : End of FLASH Bank 1 Operation Interrupt source
00559   *     @arg FLASH_IT_WRPERR_BANK1    : Write Protection Error on Bank 1 Interrupt source
00560   *     @arg FLASH_IT_PGSERR_BANK1    : Program Sequence Error on Bank 1 Interrupt source
00561   *     @arg FLASH_IT_STRBERR_BANK1   : Strobe Error on Bank 1 Interrupt source
00562   *     @arg FLASH_IT_INCERR_BANK1    : Inconsistency Error on Bank 1 Interrupt source
00563   *     @arg FLASH_IT_OPERR_BANK1     : Operation Error on Bank 1 Interrupt source
00564   *     @arg FLASH_IT_RDPERR_BANK1    : Read protection Error on Bank 1 Interrupt source
00565   *     @arg FLASH_IT_RDSERR_BANK1    : Read secure Error on Bank 1 Interrupt source
00566   *     @arg FLASH_IT_SNECCERR_BANK1  : Single ECC Error Correction on Bank 1 Interrupt source
00567   *     @arg FLASH_IT_DBECCERR_BANK1  : Double Detection ECC Error on Bank 1 Interrupt source
00568   *     @arg FLASH_IT_CRCEND_BANK1    : CRC End on Bank 1 Interrupt source
00569   *     @arg FLASH_IT_CRCRDERR_BANK1  : CRC Read error on Bank 1 Interrupt source
00570   *     @arg FLASH_IT_ALL_BANK1       : All Bank 1 Interrupt sources
00571   *
00572   *   In case of Bank 2, this parameter can be any combination of the following values:
00573   *     @arg FLASH_IT_EOP_BANK2       : End of FLASH Bank 2 Operation Interrupt source
00574   *     @arg FLASH_IT_WRPERR_BANK2    : Write Protection Error on Bank 2 Interrupt source
00575   *     @arg FLASH_IT_PGSERR_BANK2    : Program Sequence Error on Bank 2 Interrupt source
00576   *     @arg FLASH_IT_STRBERR_BANK2   : Strobe Error on Bank 2 Interrupt source
00577   *     @arg FLASH_IT_INCERR_BANK2    : Inconsistency Error on Bank 2 Interrupt source
00578   *     @arg FLASH_IT_OPERR_BANK2     : Operation Error on Bank 2 Interrupt source
00579   *     @arg FLASH_IT_RDPERR_BANK2    : Read protection Error on Bank 2 Interrupt source
00580   *     @arg FLASH_IT_RDSERR_BANK2    : Read secure Error on Bank 2 Interrupt source
00581   *     @arg FLASH_IT_SNECCERR_BANK2  : Single ECC Error Correction on Bank 2 Interrupt source
00582   *     @arg FLASH_IT_DBECCERR_BANK2  : Double Detection ECC Error on Bank 2 Interrupt source
00583   *     @arg FLASH_IT_CRCEND_BANK2    : CRC End on Bank 2 Interrupt source
00584   *     @arg FLASH_IT_CRCRDERR_BANK2  : CRC Read error on Bank 2 Interrupt source
00585   *     @arg FLASH_IT_ALL_BANK2       : All Bank 2 Interrupt sources
00586   * @retval none
00587   */
00588 
00589 #define __HAL_FLASH_DISABLE_IT_BANK1(__INTERRUPT__)  (FLASH->CR1 &= ~(uint32_t)(__INTERRUPT__))
00590 
00591 #define __HAL_FLASH_DISABLE_IT_BANK2(__INTERRUPT__)  (FLASH->CR2 &= ~(uint32_t)((__INTERRUPT__) & 0x7FFFFFFFU))
00592 
00593 #if defined (DUAL_BANK)
00594 #define __HAL_FLASH_DISABLE_IT(__INTERRUPT__)  (IS_FLASH_IT_BANK1(__INTERRUPT__) ? \
00595                                                 __HAL_FLASH_DISABLE_IT_BANK1(__INTERRUPT__) : \
00596                                                 __HAL_FLASH_DISABLE_IT_BANK2(__INTERRUPT__))
00597 #else
00598 #define __HAL_FLASH_DISABLE_IT(__INTERRUPT__)  __HAL_FLASH_DISABLE_IT_BANK1(__INTERRUPT__)
00599 #endif /* DUAL_BANK */
00600 
00601 
00602 /**
00603   * @brief  Checks whether the specified FLASH flag is set or not.
00604   * @param  __FLAG__: specifies the FLASH flag to check.
00605   *   In case of Bank 1 This parameter can be one of the following values :
00606   *     @arg FLASH_FLAG_BSY_BANK1      : FLASH Bank 1 Busy flag
00607   *     @arg FLASH_FLAG_WBNE_BANK1     : Write Buffer Not Empty on Bank 1 flag
00608   *     @arg FLASH_FLAG_QW_BANK1       : Wait Queue on Bank 1 flag
00609   *     @arg FLASH_FLAG_CRC_BUSY_BANK1 : CRC module is working on Bank 1 flag
00610   *     @arg FLASH_FLAG_EOP_BANK1      : End Of Program on Bank 1 flag
00611   *     @arg FLASH_FLAG_WRPERR_BANK1   : Write Protection Error on Bank 1 flag
00612   *     @arg FLASH_FLAG_PGSERR_BANK1   : Program Sequence Error on Bank 1 flag
00613   *     @arg FLASH_FLAG_STRBER_BANK1   : Program Alignment Error on Bank 1 flag
00614   *     @arg FLASH_FLAG_INCERR_BANK1   : Inconsistency Error on Bank 1 flag
00615   *     @arg FLASH_FLAG_OPERR_BANK1    : Operation Error on Bank 1 flag
00616   *     @arg FLASH_FLAG_RDPERR_BANK1   : Read Protection Error on Bank 1 flag
00617   *     @arg FLASH_FLAG_RDSERR_BANK1   : Read secure  Error on Bank 1 flag
00618   *     @arg FLASH_FLAG_SNECCE_BANK1   : Single ECC Error Correction on Bank 1 flag
00619   *     @arg FLASH_FLAG_DBECCE_BANK1   : Double Detection ECC Error on Bank 1 flag
00620   *     @arg FLASH_FLAG_CRCEND_BANK1   : CRC End on Bank 1 flag
00621   *     @arg FLASH_FLAG_CRCRDERR_BANK1 : CRC Read error on Bank 1 flag
00622   *
00623   *   In case of Bank 2 This parameter can be one of the following values :
00624   *     @arg FLASH_FLAG_BSY_BANK2      : FLASH Bank 2 Busy flag
00625   *     @arg FLASH_FLAG_WBNE_BANK2     : Write Buffer Not Empty on Bank 2 flag
00626   *     @arg FLASH_FLAG_QW_BANK2       : Wait Queue on Bank 2 flag
00627   *     @arg FLASH_FLAG_CRC_BUSY_BANK2 : CRC module is working on Bank 2 flag
00628   *     @arg FLASH_FLAG_EOP_BANK2      : End Of Program on Bank 2 flag
00629   *     @arg FLASH_FLAG_WRPERR_BANK2   : Write Protection Error on Bank 2 flag
00630   *     @arg FLASH_FLAG_PGSERR_BANK2   : Program Sequence Error on Bank 2 flag
00631   *     @arg FLASH_FLAG_STRBER_BANK2   : Program Alignment Error on Bank 2 flag
00632   *     @arg FLASH_FLAG_INCERR_BANK2   : Inconsistency Error on Bank 2 flag
00633   *     @arg FLASH_FLAG_OPERR_BANK2    : Operation Error on Bank 2 flag
00634   *     @arg FLASH_FLAG_RDPERR_BANK2   : Read Protection Error on Bank 2 flag
00635   *     @arg FLASH_FLAG_RDSERR_BANK2   : Read secure  Error on Bank 2 flag
00636   *     @arg FLASH_FLAG_SNECCE_BANK2   : Single ECC Error Correction on Bank 2 flag
00637   *     @arg FLASH_FLAG_DBECCE_BANK2   : Double Detection ECC Error on Bank 2 flag
00638   *     @arg FLASH_FLAG_CRCEND_BANK2   : CRC End on Bank 2 flag
00639   *     @arg FLASH_FLAG_CRCRDERR_BANK2 : CRC Read error on Bank 2 flag
00640   * @retval The new state of FLASH_FLAG (SET or RESET).
00641   */
00642 #define __HAL_FLASH_GET_FLAG_BANK1(__FLAG__)     (READ_BIT(FLASH->SR1, (__FLAG__)) == (__FLAG__))
00643 
00644 #define __HAL_FLASH_GET_FLAG_BANK2(__FLAG__)     (READ_BIT(FLASH->SR2, ((__FLAG__) & 0x7FFFFFFFU)) == (((__FLAG__) & 0x7FFFFFFFU)))
00645 
00646 #if defined (DUAL_BANK)
00647 #define __HAL_FLASH_GET_FLAG(__FLAG__)           (IS_FLASH_FLAG_BANK1(__FLAG__) ?  __HAL_FLASH_GET_FLAG_BANK1(__FLAG__) : \
00648                                                   __HAL_FLASH_GET_FLAG_BANK2(__FLAG__))
00649 #else
00650 #define __HAL_FLASH_GET_FLAG(__FLAG__)           __HAL_FLASH_GET_FLAG_BANK1(__FLAG__)
00651 #endif /* DUAL_BANK */
00652 
00653 
00654 /**
00655   * @brief  Clear the specified FLASH flag.
00656   * @param  __FLAG__: specifies the FLASH flags to clear.
00657   *    In case of Bank 1, this parameter can be any combination of the following values:
00658   *     @arg FLASH_FLAG_EOP_BANK1        : End Of Program on Bank 1 flag
00659   *     @arg FLASH_FLAG_WRPERR_BANK1     : Write Protection Error on Bank 1 flag
00660   *     @arg FLASH_FLAG_PGSERR_BANK1     : Program Sequence Error on Bank 1 flag
00661   *     @arg FLASH_FLAG_STRBER_BANK1     : Program Alignment Error on Bank 1 flag
00662   *     @arg FLASH_FLAG_INCERR_BANK1     : Inconsistency Error on Bank 1 flag
00663   *     @arg FLASH_FLAG_OPERR_BANK1      : Operation Error on Bank 1 flag
00664   *     @arg FLASH_FLAG_RDPERR_BANK1     : Read Protection Error on Bank 1 flag
00665   *     @arg FLASH_FLAG_RDSERR_BANK1     : Read secure  Error on Bank 1 flag
00666   *     @arg FLASH_FLAG_SNECCE_BANK1     : Single ECC Error Correction on Bank 1 flag
00667   *     @arg FLASH_FLAG_DBECCE_BANK1     : Double Detection ECC Error on Bank 1 flag
00668   *     @arg FLASH_FLAG_CRCEND_BANK1     : CRC End on Bank 1 flag
00669   *     @arg FLASH_FLAG_CRCRDERR_BANK1   : CRC Read error on Bank 1 flag
00670   *     @arg FLASH_FLAG_ALL_ERRORS_BANK1 : All Bank 1 error flags
00671   *     @arg FLASH_FLAG_ALL_BANK1        : All Bank 1 flags
00672   *
00673   *   In case of Bank 2, this parameter can be any combination of the following values :
00674   *     @arg FLASH_FLAG_EOP_BANK2        : End Of Program on Bank 2 flag
00675   *     @arg FLASH_FLAG_WRPERR_BANK2     : Write Protection Error on Bank 2 flag
00676   *     @arg FLASH_FLAG_PGSERR_BANK2     : Program Sequence Error on Bank 2 flag
00677   *     @arg FLASH_FLAG_STRBER_BANK2     : Program Alignment Error on Bank 2 flag
00678   *     @arg FLASH_FLAG_INCERR_BANK2     : Inconsistency Error on Bank 2 flag
00679   *     @arg FLASH_FLAG_OPERR_BANK2      : Operation Error on Bank 2 flag
00680   *     @arg FLASH_FLAG_RDPERR_BANK2     : Read Protection Error on Bank 2 flag
00681   *     @arg FLASH_FLAG_RDSERR_BANK2     : Read secure  Error on Bank 2 flag
00682   *     @arg FLASH_FLAG_SNECCE_BANK2     : Single ECC Error Correction on Bank 2 flag
00683   *     @arg FLASH_FLAG_DBECCE_BANK2     : Double Detection ECC Error on Bank 2 flag
00684   *     @arg FLASH_FLAG_CRCEND_BANK2     : CRC End on Bank 2 flag
00685   *     @arg FLASH_FLAG_CRCRDERR_BANK2   : CRC Read error on Bank 2 flag
00686   *     @arg FLASH_FLAG_ALL_ERRORS_BANK2 : All Bank 2 error flags
00687   *     @arg FLASH_FLAG_ALL_BANK2        : All Bank 2 flags
00688   * @retval none
00689   */
00690 
00691 #define __HAL_FLASH_CLEAR_FLAG_BANK1(__FLAG__)    WRITE_REG(FLASH->CCR1, (__FLAG__))
00692 
00693 #define __HAL_FLASH_CLEAR_FLAG_BANK2(__FLAG__)    WRITE_REG(FLASH->CCR2, ((__FLAG__) & 0x7FFFFFFFU))
00694 
00695 #if defined (DUAL_BANK)
00696 #define __HAL_FLASH_CLEAR_FLAG(__FLAG__)         (IS_FLASH_FLAG_BANK1(__FLAG__) ?  __HAL_FLASH_CLEAR_FLAG_BANK1(__FLAG__) : \
00697                                                   __HAL_FLASH_CLEAR_FLAG_BANK2(__FLAG__))
00698 #else
00699 #define __HAL_FLASH_CLEAR_FLAG(__FLAG__)         __HAL_FLASH_CLEAR_FLAG_BANK1(__FLAG__)
00700 #endif /* DUAL_BANK */
00701 
00702 /**
00703   * @}
00704   */
00705 
00706 /* Include FLASH HAL Extension module */
00707 #include "stm32h7xx_hal_flash_ex.h"
00708 
00709 /* Exported functions --------------------------------------------------------*/
00710 /** @addtogroup FLASH_Exported_Functions
00711   * @{
00712   */
00713 /** @addtogroup FLASH_Exported_Functions_Group1
00714   * @{
00715   */
00716 /* Program operation functions  ***********************************************/
00717 HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t FlashAddress, uint32_t DataAddress);
00718 HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t FlashAddress, uint32_t DataAddress);
00719 /* FLASH IRQ handler method */
00720 void HAL_FLASH_IRQHandler(void);
00721 /* Callbacks in non blocking modes */
00722 void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue);
00723 void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue);
00724 /**
00725   * @}
00726   */
00727 
00728 /** @addtogroup FLASH_Exported_Functions_Group2
00729   * @{
00730   */
00731 /* Peripheral Control functions  **********************************************/
00732 HAL_StatusTypeDef HAL_FLASH_Unlock(void);
00733 HAL_StatusTypeDef HAL_FLASH_Lock(void);
00734 HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void);
00735 HAL_StatusTypeDef HAL_FLASH_OB_Lock(void);
00736 /* Option bytes control */
00737 HAL_StatusTypeDef HAL_FLASH_OB_Launch(void);
00738 /**
00739   * @}
00740   */
00741 
00742 /** @addtogroup FLASH_Exported_Functions_Group3
00743   * @{
00744   */
00745 /* Peripheral State functions  ************************************************/
00746 uint32_t HAL_FLASH_GetError(void);
00747 /**
00748   * @}
00749   */
00750 
00751 /**
00752   * @}
00753   */
00754 /* Private types -------------------------------------------------------------*/
00755 /* Private variables ---------------------------------------------------------*/
00756 /** @defgroup FLASH_Private_Variables FLASH Private Variables
00757   * @{
00758   */
00759 extern FLASH_ProcessTypeDef pFlash;
00760 /**
00761   * @}
00762   */
00763 /* Private constants ---------------------------------------------------------*/
00764 /** @defgroup FLASH_Private_Constants FLASH Private Constants
00765   * @{
00766   */
00767 
00768 /**
00769   * @}
00770   */
00771 
00772 /* Private macros ------------------------------------------------------------*/
00773 /** @defgroup FLASH_Private_Macros FLASH Private Macros
00774   * @{
00775   */
00776 
00777 #if defined (FLASH_OPTCR_PG_OTP)
00778 #define IS_FLASH_TYPEPROGRAM(VALUE)      (((VALUE) == FLASH_TYPEPROGRAM_FLASHWORD) || \
00779                                           ((VALUE) == FLASH_TYPEPROGRAM_OTPWORD))
00780 #else
00781 #define IS_FLASH_TYPEPROGRAM(VALUE)      ((VALUE) == FLASH_TYPEPROGRAM_FLASHWORD)
00782 #endif /* FLASH_OPTCR_PG_OTP */
00783 
00784 #define IS_FLASH_IT_BANK1(IT)            (((IT) & FLASH_IT_ALL_BANK1) == (IT))
00785 #if defined (DUAL_BANK)
00786 #define IS_FLASH_IT_BANK2(IT)            (((IT) & FLASH_IT_ALL_BANK2) == (IT))
00787 #endif /* DUAL_BANK */
00788 
00789 #define IS_FLASH_FLAG_BANK1(FLAG)        (((FLAG) & FLASH_FLAG_ALL_BANK1) == (FLAG))
00790 #if defined (DUAL_BANK)
00791 #define IS_FLASH_FLAG_BANK2(FLAG)        (((FLAG) & FLASH_FLAG_ALL_BANK2) == (FLAG))
00792 #endif /* DUAL_BANK */
00793 
00794 #if defined (DUAL_BANK)
00795 #define IS_FLASH_PROGRAM_ADDRESS_BANK1(ADDRESS) (((ADDRESS) >= FLASH_BANK1_BASE) && ((ADDRESS) < FLASH_BANK2_BASE))
00796 #define IS_FLASH_PROGRAM_ADDRESS_BANK2(ADDRESS) (((ADDRESS) >= FLASH_BANK2_BASE ) && ((ADDRESS) <= FLASH_END))
00797 #else
00798 #define IS_FLASH_PROGRAM_ADDRESS_BANK1(ADDRESS) (((ADDRESS) >= FLASH_BANK1_BASE) && ((ADDRESS) <= FLASH_END))
00799 #endif /* DUAL_BANK */
00800 
00801 #if defined (DUAL_BANK)
00802 #if defined (FLASH_OPTCR_PG_OTP)
00803 #define IS_FLASH_PROGRAM_ADDRESS_OTP(ADDRESS)   (((ADDRESS) >= 0x08FFF000U) && ((ADDRESS) <= 0x08FFF3FFU))
00804 #define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)       (IS_FLASH_PROGRAM_ADDRESS_BANK1(ADDRESS) || \
00805                                                  IS_FLASH_PROGRAM_ADDRESS_BANK2(ADDRESS) || \
00806                                                  IS_FLASH_PROGRAM_ADDRESS_OTP(ADDRESS))
00807 #else
00808 #define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)       (IS_FLASH_PROGRAM_ADDRESS_BANK1(ADDRESS) || \
00809                                                  IS_FLASH_PROGRAM_ADDRESS_BANK2(ADDRESS))
00810 #endif /* FLASH_OPTCR_PG_OTP */
00811 #else
00812 #if defined (FLASH_OPTCR_PG_OTP)
00813 #define IS_FLASH_PROGRAM_ADDRESS_OTP(ADDRESS)   (((ADDRESS) >= 0x08FFF000U) && ((ADDRESS) <= 0x08FFF3FFU))
00814 #define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)       (IS_FLASH_PROGRAM_ADDRESS_BANK1(ADDRESS) || \
00815                                                  IS_FLASH_PROGRAM_ADDRESS_OTP(ADDRESS))
00816 #else
00817 #define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)       (IS_FLASH_PROGRAM_ADDRESS_BANK1(ADDRESS))
00818 #endif /* FLASH_OPTCR_PG_OTP */
00819 #endif /* DUAL_BANK */
00820 
00821 #define IS_BOOT_ADDRESS(ADDRESS)         ((ADDRESS) <= (0x3FFF0000U))
00822 
00823 #if defined (DUAL_BANK)
00824 #define IS_FLASH_BANK(BANK)              (((BANK) == FLASH_BANK_1)  || \
00825                                           ((BANK) == FLASH_BANK_2)  || \
00826                                           ((BANK) == FLASH_BANK_BOTH))
00827 #define IS_FLASH_BANK_EXCLUSIVE(BANK)    (((BANK) == FLASH_BANK_1)  || \
00828                                           ((BANK) == FLASH_BANK_2))
00829 #else
00830 #define IS_FLASH_BANK(BANK)              ((BANK) == FLASH_BANK_1)
00831 #define IS_FLASH_BANK_EXCLUSIVE(BANK)    ((BANK) == FLASH_BANK_1)
00832 #endif /* DUAL_BANK */
00833 
00834 /**
00835   * @}
00836   */
00837 /* Private functions ---------------------------------------------------------*/
00838 /** @defgroup FLASH_Private_Functions FLASH Private functions
00839   * @{
00840   */
00841 HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout, uint32_t Bank);
00842 HAL_StatusTypeDef FLASH_OB_WaitForLastOperation(uint32_t Timeout);
00843 HAL_StatusTypeDef FLASH_CRC_WaitForLastOperation(uint32_t Timeout, uint32_t Bank);
00844 /**
00845   * @}
00846   */
00847 
00848 /**
00849   * @}
00850   */
00851 
00852 /**
00853   * @}
00854   */
00855 
00856 #ifdef __cplusplus
00857 }
00858 #endif
00859 
00860 #endif /* STM32H7xx_HAL_FLASH_H */
00861