1 /**
2   ******************************************************************************
3   * @file    stm32h7xx_hal_flash.h
4   * @author  MCD Application Team
5   * @brief   Header file of FLASH HAL module.
6   ******************************************************************************
7   * @attention
8   *
9   * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics.
10   * All rights reserved.</center></h2>
11   *
12   * This software component is licensed by ST under BSD 3-Clause license,
13   * the "License"; You may not use this file except in compliance with the
14   * License. You may obtain a copy of the License at:
15   *                       opensource.org/licenses/BSD-3-Clause
16   *
17   ******************************************************************************
18   */
19 
20 /* Define to prevent recursive inclusion -------------------------------------*/
21 #ifndef STM32H7xx_HAL_FLASH_H
22 #define STM32H7xx_HAL_FLASH_H
23 
24 #ifdef __cplusplus
25  extern "C" {
26 #endif
27 
28 /* Includes ------------------------------------------------------------------*/
29 #include "stm32h7xx_hal_def.h"
30 
31 /** @addtogroup STM32H7xx_HAL_Driver
32   * @{
33   */
34 
35 /** @addtogroup FLASH
36   * @{
37   */
38 
39 /* Exported types ------------------------------------------------------------*/
40 /** @defgroup FLASH_Exported_Types FLASH Exported Types
41   * @{
42   */
43 
44 /**
45   * @brief  FLASH Procedure structure definition
46   */
47 typedef enum
48 {
49   FLASH_PROC_NONE = 0U,
50   FLASH_PROC_SECTERASE_BANK1,
51   FLASH_PROC_MASSERASE_BANK1,
52   FLASH_PROC_PROGRAM_BANK1,
53   FLASH_PROC_SECTERASE_BANK2,
54   FLASH_PROC_MASSERASE_BANK2,
55   FLASH_PROC_PROGRAM_BANK2,
56   FLASH_PROC_ALLBANK_MASSERASE
57 } FLASH_ProcedureTypeDef;
58 
59 
60 /**
61   * @brief  FLASH handle Structure definition
62   */
63 typedef struct
64 {
65   __IO FLASH_ProcedureTypeDef ProcedureOnGoing;   /*!< Internal variable to indicate which procedure is ongoing or not in IT context */
66 
67   __IO uint32_t               NbSectorsToErase;   /*!< Internal variable to save the remaining sectors to erase in IT context        */
68 
69   __IO uint32_t               VoltageForErase;    /*!< Internal variable to provide voltage range selected by user in IT context     */
70 
71   __IO uint32_t               Sector;             /*!< Internal variable to define the current sector which is erasing               */
72 
73   __IO uint32_t               Address;            /*!< Internal variable to save address selected for program                        */
74 
75   HAL_LockTypeDef             Lock;               /*!< FLASH locking object                                                          */
76 
77   __IO uint32_t               ErrorCode;          /*!< FLASH error code                                                              */
78 
79 }FLASH_ProcessTypeDef;
80 
81 /**
82   * @}
83   */
84 
85 /* Exported constants --------------------------------------------------------*/
86 /** @defgroup FLASH_Exported_Constants FLASH Exported Constants
87   * @{
88   */
89 
90 /** @defgroup FLASH_Error_Code FLASH Error Code
91   * @brief    FLASH Error Code
92   * @{
93   */
94 #define HAL_FLASH_ERROR_NONE         0x00000000U               /*!< No error                              */
95 
96 #define HAL_FLASH_ERROR_WRP          FLASH_FLAG_WRPERR         /*!< Write Protection Error                */
97 #define HAL_FLASH_ERROR_PGS          FLASH_FLAG_PGSERR         /*!< Program Sequence Error                */
98 #define HAL_FLASH_ERROR_STRB         FLASH_FLAG_STRBERR        /*!< Strobe Error                          */
99 #define HAL_FLASH_ERROR_INC          FLASH_FLAG_INCERR         /*!< Inconsistency Error                   */
100 #if defined (FLASH_SR_OPERR)
101 #define HAL_FLASH_ERROR_OPE          FLASH_FLAG_OPERR          /*!< Operation Error                       */
102 #endif /* FLASH_SR_OPERR */
103 #define HAL_FLASH_ERROR_RDP          FLASH_FLAG_RDPERR         /*!< Read Protection Error                 */
104 #define HAL_FLASH_ERROR_RDS          FLASH_FLAG_RDSERR         /*!< Read Secured Error                    */
105 #define HAL_FLASH_ERROR_SNECC        FLASH_FLAG_SNECCERR       /*!< ECC Single Correction Error           */
106 #define HAL_FLASH_ERROR_DBECC        FLASH_FLAG_DBECCERR       /*!< ECC Double Detection Error            */
107 #define HAL_FLASH_ERROR_CRCRD        FLASH_FLAG_CRCRDERR       /*!< CRC Read Error                        */
108 
109 #define HAL_FLASH_ERROR_WRP_BANK1    FLASH_FLAG_WRPERR_BANK1   /*!< Write Protection Error on Bank 1      */
110 #define HAL_FLASH_ERROR_PGS_BANK1    FLASH_FLAG_PGSERR_BANK1   /*!< Program Sequence Error on Bank 1      */
111 #define HAL_FLASH_ERROR_STRB_BANK1   FLASH_FLAG_STRBERR_BANK1  /*!< Strobe Error on Bank 1                */
112 #define HAL_FLASH_ERROR_INC_BANK1    FLASH_FLAG_INCERR_BANK1   /*!< Inconsistency Error on Bank 1         */
113 #if defined (FLASH_SR_OPERR)
114 #define HAL_FLASH_ERROR_OPE_BANK1    FLASH_FLAG_OPERR_BANK1    /*!< Operation Error on Bank 1             */
115 #endif /* FLASH_SR_OPERR */
116 #define HAL_FLASH_ERROR_RDP_BANK1    FLASH_FLAG_RDPERR_BANK1   /*!< Read Protection Error on Bank 1       */
117 #define HAL_FLASH_ERROR_RDS_BANK1    FLASH_FLAG_RDSERR_BANK1   /*!< Read Secured Error on Bank 1          */
118 #define HAL_FLASH_ERROR_SNECC_BANK1  FLASH_FLAG_SNECCERR_BANK1 /*!< ECC Single Correction Error on Bank 1 */
119 #define HAL_FLASH_ERROR_DBECC_BANK1  FLASH_FLAG_DBECCERR_BANK1 /*!< ECC Double Detection Error on Bank 1  */
120 #define HAL_FLASH_ERROR_CRCRD_BANK1  FLASH_FLAG_CRCRDERR_BANK1 /*!< CRC Read Error on Bank1               */
121 
122 #define HAL_FLASH_ERROR_WRP_BANK2    FLASH_FLAG_WRPERR_BANK2    /*!< Write Protection Error on Bank 2      */
123 #define HAL_FLASH_ERROR_PGS_BANK2    FLASH_FLAG_PGSERR_BANK2    /*!< Program Sequence Error on Bank 2      */
124 #define HAL_FLASH_ERROR_STRB_BANK2   FLASH_FLAG_STRBERR_BANK2   /*!< Strobe Error on Bank 2                */
125 #define HAL_FLASH_ERROR_INC_BANK2    FLASH_FLAG_INCERR_BANK2    /*!< Inconsistency Error on Bank 2         */
126 #if defined (FLASH_SR_OPERR)
127 #define HAL_FLASH_ERROR_OPE_BANK2    FLASH_FLAG_OPERR_BANK2     /*!< Operation Error on Bank 2             */
128 #endif /* FLASH_SR_OPERR */
129 #define HAL_FLASH_ERROR_RDP_BANK2    FLASH_FLAG_RDPERR_BANK2    /*!< Read Protection Error on Bank 2       */
130 #define HAL_FLASH_ERROR_RDS_BANK2    FLASH_FLAG_RDSERR_BANK2    /*!< Read Secured Error on Bank 2          */
131 #define HAL_FLASH_ERROR_SNECC_BANK2  FLASH_FLAG_SNECCERR_BANK2  /*!< ECC Single Correction Error on Bank 2 */
132 #define HAL_FLASH_ERROR_DBECC_BANK2  FLASH_FLAG_DBECCERR_BANK2  /*!< ECC Double Detection Error on Bank 2  */
133 #define HAL_FLASH_ERROR_CRCRD_BANK2  FLASH_FLAG_CRCRDERR_BANK2  /*!< CRC Read Error on Bank2               */
134 
135 #define HAL_FLASH_ERROR_OB_CHANGE    FLASH_OPTSR_OPTCHANGEERR   /*!< Option Byte Change Error              */
136 /**
137   * @}
138   */
139 
140 /** @defgroup FLASH_Type_Program FLASH Type Program
141   * @{
142   */
143 #define FLASH_TYPEPROGRAM_FLASHWORD  0x01U        /*!< Program a flash word at a specified address */
144 #if defined (FLASH_OPTCR_PG_OTP)
145 #define FLASH_TYPEPROGRAM_OTPWORD    0x02U        /*!< Program an OTP word at a specified address  */
146 #endif /* FLASH_OPTCR_PG_OTP */
147 /**
148   * @}
149   */
150 
151 /** @defgroup FLASH_Flag_definition FLASH Flag definition
152   * @brief Flag definition
153   * @{
154   */
155 #define FLASH_FLAG_BSY                     FLASH_SR_BSY             /*!< FLASH Busy flag */
156 #define FLASH_FLAG_WBNE                    FLASH_SR_WBNE            /*!< Write Buffer Not Empty flag */
157 #define FLASH_FLAG_QW                      FLASH_SR_QW              /*!< Wait Queue on flag */
158 #define FLASH_FLAG_CRC_BUSY                FLASH_SR_CRC_BUSY        /*!< CRC Busy flag */
159 #define FLASH_FLAG_EOP                     FLASH_SR_EOP             /*!< End Of Program on flag */
160 #define FLASH_FLAG_WRPERR                  FLASH_SR_WRPERR          /*!< Write Protection Error on flag */
161 #define FLASH_FLAG_PGSERR                  FLASH_SR_PGSERR          /*!< Program Sequence Error on flag */
162 #define FLASH_FLAG_STRBERR                 FLASH_SR_STRBERR         /*!< Strobe Error flag */
163 #define FLASH_FLAG_INCERR                  FLASH_SR_INCERR          /*!< Inconsistency Error on flag */
164 #if defined (FLASH_SR_OPERR)
165 #define FLASH_FLAG_OPERR                   FLASH_SR_OPERR           /*!< Operation Error on flag */
166 #endif /* FLASH_SR_OPERR */
167 #define FLASH_FLAG_RDPERR                  FLASH_SR_RDPERR          /*!< Read Protection Error on flag */
168 #define FLASH_FLAG_RDSERR                  FLASH_SR_RDSERR          /*!< Read Secured Error on flag */
169 #define FLASH_FLAG_SNECCERR                FLASH_SR_SNECCERR        /*!< Single ECC Error Correction on flag */
170 #define FLASH_FLAG_DBECCERR                FLASH_SR_DBECCERR        /*!< Double Detection ECC Error on flag */
171 #define FLASH_FLAG_CRCEND                  FLASH_SR_CRCEND          /*!< CRC End of Calculation flag */
172 #define FLASH_FLAG_CRCRDERR                FLASH_SR_CRCRDERR        /*!< CRC Read Error on bank flag */
173 
174 #define FLASH_FLAG_BSY_BANK1               FLASH_SR_BSY             /*!< FLASH Bank 1 Busy flag */
175 #define FLASH_FLAG_WBNE_BANK1              FLASH_SR_WBNE            /*!< Write Buffer Not Empty on Bank 1 flag */
176 #define FLASH_FLAG_QW_BANK1                FLASH_SR_QW              /*!< Wait Queue on Bank 1 flag */
177 #define FLASH_FLAG_CRC_BUSY_BANK1          FLASH_SR_CRC_BUSY        /*!< CRC Busy on Bank 1 flag */
178 #define FLASH_FLAG_EOP_BANK1               FLASH_SR_EOP             /*!< End Of Program on Bank 1 flag */
179 #define FLASH_FLAG_WRPERR_BANK1            FLASH_SR_WRPERR          /*!< Write Protection Error on Bank 1 flag */
180 #define FLASH_FLAG_PGSERR_BANK1            FLASH_SR_PGSERR          /*!< Program Sequence Error on Bank 1 flag */
181 #define FLASH_FLAG_STRBERR_BANK1           FLASH_SR_STRBERR         /*!< Strobe Error on Bank 1 flag */
182 #define FLASH_FLAG_INCERR_BANK1            FLASH_SR_INCERR          /*!< Inconsistency Error on Bank 1 flag */
183 #if defined (FLASH_SR_OPERR)
184 #define FLASH_FLAG_OPERR_BANK1             FLASH_SR_OPERR           /*!< Operation Error on Bank 1 flag */
185 #endif /* FLASH_SR_OPERR */
186 #define FLASH_FLAG_RDPERR_BANK1            FLASH_SR_RDPERR          /*!< Read Protection Error on Bank 1 flag */
187 #define FLASH_FLAG_RDSERR_BANK1            FLASH_SR_RDSERR          /*!< Read Secured Error on Bank 1 flag */
188 #define FLASH_FLAG_SNECCERR_BANK1          FLASH_SR_SNECCERR        /*!< Single ECC Error Correction on Bank 1 flag */
189 #define FLASH_FLAG_DBECCERR_BANK1          FLASH_SR_DBECCERR        /*!< Double Detection ECC Error on Bank 1 flag */
190 #define FLASH_FLAG_CRCEND_BANK1            FLASH_SR_CRCEND          /*!< CRC End of Calculation on Bank 1 flag */
191 #define FLASH_FLAG_CRCRDERR_BANK1          FLASH_SR_CRCRDERR        /*!< CRC Read error on Bank 1 flag */
192 
193 #if defined (FLASH_SR_OPERR)
194 #define FLASH_FLAG_ALL_ERRORS_BANK1       (FLASH_FLAG_WRPERR_BANK1   | FLASH_FLAG_PGSERR_BANK1   | \
195                                            FLASH_FLAG_STRBERR_BANK1  | FLASH_FLAG_INCERR_BANK1   | \
196                                            FLASH_FLAG_OPERR_BANK1    | FLASH_FLAG_RDPERR_BANK1   | \
197                                            FLASH_FLAG_RDSERR_BANK1   | FLASH_FLAG_SNECCERR_BANK1 | \
198                                            FLASH_FLAG_DBECCERR_BANK1 | FLASH_FLAG_CRCRDERR_BANK1) /*!< All Bank 1 error flags */
199 #else
200 #define FLASH_FLAG_ALL_ERRORS_BANK1       (FLASH_FLAG_WRPERR_BANK1   | FLASH_FLAG_PGSERR_BANK1   | \
201                                            FLASH_FLAG_STRBERR_BANK1  | FLASH_FLAG_INCERR_BANK1   | \
202                                            FLASH_FLAG_RDPERR_BANK1   | FLASH_FLAG_RDSERR_BANK1   | \
203                                            FLASH_FLAG_SNECCERR_BANK1 | FLASH_FLAG_DBECCERR_BANK1 | \
204                                            FLASH_FLAG_CRCRDERR_BANK1) /*!< All Bank 1 error flags */
205 #endif /* FLASH_SR_OPERR */
206 
207 #define FLASH_FLAG_ALL_BANK1              (FLASH_FLAG_BSY_BANK1      | FLASH_FLAG_WBNE_BANK1     | \
208                                            FLASH_FLAG_QW_BANK1       | FLASH_FLAG_CRC_BUSY_BANK1 | \
209                                            FLASH_FLAG_EOP_BANK1      | FLASH_FLAG_CRCEND_BANK1   | \
210                                            FLASH_FLAG_ALL_ERRORS_BANK1) /*!< All Bank 1 flags */
211 
212 #define FLASH_FLAG_BSY_BANK2               (FLASH_SR_BSY      | 0x80000000U)        /*!< FLASH Bank 2 Busy flag */
213 #define FLASH_FLAG_WBNE_BANK2              (FLASH_SR_WBNE     | 0x80000000U)        /*!< Write Buffer Not Empty on Bank 2 flag */
214 #define FLASH_FLAG_QW_BANK2                (FLASH_SR_QW       | 0x80000000U)        /*!< Wait Queue on Bank 2 flag */
215 #define FLASH_FLAG_CRC_BUSY_BANK2          (FLASH_SR_CRC_BUSY | 0x80000000U)        /*!< CRC Busy on Bank 2 flag */
216 #define FLASH_FLAG_EOP_BANK2               (FLASH_SR_EOP      | 0x80000000U)        /*!< End Of Program on Bank 2 flag */
217 #define FLASH_FLAG_WRPERR_BANK2            (FLASH_SR_WRPERR   | 0x80000000U)        /*!< Write Protection Error on Bank 2 flag */
218 #define FLASH_FLAG_PGSERR_BANK2            (FLASH_SR_PGSERR   | 0x80000000U)        /*!< Program Sequence Error on Bank 2 flag */
219 #define FLASH_FLAG_STRBERR_BANK2           (FLASH_SR_STRBERR  | 0x80000000U)        /*!< Strobe Error on Bank 2 flag */
220 #define FLASH_FLAG_INCERR_BANK2            (FLASH_SR_INCERR   | 0x80000000U)        /*!< Inconsistency Error on Bank 2 flag */
221 #if defined (FLASH_SR_OPERR)
222 #define FLASH_FLAG_OPERR_BANK2             (FLASH_SR_OPERR    | 0x80000000U)        /*!< Operation Error on Bank 2 flag */
223 #endif /* FLASH_SR_OPERR */
224 #define FLASH_FLAG_RDPERR_BANK2            (FLASH_SR_RDPERR   | 0x80000000U)        /*!< Read Protection Error on Bank 2 flag */
225 #define FLASH_FLAG_RDSERR_BANK2            (FLASH_SR_RDSERR   | 0x80000000U)        /*!< Read Secured Error on Bank 2 flag */
226 #define FLASH_FLAG_SNECCERR_BANK2          (FLASH_SR_SNECCERR | 0x80000000U)        /*!< Single ECC Error Correction on Bank 2 flag */
227 #define FLASH_FLAG_DBECCERR_BANK2          (FLASH_SR_DBECCERR | 0x80000000U)        /*!< Double Detection ECC Error on Bank 2 flag */
228 #define FLASH_FLAG_CRCEND_BANK2            (FLASH_SR_CRCEND   | 0x80000000U)        /*!< CRC End of Calculation on Bank 2 flag */
229 #define FLASH_FLAG_CRCRDERR_BANK2          (FLASH_SR_CRCRDERR | 0x80000000U)        /*!< CRC Read error on Bank 2 flag */
230 
231 #if defined (FLASH_SR_OPERR)
232 #define FLASH_FLAG_ALL_ERRORS_BANK2       (FLASH_FLAG_WRPERR_BANK2   | FLASH_FLAG_PGSERR_BANK2   | \
233                                            FLASH_FLAG_STRBERR_BANK2  | FLASH_FLAG_INCERR_BANK2   | \
234                                            FLASH_FLAG_OPERR_BANK2    | FLASH_FLAG_RDPERR_BANK2   | \
235                                            FLASH_FLAG_RDSERR_BANK2   | FLASH_FLAG_SNECCERR_BANK2 | \
236                                            FLASH_FLAG_DBECCERR_BANK2 | FLASH_FLAG_CRCRDERR_BANK2) /*!< All Bank 2 error flags */
237 #else
238 #define FLASH_FLAG_ALL_ERRORS_BANK2       (FLASH_FLAG_WRPERR_BANK2   | FLASH_FLAG_PGSERR_BANK2   | \
239                                            FLASH_FLAG_STRBERR_BANK2  | FLASH_FLAG_INCERR_BANK2   | \
240                                            FLASH_FLAG_RDPERR_BANK2   | FLASH_FLAG_RDSERR_BANK2   | \
241                                            FLASH_FLAG_SNECCERR_BANK2 | FLASH_FLAG_DBECCERR_BANK2 | \
242                                            FLASH_FLAG_CRCRDERR_BANK2) /*!< All Bank 2 error flags */
243 #endif /* FLASH_SR_OPERR */
244 
245 #define FLASH_FLAG_ALL_BANK2              (FLASH_FLAG_BSY_BANK2      | FLASH_FLAG_WBNE_BANK2     | \
246                                            FLASH_FLAG_QW_BANK2       | FLASH_FLAG_CRC_BUSY_BANK2 | \
247                                            FLASH_FLAG_EOP_BANK2      | FLASH_FLAG_CRCEND_BANK2   | \
248                                            FLASH_FLAG_ALL_ERRORS_BANK2) /*!< All Bank 2 flags */
249 /**
250   * @}
251   */
252 
253 /** @defgroup FLASH_Interrupt_definition FLASH Interrupt definition
254   * @brief FLASH Interrupt definition
255   * @{
256   */
257 #define FLASH_IT_EOP_BANK1                  FLASH_CR_EOPIE       /*!< End of FLASH Bank 1 Operation Interrupt source */
258 #define FLASH_IT_WRPERR_BANK1               FLASH_CR_WRPERRIE    /*!< Write Protection Error on Bank 1 Interrupt source */
259 #define FLASH_IT_PGSERR_BANK1               FLASH_CR_PGSERRIE    /*!< Program Sequence Error on Bank 1 Interrupt source */
260 #define FLASH_IT_STRBERR_BANK1              FLASH_CR_STRBERRIE   /*!< Strobe Error on Bank 1 Interrupt source */
261 #define FLASH_IT_INCERR_BANK1               FLASH_CR_INCERRIE    /*!< Inconsistency Error on Bank 1 Interrupt source */
262 #if defined (FLASH_CR_OPERRIE)
263 #define FLASH_IT_OPERR_BANK1                FLASH_CR_OPERRIE     /*!< Operation Error on Bank 1 Interrupt source */
264 #endif /* FLASH_CR_OPERRIE */
265 #define FLASH_IT_RDPERR_BANK1               FLASH_CR_RDPERRIE    /*!< Read protection Error on Bank 1 Interrupt source */
266 #define FLASH_IT_RDSERR_BANK1               FLASH_CR_RDSERRIE    /*!< Read Secured Error on Bank 1 Interrupt source */
267 #define FLASH_IT_SNECCERR_BANK1             FLASH_CR_SNECCERRIE  /*!< Single ECC Error Correction on Bank 1 Interrupt source */
268 #define FLASH_IT_DBECCERR_BANK1             FLASH_CR_DBECCERRIE  /*!< Double Detection ECC Error on Bank 1 Interrupt source */
269 #define FLASH_IT_CRCEND_BANK1               FLASH_CR_CRCENDIE    /*!< CRC End on Bank 1 Interrupt source */
270 #define FLASH_IT_CRCRDERR_BANK1             FLASH_CR_CRCRDERRIE  /*!< CRC Read error on Bank 1 Interrupt source */
271 
272 #if defined (FLASH_CR_OPERRIE)
273 #define FLASH_IT_ALL_BANK1                 (FLASH_IT_EOP_BANK1       | FLASH_IT_WRPERR_BANK1    | \
274                                             FLASH_IT_PGSERR_BANK1    | FLASH_IT_STRBERR_BANK1   | \
275                                             FLASH_IT_INCERR_BANK1    | FLASH_IT_OPERR_BANK1     | \
276                                             FLASH_IT_RDPERR_BANK1    | FLASH_IT_RDSERR_BANK1    | \
277                                             FLASH_IT_SNECCERR_BANK1  | FLASH_IT_DBECCERR_BANK1  | \
278                                             FLASH_IT_CRCEND_BANK1    | FLASH_IT_CRCRDERR_BANK1) /*!< All Bank 1 Interrupt sources */
279 #else
280 #define FLASH_IT_ALL_BANK1                 (FLASH_IT_EOP_BANK1       | FLASH_IT_WRPERR_BANK1    | \
281                                             FLASH_IT_PGSERR_BANK1    | FLASH_IT_STRBERR_BANK1   | \
282                                             FLASH_IT_INCERR_BANK1    | FLASH_IT_RDPERR_BANK1    | \
283                                             FLASH_IT_RDSERR_BANK1    | FLASH_IT_SNECCERR_BANK1  | \
284                                             FLASH_IT_DBECCERR_BANK1  | FLASH_IT_CRCEND_BANK1    | \
285                                             FLASH_IT_CRCRDERR_BANK1) /*!< All Bank 1 Interrupt sources */
286 #endif /* FLASH_CR_OPERRIE */
287 
288 #define FLASH_IT_EOP_BANK2                 (FLASH_CR_EOPIE      | 0x80000000U)  /*!< End of FLASH Bank 2 Operation Interrupt source */
289 #define FLASH_IT_WRPERR_BANK2              (FLASH_CR_WRPERRIE   | 0x80000000U)  /*!< Write Protection Error on Bank 2 Interrupt source */
290 #define FLASH_IT_PGSERR_BANK2              (FLASH_CR_PGSERRIE   | 0x80000000U)  /*!< Program Sequence Error on Bank 2 Interrupt source */
291 #define FLASH_IT_STRBERR_BANK2             (FLASH_CR_STRBERRIE  | 0x80000000U)  /*!< Strobe Error on Bank 2 Interrupt source */
292 #define FLASH_IT_INCERR_BANK2              (FLASH_CR_INCERRIE   | 0x80000000U)  /*!< Inconsistency Error on Bank 2 Interrupt source */
293 #if defined (FLASH_CR_OPERRIE)
294 #define FLASH_IT_OPERR_BANK2               (FLASH_CR_OPERRIE    | 0x80000000U)  /*!< Operation Error on Bank 2 Interrupt source */
295 #endif /* FLASH_CR_OPERRIE */
296 #define FLASH_IT_RDPERR_BANK2              (FLASH_CR_RDPERRIE   | 0x80000000U)  /*!< Read protection Error on Bank 2 Interrupt source */
297 #define FLASH_IT_RDSERR_BANK2              (FLASH_CR_RDSERRIE   | 0x80000000U)  /*!< Read Secured Error on Bank 2 Interrupt source */
298 #define FLASH_IT_SNECCERR_BANK2            (FLASH_CR_SNECCERRIE | 0x80000000U)  /*!< Single ECC Error Correction on Bank 2 Interrupt source */
299 #define FLASH_IT_DBECCERR_BANK2            (FLASH_CR_DBECCERRIE | 0x80000000U)  /*!< Double Detection ECC Error on Bank 2 Interrupt source */
300 #define FLASH_IT_CRCEND_BANK2              (FLASH_CR_CRCENDIE   | 0x80000000U)  /*!< CRC End on Bank 2 Interrupt source */
301 #define FLASH_IT_CRCRDERR_BANK2            (FLASH_CR_CRCRDERRIE | 0x80000000U)  /*!< CRC Read Error on Bank 2 Interrupt source */
302 
303 #if defined (FLASH_CR_OPERRIE)
304 #define FLASH_IT_ALL_BANK2                 (FLASH_IT_EOP_BANK2       | FLASH_IT_WRPERR_BANK2    | \
305                                             FLASH_IT_PGSERR_BANK2    | FLASH_IT_STRBERR_BANK2   | \
306                                             FLASH_IT_INCERR_BANK2    | FLASH_IT_OPERR_BANK2     | \
307                                             FLASH_IT_RDPERR_BANK2    | FLASH_IT_RDSERR_BANK2    | \
308                                             FLASH_IT_SNECCERR_BANK2  | FLASH_IT_DBECCERR_BANK2  | \
309                                             FLASH_IT_CRCEND_BANK2    | FLASH_IT_CRCRDERR_BANK2) /*!< All Bank 2 Interrupt sources */
310 #else
311 #define FLASH_IT_ALL_BANK2                 (FLASH_IT_EOP_BANK2       | FLASH_IT_WRPERR_BANK2    | \
312                                             FLASH_IT_PGSERR_BANK2    | FLASH_IT_STRBERR_BANK2   | \
313                                             FLASH_IT_INCERR_BANK2    | FLASH_IT_RDPERR_BANK2    | \
314                                             FLASH_IT_RDSERR_BANK2    | FLASH_IT_SNECCERR_BANK2  | \
315                                             FLASH_IT_DBECCERR_BANK2  | FLASH_IT_CRCEND_BANK2    | \
316                                             FLASH_IT_CRCRDERR_BANK2) /*!< All Bank 2 Interrupt sources */
317 #endif /* FLASH_CR_OPERRIE */
318 /**
319   * @}
320   */
321 
322 #if defined (FLASH_CR_PSIZE)
323 /** @defgroup FLASH_Program_Parallelism FLASH Program Parallelism
324   * @{
325   */
326 #define FLASH_PSIZE_BYTE           0x00000000U       /*!< Flash program/erase by 8 bits  */
327 #define FLASH_PSIZE_HALF_WORD      FLASH_CR_PSIZE_0  /*!< Flash program/erase by 16 bits */
328 #define FLASH_PSIZE_WORD           FLASH_CR_PSIZE_1  /*!< Flash program/erase by 32 bits */
329 #define FLASH_PSIZE_DOUBLE_WORD    FLASH_CR_PSIZE    /*!< Flash program/erase by 64 bits */
330 /**
331   * @}
332   */
333 #endif /* FLASH_CR_PSIZE */
334 
335 
336 /** @defgroup FLASH_Keys FLASH Keys
337   * @{
338   */
339 #define FLASH_KEY1                 0x45670123U
340 #define FLASH_KEY2                 0xCDEF89ABU
341 #define FLASH_OPT_KEY1             0x08192A3BU
342 #define FLASH_OPT_KEY2             0x4C5D6E7FU
343 /**
344   * @}
345   */
346 
347 /** @defgroup FLASH_Sectors FLASH Sectors
348   * @{
349   */
350 #define FLASH_SECTOR_0             0U       /*!< Sector Number 0   */
351 #define FLASH_SECTOR_1             1U       /*!< Sector Number 1   */
352 #define FLASH_SECTOR_2             2U       /*!< Sector Number 2   */
353 #define FLASH_SECTOR_3             3U       /*!< Sector Number 3   */
354 #define FLASH_SECTOR_4             4U       /*!< Sector Number 4   */
355 #define FLASH_SECTOR_5             5U       /*!< Sector Number 5   */
356 #define FLASH_SECTOR_6             6U       /*!< Sector Number 6   */
357 #define FLASH_SECTOR_7             7U       /*!< Sector Number 7   */
358 #if (FLASH_SECTOR_TOTAL == 128)
359 #define FLASH_SECTOR_8             8U       /*!< Sector Number 8   */
360 #define FLASH_SECTOR_9             9U       /*!< Sector Number 9   */
361 #define FLASH_SECTOR_10            10U      /*!< Sector Number 10  */
362 #define FLASH_SECTOR_11            11U      /*!< Sector Number 11  */
363 #define FLASH_SECTOR_12            12U      /*!< Sector Number 12  */
364 #define FLASH_SECTOR_13            13U      /*!< Sector Number 13  */
365 #define FLASH_SECTOR_14            14U      /*!< Sector Number 14  */
366 #define FLASH_SECTOR_15            15U      /*!< Sector Number 15  */
367 #define FLASH_SECTOR_16            16U      /*!< Sector Number 16  */
368 #define FLASH_SECTOR_17            17U      /*!< Sector Number 17  */
369 #define FLASH_SECTOR_18            18U      /*!< Sector Number 18  */
370 #define FLASH_SECTOR_19            19U      /*!< Sector Number 19  */
371 #define FLASH_SECTOR_20            20U      /*!< Sector Number 20  */
372 #define FLASH_SECTOR_21            21U      /*!< Sector Number 21  */
373 #define FLASH_SECTOR_22            22U      /*!< Sector Number 22  */
374 #define FLASH_SECTOR_23            23U      /*!< Sector Number 23  */
375 #define FLASH_SECTOR_24            24U      /*!< Sector Number 24  */
376 #define FLASH_SECTOR_25            25U      /*!< Sector Number 25  */
377 #define FLASH_SECTOR_26            26U      /*!< Sector Number 26  */
378 #define FLASH_SECTOR_27            27U      /*!< Sector Number 27  */
379 #define FLASH_SECTOR_28            28U      /*!< Sector Number 28  */
380 #define FLASH_SECTOR_29            29U      /*!< Sector Number 29  */
381 #define FLASH_SECTOR_30            30U      /*!< Sector Number 30  */
382 #define FLASH_SECTOR_31            31U      /*!< Sector Number 31  */
383 #define FLASH_SECTOR_32            32U      /*!< Sector Number 32  */
384 #define FLASH_SECTOR_33            33U      /*!< Sector Number 33  */
385 #define FLASH_SECTOR_34            34U      /*!< Sector Number 34  */
386 #define FLASH_SECTOR_35            35U      /*!< Sector Number 35  */
387 #define FLASH_SECTOR_36            36U      /*!< Sector Number 36  */
388 #define FLASH_SECTOR_37            37U      /*!< Sector Number 37  */
389 #define FLASH_SECTOR_38            38U      /*!< Sector Number 38  */
390 #define FLASH_SECTOR_39            39U      /*!< Sector Number 39  */
391 #define FLASH_SECTOR_40            40U      /*!< Sector Number 40  */
392 #define FLASH_SECTOR_41            41U      /*!< Sector Number 41  */
393 #define FLASH_SECTOR_42            42U      /*!< Sector Number 42  */
394 #define FLASH_SECTOR_43            43U      /*!< Sector Number 43  */
395 #define FLASH_SECTOR_44            44U      /*!< Sector Number 44  */
396 #define FLASH_SECTOR_45            45U      /*!< Sector Number 45  */
397 #define FLASH_SECTOR_46            46U      /*!< Sector Number 46  */
398 #define FLASH_SECTOR_47            47U      /*!< Sector Number 47  */
399 #define FLASH_SECTOR_48            48U      /*!< Sector Number 48  */
400 #define FLASH_SECTOR_49            49U      /*!< Sector Number 49  */
401 #define FLASH_SECTOR_50            50U      /*!< Sector Number 50  */
402 #define FLASH_SECTOR_51            51U      /*!< Sector Number 51  */
403 #define FLASH_SECTOR_52            52U      /*!< Sector Number 52  */
404 #define FLASH_SECTOR_53            53U      /*!< Sector Number 53  */
405 #define FLASH_SECTOR_54            54U      /*!< Sector Number 54  */
406 #define FLASH_SECTOR_55            55U      /*!< Sector Number 55  */
407 #define FLASH_SECTOR_56            56U      /*!< Sector Number 56  */
408 #define FLASH_SECTOR_57            57U      /*!< Sector Number 57  */
409 #define FLASH_SECTOR_58            58U      /*!< Sector Number 58  */
410 #define FLASH_SECTOR_59            59U      /*!< Sector Number 59  */
411 #define FLASH_SECTOR_60            60U      /*!< Sector Number 60  */
412 #define FLASH_SECTOR_61            61U      /*!< Sector Number 61  */
413 #define FLASH_SECTOR_62            62U      /*!< Sector Number 62  */
414 #define FLASH_SECTOR_63            63U      /*!< Sector Number 63  */
415 #define FLASH_SECTOR_64            64U      /*!< Sector Number 64  */
416 #define FLASH_SECTOR_65            65U      /*!< Sector Number 65  */
417 #define FLASH_SECTOR_66            66U      /*!< Sector Number 66  */
418 #define FLASH_SECTOR_67            67U      /*!< Sector Number 67  */
419 #define FLASH_SECTOR_68            68U      /*!< Sector Number 68  */
420 #define FLASH_SECTOR_69            69U      /*!< Sector Number 69  */
421 #define FLASH_SECTOR_70            70U      /*!< Sector Number 70  */
422 #define FLASH_SECTOR_71            71U      /*!< Sector Number 71  */
423 #define FLASH_SECTOR_72            72U      /*!< Sector Number 72  */
424 #define FLASH_SECTOR_73            73U      /*!< Sector Number 73  */
425 #define FLASH_SECTOR_74            74U      /*!< Sector Number 74  */
426 #define FLASH_SECTOR_75            75U      /*!< Sector Number 75  */
427 #define FLASH_SECTOR_76            76U      /*!< Sector Number 76  */
428 #define FLASH_SECTOR_77            77U      /*!< Sector Number 77  */
429 #define FLASH_SECTOR_78            78U      /*!< Sector Number 78  */
430 #define FLASH_SECTOR_79            79U      /*!< Sector Number 79  */
431 #define FLASH_SECTOR_80            80U      /*!< Sector Number 80  */
432 #define FLASH_SECTOR_81            81U      /*!< Sector Number 81  */
433 #define FLASH_SECTOR_82            82U      /*!< Sector Number 82  */
434 #define FLASH_SECTOR_83            83U      /*!< Sector Number 83  */
435 #define FLASH_SECTOR_84            84U      /*!< Sector Number 84  */
436 #define FLASH_SECTOR_85            85U      /*!< Sector Number 85  */
437 #define FLASH_SECTOR_86            86U      /*!< Sector Number 86  */
438 #define FLASH_SECTOR_87            87U      /*!< Sector Number 87  */
439 #define FLASH_SECTOR_88            88U      /*!< Sector Number 88  */
440 #define FLASH_SECTOR_89            89U      /*!< Sector Number 89  */
441 #define FLASH_SECTOR_90            90U      /*!< Sector Number 90  */
442 #define FLASH_SECTOR_91            91U      /*!< Sector Number 91  */
443 #define FLASH_SECTOR_92            92U      /*!< Sector Number 92  */
444 #define FLASH_SECTOR_93            93U      /*!< Sector Number 93  */
445 #define FLASH_SECTOR_94            94U      /*!< Sector Number 94  */
446 #define FLASH_SECTOR_95            95U      /*!< Sector Number 95  */
447 #define FLASH_SECTOR_96            96U      /*!< Sector Number 96  */
448 #define FLASH_SECTOR_97            97U      /*!< Sector Number 97  */
449 #define FLASH_SECTOR_98            98U      /*!< Sector Number 98  */
450 #define FLASH_SECTOR_99            99U      /*!< Sector Number 99  */
451 #define FLASH_SECTOR_100           100U     /*!< Sector Number 100 */
452 #define FLASH_SECTOR_101           101U     /*!< Sector Number 101 */
453 #define FLASH_SECTOR_102           102U     /*!< Sector Number 102 */
454 #define FLASH_SECTOR_103           103U     /*!< Sector Number 103 */
455 #define FLASH_SECTOR_104           104U     /*!< Sector Number 104 */
456 #define FLASH_SECTOR_105           105U     /*!< Sector Number 105 */
457 #define FLASH_SECTOR_106           106U     /*!< Sector Number 106 */
458 #define FLASH_SECTOR_107           107U     /*!< Sector Number 107 */
459 #define FLASH_SECTOR_108           108U     /*!< Sector Number 108 */
460 #define FLASH_SECTOR_109           109U     /*!< Sector Number 109 */
461 #define FLASH_SECTOR_110           110U     /*!< Sector Number 110 */
462 #define FLASH_SECTOR_111           111U     /*!< Sector Number 111 */
463 #define FLASH_SECTOR_112           112U     /*!< Sector Number 112 */
464 #define FLASH_SECTOR_113           113U     /*!< Sector Number 113 */
465 #define FLASH_SECTOR_114           114U     /*!< Sector Number 114 */
466 #define FLASH_SECTOR_115           115U     /*!< Sector Number 115 */
467 #define FLASH_SECTOR_116           116U     /*!< Sector Number 116 */
468 #define FLASH_SECTOR_117           117U     /*!< Sector Number 117 */
469 #define FLASH_SECTOR_118           118U     /*!< Sector Number 118 */
470 #define FLASH_SECTOR_119           119U     /*!< Sector Number 119 */
471 #define FLASH_SECTOR_120           120U     /*!< Sector Number 120 */
472 #define FLASH_SECTOR_121           121U     /*!< Sector Number 121 */
473 #define FLASH_SECTOR_122           122U     /*!< Sector Number 122 */
474 #define FLASH_SECTOR_123           123U     /*!< Sector Number 123 */
475 #define FLASH_SECTOR_124           124U     /*!< Sector Number 124 */
476 #define FLASH_SECTOR_125           125U     /*!< Sector Number 125 */
477 #define FLASH_SECTOR_126           126U     /*!< Sector Number 126 */
478 #define FLASH_SECTOR_127           127U     /*!< Sector Number 127 */
479 #endif /* FLASH_SECTOR_TOTAL == 128 */
480 /**
481   * @}
482   */
483 
484 /**
485   * @}
486   */
487 
488 /* Exported macro ------------------------------------------------------------*/
489 /** @defgroup FLASH_Exported_Macros FLASH Exported Macros
490   * @{
491   */
492 /**
493   * @brief  Set the FLASH Latency.
494   * @param  __LATENCY__: FLASH Latency
495   *         The value of this parameter depend on device used within the same series
496   * @retval none
497   */
498 #define __HAL_FLASH_SET_LATENCY(__LATENCY__) \
499                   MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(__LATENCY__))
500 
501 /**
502   * @brief  Get the FLASH Latency.
503   * @retval FLASH Latency
504   *          The value of this parameter depend on device used within the same series
505   */
506 #define __HAL_FLASH_GET_LATENCY()     (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY))
507 
508 /**
509   * @brief  Enable the specified FLASH interrupt.
510   * @param  __INTERRUPT__ : FLASH interrupt
511   *   In case of Bank 1 This parameter can be any combination of the following values:
512   *     @arg FLASH_IT_EOP_BANK1       : End of FLASH Bank 1 Operation Interrupt source
513   *     @arg FLASH_IT_WRPERR_BANK1    : Write Protection Error on Bank 1 Interrupt source
514   *     @arg FLASH_IT_PGSERR_BANK1    : Program Sequence Error on Bank 1 Interrupt source
515   *     @arg FLASH_IT_STRBERR_BANK1   : Strobe Error on Bank 1 Interrupt source
516   *     @arg FLASH_IT_INCERR_BANK1    : Inconsistency Error on Bank 1 Interrupt source
517   *     @arg FLASH_IT_OPERR_BANK1     : Operation Error on Bank 1 Interrupt source
518   *     @arg FLASH_IT_RDPERR_BANK1    : Read protection Error on Bank 1 Interrupt source
519   *     @arg FLASH_IT_RDSERR_BANK1    : Read secure Error on Bank 1 Interrupt source
520   *     @arg FLASH_IT_SNECCERR_BANK1  : Single ECC Error Correction on Bank 1 Interrupt source
521   *     @arg FLASH_IT_DBECCERR_BANK1  : Double Detection ECC Error on Bank 1 Interrupt source
522   *     @arg FLASH_IT_CRCEND_BANK1    : CRC End on Bank 1 Interrupt source
523   *     @arg FLASH_IT_CRCRDERR_BANK1  : CRC Read error on Bank 1 Interrupt source
524   *     @arg FLASH_IT_ALL_BANK1       : All Bank 1 Interrupt sources
525   *
526   *   In case of Bank 2, this parameter can be any combination of the following values:
527   *     @arg FLASH_IT_EOP_BANK2       : End of FLASH Bank 2 Operation Interrupt source
528   *     @arg FLASH_IT_WRPERR_BANK2    : Write Protection Error on Bank 2 Interrupt source
529   *     @arg FLASH_IT_PGSERR_BANK2    : Program Sequence Error on Bank 2 Interrupt source
530   *     @arg FLASH_IT_STRBERR_BANK2   : Strobe Error on Bank 2 Interrupt source
531   *     @arg FLASH_IT_INCERR_BANK2    : Inconsistency Error on Bank 2 Interrupt source
532   *     @arg FLASH_IT_OPERR_BANK2     : Operation Error on Bank 2 Interrupt source
533   *     @arg FLASH_IT_RDPERR_BANK2    : Read protection Error on Bank 2 Interrupt source
534   *     @arg FLASH_IT_RDSERR_BANK2    : Read secure Error on Bank 2 Interrupt source
535   *     @arg FLASH_IT_SNECCERR_BANK2  : Single ECC Error Correction on Bank 2 Interrupt source
536   *     @arg FLASH_IT_DBECCERR_BANK2  : Double Detection ECC Error on Bank 2 Interrupt source
537   *     @arg FLASH_IT_CRCEND_BANK2    : CRC End on Bank 2 Interrupt source
538   *     @arg FLASH_IT_CRCRDERR_BANK2  : CRC Read error on Bank 2 Interrupt source
539   *     @arg FLASH_IT_ALL_BANK2       : All Bank 2 Interrupt sources
540   * @retval none
541   */
542 
543 #define __HAL_FLASH_ENABLE_IT_BANK1(__INTERRUPT__)      (FLASH->CR1 |= (__INTERRUPT__))
544 
545 #define __HAL_FLASH_ENABLE_IT_BANK2(__INTERRUPT__)      (FLASH->CR2 |= ((__INTERRUPT__) & 0x7FFFFFFFU))
546 
547 #if defined (DUAL_BANK)
548 #define __HAL_FLASH_ENABLE_IT(__INTERRUPT__)    (IS_FLASH_IT_BANK1(__INTERRUPT__) ? \
549                                                  __HAL_FLASH_ENABLE_IT_BANK1(__INTERRUPT__) : \
550                                                  __HAL_FLASH_ENABLE_IT_BANK2(__INTERRUPT__))
551 #else
552 #define __HAL_FLASH_ENABLE_IT(__INTERRUPT__)    __HAL_FLASH_ENABLE_IT_BANK1(__INTERRUPT__)
553 #endif /* DUAL_BANK */
554 
555 
556 /**
557   * @brief  Disable the specified FLASH interrupt.
558   * @param  __INTERRUPT__ : FLASH interrupt
559   *   In case of Bank 1 This parameter can be any combination of the following values:
560   *     @arg FLASH_IT_EOP_BANK1       : End of FLASH Bank 1 Operation Interrupt source
561   *     @arg FLASH_IT_WRPERR_BANK1    : Write Protection Error on Bank 1 Interrupt source
562   *     @arg FLASH_IT_PGSERR_BANK1    : Program Sequence Error on Bank 1 Interrupt source
563   *     @arg FLASH_IT_STRBERR_BANK1   : Strobe Error on Bank 1 Interrupt source
564   *     @arg FLASH_IT_INCERR_BANK1    : Inconsistency Error on Bank 1 Interrupt source
565   *     @arg FLASH_IT_OPERR_BANK1     : Operation Error on Bank 1 Interrupt source
566   *     @arg FLASH_IT_RDPERR_BANK1    : Read protection Error on Bank 1 Interrupt source
567   *     @arg FLASH_IT_RDSERR_BANK1    : Read secure Error on Bank 1 Interrupt source
568   *     @arg FLASH_IT_SNECCERR_BANK1  : Single ECC Error Correction on Bank 1 Interrupt source
569   *     @arg FLASH_IT_DBECCERR_BANK1  : Double Detection ECC Error on Bank 1 Interrupt source
570   *     @arg FLASH_IT_CRCEND_BANK1    : CRC End on Bank 1 Interrupt source
571   *     @arg FLASH_IT_CRCRDERR_BANK1  : CRC Read error on Bank 1 Interrupt source
572   *     @arg FLASH_IT_ALL_BANK1       : All Bank 1 Interrupt sources
573   *
574   *   In case of Bank 2, this parameter can be any combination of the following values:
575   *     @arg FLASH_IT_EOP_BANK2       : End of FLASH Bank 2 Operation Interrupt source
576   *     @arg FLASH_IT_WRPERR_BANK2    : Write Protection Error on Bank 2 Interrupt source
577   *     @arg FLASH_IT_PGSERR_BANK2    : Program Sequence Error on Bank 2 Interrupt source
578   *     @arg FLASH_IT_STRBERR_BANK2   : Strobe Error on Bank 2 Interrupt source
579   *     @arg FLASH_IT_INCERR_BANK2    : Inconsistency Error on Bank 2 Interrupt source
580   *     @arg FLASH_IT_OPERR_BANK2     : Operation Error on Bank 2 Interrupt source
581   *     @arg FLASH_IT_RDPERR_BANK2    : Read protection Error on Bank 2 Interrupt source
582   *     @arg FLASH_IT_RDSERR_BANK2    : Read secure Error on Bank 2 Interrupt source
583   *     @arg FLASH_IT_SNECCERR_BANK2  : Single ECC Error Correction on Bank 2 Interrupt source
584   *     @arg FLASH_IT_DBECCERR_BANK2  : Double Detection ECC Error on Bank 2 Interrupt source
585   *     @arg FLASH_IT_CRCEND_BANK2    : CRC End on Bank 2 Interrupt source
586   *     @arg FLASH_IT_CRCRDERR_BANK2  : CRC Read error on Bank 2 Interrupt source
587   *     @arg FLASH_IT_ALL_BANK2       : All Bank 2 Interrupt sources
588   * @retval none
589   */
590 
591 #define __HAL_FLASH_DISABLE_IT_BANK1(__INTERRUPT__)  (FLASH->CR1 &= ~(uint32_t)(__INTERRUPT__))
592 
593 #define __HAL_FLASH_DISABLE_IT_BANK2(__INTERRUPT__)  (FLASH->CR2 &= ~(uint32_t)((__INTERRUPT__) & 0x7FFFFFFFU))
594 
595 #if defined (DUAL_BANK)
596 #define __HAL_FLASH_DISABLE_IT(__INTERRUPT__)  (IS_FLASH_IT_BANK1(__INTERRUPT__) ? \
597                                                 __HAL_FLASH_DISABLE_IT_BANK1(__INTERRUPT__) : \
598                                                 __HAL_FLASH_DISABLE_IT_BANK2(__INTERRUPT__))
599 #else
600 #define __HAL_FLASH_DISABLE_IT(__INTERRUPT__)  __HAL_FLASH_DISABLE_IT_BANK1(__INTERRUPT__)
601 #endif /* DUAL_BANK */
602 
603 
604 /**
605   * @brief  Checks whether the specified FLASH flag is set or not.
606   * @param  __FLAG__: specifies the FLASH flag to check.
607   *   In case of Bank 1 This parameter can be one of the following values :
608   *     @arg FLASH_FLAG_BSY_BANK1      : FLASH Bank 1 Busy flag
609   *     @arg FLASH_FLAG_WBNE_BANK1     : Write Buffer Not Empty on Bank 1 flag
610   *     @arg FLASH_FLAG_QW_BANK1       : Wait Queue on Bank 1 flag
611   *     @arg FLASH_FLAG_CRC_BUSY_BANK1 : CRC module is working on Bank 1 flag
612   *     @arg FLASH_FLAG_EOP_BANK1      : End Of Program on Bank 1 flag
613   *     @arg FLASH_FLAG_WRPERR_BANK1   : Write Protection Error on Bank 1 flag
614   *     @arg FLASH_FLAG_PGSERR_BANK1   : Program Sequence Error on Bank 1 flag
615   *     @arg FLASH_FLAG_STRBER_BANK1   : Program Alignment Error on Bank 1 flag
616   *     @arg FLASH_FLAG_INCERR_BANK1   : Inconsistency Error on Bank 1 flag
617   *     @arg FLASH_FLAG_OPERR_BANK1    : Operation Error on Bank 1 flag
618   *     @arg FLASH_FLAG_RDPERR_BANK1   : Read Protection Error on Bank 1 flag
619   *     @arg FLASH_FLAG_RDSERR_BANK1   : Read secure  Error on Bank 1 flag
620   *     @arg FLASH_FLAG_SNECCE_BANK1   : Single ECC Error Correction on Bank 1 flag
621   *     @arg FLASH_FLAG_DBECCE_BANK1   : Double Detection ECC Error on Bank 1 flag
622   *     @arg FLASH_FLAG_CRCEND_BANK1   : CRC End on Bank 1 flag
623   *     @arg FLASH_FLAG_CRCRDERR_BANK1 : CRC Read error on Bank 1 flag
624   *
625   *   In case of Bank 2 This parameter can be one of the following values :
626   *     @arg FLASH_FLAG_BSY_BANK2      : FLASH Bank 2 Busy flag
627   *     @arg FLASH_FLAG_WBNE_BANK2     : Write Buffer Not Empty on Bank 2 flag
628   *     @arg FLASH_FLAG_QW_BANK2       : Wait Queue on Bank 2 flag
629   *     @arg FLASH_FLAG_CRC_BUSY_BANK2 : CRC module is working on Bank 2 flag
630   *     @arg FLASH_FLAG_EOP_BANK2      : End Of Program on Bank 2 flag
631   *     @arg FLASH_FLAG_WRPERR_BANK2   : Write Protection Error on Bank 2 flag
632   *     @arg FLASH_FLAG_PGSERR_BANK2   : Program Sequence Error on Bank 2 flag
633   *     @arg FLASH_FLAG_STRBER_BANK2   : Program Alignment Error on Bank 2 flag
634   *     @arg FLASH_FLAG_INCERR_BANK2   : Inconsistency Error on Bank 2 flag
635   *     @arg FLASH_FLAG_OPERR_BANK2    : Operation Error on Bank 2 flag
636   *     @arg FLASH_FLAG_RDPERR_BANK2   : Read Protection Error on Bank 2 flag
637   *     @arg FLASH_FLAG_RDSERR_BANK2   : Read secure  Error on Bank 2 flag
638   *     @arg FLASH_FLAG_SNECCE_BANK2   : Single ECC Error Correction on Bank 2 flag
639   *     @arg FLASH_FLAG_DBECCE_BANK2   : Double Detection ECC Error on Bank 2 flag
640   *     @arg FLASH_FLAG_CRCEND_BANK2   : CRC End on Bank 2 flag
641   *     @arg FLASH_FLAG_CRCRDERR_BANK2 : CRC Read error on Bank 2 flag
642   * @retval The new state of FLASH_FLAG (SET or RESET).
643   */
644 #define __HAL_FLASH_GET_FLAG_BANK1(__FLAG__)     (READ_BIT(FLASH->SR1, (__FLAG__)) == (__FLAG__))
645 
646 #define __HAL_FLASH_GET_FLAG_BANK2(__FLAG__)     (READ_BIT(FLASH->SR2, ((__FLAG__) & 0x7FFFFFFFU)) == (((__FLAG__) & 0x7FFFFFFFU)))
647 
648 #if defined (DUAL_BANK)
649 #define __HAL_FLASH_GET_FLAG(__FLAG__)           (IS_FLASH_FLAG_BANK1(__FLAG__) ?  __HAL_FLASH_GET_FLAG_BANK1(__FLAG__) : \
650                                                   __HAL_FLASH_GET_FLAG_BANK2(__FLAG__))
651 #else
652 #define __HAL_FLASH_GET_FLAG(__FLAG__)           __HAL_FLASH_GET_FLAG_BANK1(__FLAG__)
653 #endif /* DUAL_BANK */
654 
655 
656 /**
657   * @brief  Clear the specified FLASH flag.
658   * @param  __FLAG__: specifies the FLASH flags to clear.
659   *    In case of Bank 1, this parameter can be any combination of the following values:
660   *     @arg FLASH_FLAG_EOP_BANK1        : End Of Program on Bank 1 flag
661   *     @arg FLASH_FLAG_WRPERR_BANK1     : Write Protection Error on Bank 1 flag
662   *     @arg FLASH_FLAG_PGSERR_BANK1     : Program Sequence Error on Bank 1 flag
663   *     @arg FLASH_FLAG_STRBER_BANK1     : Program Alignment Error on Bank 1 flag
664   *     @arg FLASH_FLAG_INCERR_BANK1     : Inconsistency Error on Bank 1 flag
665   *     @arg FLASH_FLAG_OPERR_BANK1      : Operation Error on Bank 1 flag
666   *     @arg FLASH_FLAG_RDPERR_BANK1     : Read Protection Error on Bank 1 flag
667   *     @arg FLASH_FLAG_RDSERR_BANK1     : Read secure  Error on Bank 1 flag
668   *     @arg FLASH_FLAG_SNECCE_BANK1     : Single ECC Error Correction on Bank 1 flag
669   *     @arg FLASH_FLAG_DBECCE_BANK1     : Double Detection ECC Error on Bank 1 flag
670   *     @arg FLASH_FLAG_CRCEND_BANK1     : CRC End on Bank 1 flag
671   *     @arg FLASH_FLAG_CRCRDERR_BANK1   : CRC Read error on Bank 1 flag
672   *     @arg FLASH_FLAG_ALL_ERRORS_BANK1 : All Bank 1 error flags
673   *     @arg FLASH_FLAG_ALL_BANK1        : All Bank 1 flags
674   *
675   *   In case of Bank 2, this parameter can be any combination of the following values :
676   *     @arg FLASH_FLAG_EOP_BANK2        : End Of Program on Bank 2 flag
677   *     @arg FLASH_FLAG_WRPERR_BANK2     : Write Protection Error on Bank 2 flag
678   *     @arg FLASH_FLAG_PGSERR_BANK2     : Program Sequence Error on Bank 2 flag
679   *     @arg FLASH_FLAG_STRBER_BANK2     : Program Alignment Error on Bank 2 flag
680   *     @arg FLASH_FLAG_INCERR_BANK2     : Inconsistency Error on Bank 2 flag
681   *     @arg FLASH_FLAG_OPERR_BANK2      : Operation Error on Bank 2 flag
682   *     @arg FLASH_FLAG_RDPERR_BANK2     : Read Protection Error on Bank 2 flag
683   *     @arg FLASH_FLAG_RDSERR_BANK2     : Read secure  Error on Bank 2 flag
684   *     @arg FLASH_FLAG_SNECCE_BANK2     : Single ECC Error Correction on Bank 2 flag
685   *     @arg FLASH_FLAG_DBECCE_BANK2     : Double Detection ECC Error on Bank 2 flag
686   *     @arg FLASH_FLAG_CRCEND_BANK2     : CRC End on Bank 2 flag
687   *     @arg FLASH_FLAG_CRCRDERR_BANK2   : CRC Read error on Bank 2 flag
688   *     @arg FLASH_FLAG_ALL_ERRORS_BANK2 : All Bank 2 error flags
689   *     @arg FLASH_FLAG_ALL_BANK2        : All Bank 2 flags
690   * @retval none
691   */
692 
693 #define __HAL_FLASH_CLEAR_FLAG_BANK1(__FLAG__)    WRITE_REG(FLASH->CCR1, (__FLAG__))
694 
695 #define __HAL_FLASH_CLEAR_FLAG_BANK2(__FLAG__)    WRITE_REG(FLASH->CCR2, ((__FLAG__) & 0x7FFFFFFFU))
696 
697 #if defined (DUAL_BANK)
698 #define __HAL_FLASH_CLEAR_FLAG(__FLAG__)         (IS_FLASH_FLAG_BANK1(__FLAG__) ?  __HAL_FLASH_CLEAR_FLAG_BANK1(__FLAG__) : \
699                                                   __HAL_FLASH_CLEAR_FLAG_BANK2(__FLAG__))
700 #else
701 #define __HAL_FLASH_CLEAR_FLAG(__FLAG__)         __HAL_FLASH_CLEAR_FLAG_BANK1(__FLAG__)
702 #endif /* DUAL_BANK */
703 
704 /**
705   * @}
706   */
707 
708 /* Include FLASH HAL Extension module */
709 #include "stm32h7xx_hal_flash_ex.h"
710 
711 /* Exported functions --------------------------------------------------------*/
712 /** @addtogroup FLASH_Exported_Functions
713   * @{
714   */
715 /** @addtogroup FLASH_Exported_Functions_Group1
716   * @{
717   */
718 /* Program operation functions  ***********************************************/
719 HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t FlashAddress, uint32_t DataAddress);
720 HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t FlashAddress, uint32_t DataAddress);
721 /* FLASH IRQ handler method */
722 void HAL_FLASH_IRQHandler(void);
723 /* Callbacks in non blocking modes */
724 void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue);
725 void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue);
726 /**
727   * @}
728   */
729 
730 /** @addtogroup FLASH_Exported_Functions_Group2
731   * @{
732   */
733 /* Peripheral Control functions  **********************************************/
734 HAL_StatusTypeDef HAL_FLASH_Unlock(void);
735 HAL_StatusTypeDef HAL_FLASH_Lock(void);
736 HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void);
737 HAL_StatusTypeDef HAL_FLASH_OB_Lock(void);
738 /* Option bytes control */
739 HAL_StatusTypeDef HAL_FLASH_OB_Launch(void);
740 /**
741   * @}
742   */
743 
744 /** @addtogroup FLASH_Exported_Functions_Group3
745   * @{
746   */
747 /* Peripheral State functions  ************************************************/
748 uint32_t HAL_FLASH_GetError(void);
749 /**
750   * @}
751   */
752 
753 /**
754   * @}
755   */
756 /* Private types -------------------------------------------------------------*/
757 /* Private variables ---------------------------------------------------------*/
758 /** @defgroup FLASH_Private_Variables FLASH Private Variables
759   * @{
760   */
761 extern FLASH_ProcessTypeDef pFlash;
762 /**
763   * @}
764   */
765 /* Private constants ---------------------------------------------------------*/
766 /** @defgroup FLASH_Private_Constants FLASH Private Constants
767   * @{
768   */
769 
770 /**
771   * @}
772   */
773 
774 /* Private macros ------------------------------------------------------------*/
775 /** @defgroup FLASH_Private_Macros FLASH Private Macros
776   * @{
777   */
778 
779 #if defined (FLASH_OPTCR_PG_OTP)
780 #define IS_FLASH_TYPEPROGRAM(VALUE)      (((VALUE) == FLASH_TYPEPROGRAM_FLASHWORD) || \
781                                           ((VALUE) == FLASH_TYPEPROGRAM_OTPWORD))
782 #else
783 #define IS_FLASH_TYPEPROGRAM(VALUE)      ((VALUE) == FLASH_TYPEPROGRAM_FLASHWORD)
784 #endif /* FLASH_OPTCR_PG_OTP */
785 
786 #define IS_FLASH_IT_BANK1(IT)            (((IT) & FLASH_IT_ALL_BANK1) == (IT))
787 #if defined (DUAL_BANK)
788 #define IS_FLASH_IT_BANK2(IT)            (((IT) & FLASH_IT_ALL_BANK2) == (IT))
789 #endif /* DUAL_BANK */
790 
791 #define IS_FLASH_FLAG_BANK1(FLAG)        (((FLAG) & FLASH_FLAG_ALL_BANK1) == (FLAG))
792 #if defined (DUAL_BANK)
793 #define IS_FLASH_FLAG_BANK2(FLAG)        (((FLAG) & FLASH_FLAG_ALL_BANK2) == (FLAG))
794 #endif /* DUAL_BANK */
795 
796 #if defined (DUAL_BANK)
797 #define IS_FLASH_PROGRAM_ADDRESS_BANK1(ADDRESS) (((ADDRESS) >= FLASH_BANK1_BASE) && ((ADDRESS) < FLASH_BANK2_BASE))
798 #define IS_FLASH_PROGRAM_ADDRESS_BANK2(ADDRESS) (((ADDRESS) >= FLASH_BANK2_BASE ) && ((ADDRESS) <= FLASH_END))
799 #else
800 #define IS_FLASH_PROGRAM_ADDRESS_BANK1(ADDRESS) (((ADDRESS) >= FLASH_BANK1_BASE) && ((ADDRESS) <= FLASH_END))
801 #endif /* DUAL_BANK */
802 
803 #if defined (DUAL_BANK)
804 #if defined (FLASH_OPTCR_PG_OTP)
805 #define IS_FLASH_PROGRAM_ADDRESS_OTP(ADDRESS)   (((ADDRESS) >= 0x08FFF000U) && ((ADDRESS) <= 0x08FFF3FFU))
806 #define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)       (IS_FLASH_PROGRAM_ADDRESS_BANK1(ADDRESS) || \
807                                                  IS_FLASH_PROGRAM_ADDRESS_BANK2(ADDRESS) || \
808                                                  IS_FLASH_PROGRAM_ADDRESS_OTP(ADDRESS))
809 #else
810 #define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)       (IS_FLASH_PROGRAM_ADDRESS_BANK1(ADDRESS) || \
811                                                  IS_FLASH_PROGRAM_ADDRESS_BANK2(ADDRESS))
812 #endif /* FLASH_OPTCR_PG_OTP */
813 #else
814 #if defined (FLASH_OPTCR_PG_OTP)
815 #define IS_FLASH_PROGRAM_ADDRESS_OTP(ADDRESS)   (((ADDRESS) >= 0x08FFF000U) && ((ADDRESS) <= 0x08FFF3FFU))
816 #define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)       (IS_FLASH_PROGRAM_ADDRESS_BANK1(ADDRESS) || \
817                                                  IS_FLASH_PROGRAM_ADDRESS_OTP(ADDRESS))
818 #else
819 #define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)       (IS_FLASH_PROGRAM_ADDRESS_BANK1(ADDRESS))
820 #endif /* FLASH_OPTCR_PG_OTP */
821 #endif /* DUAL_BANK */
822 
823 #define IS_BOOT_ADDRESS(ADDRESS)         ((ADDRESS) <= (0x3FFF0000U))
824 
825 #if defined (DUAL_BANK)
826 #define IS_FLASH_BANK(BANK)              (((BANK) == FLASH_BANK_1)  || \
827                                           ((BANK) == FLASH_BANK_2)  || \
828                                           ((BANK) == FLASH_BANK_BOTH))
829 #define IS_FLASH_BANK_EXCLUSIVE(BANK)    (((BANK) == FLASH_BANK_1)  || \
830                                           ((BANK) == FLASH_BANK_2))
831 #else
832 #define IS_FLASH_BANK(BANK)              ((BANK) == FLASH_BANK_1)
833 #define IS_FLASH_BANK_EXCLUSIVE(BANK)    ((BANK) == FLASH_BANK_1)
834 #endif /* DUAL_BANK */
835 
836 /**
837   * @}
838   */
839 /* Private functions ---------------------------------------------------------*/
840 /** @defgroup FLASH_Private_Functions FLASH Private functions
841   * @{
842   */
843 HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout, uint32_t Bank);
844 HAL_StatusTypeDef FLASH_OB_WaitForLastOperation(uint32_t Timeout);
845 HAL_StatusTypeDef FLASH_CRC_WaitForLastOperation(uint32_t Timeout, uint32_t Bank);
846 /**
847   * @}
848   */
849 
850 /**
851   * @}
852   */
853 
854 /**
855   * @}
856   */
857 
858 #ifdef __cplusplus
859 }
860 #endif
861 
862 #endif /* STM32H7xx_HAL_FLASH_H */
863 
864 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
865