1 /** 2 ****************************************************************************** 3 * @file stm32f7xx_hal_flash.h 4 * @author MCD Application Team 5 * @brief Header file of FLASH HAL module. 6 ****************************************************************************** 7 * @attention 8 * 9 * <h2><center>© 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 __STM32F7xx_HAL_FLASH_H 22 #define __STM32F7xx_HAL_FLASH_H 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 /* Includes ------------------------------------------------------------------*/ 29 #include "stm32f7xx_hal_def.h" 30 31 /** @addtogroup STM32F7xx_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, 51 FLASH_PROC_MASSERASE, 52 FLASH_PROC_PROGRAM 53 } FLASH_ProcedureTypeDef; 54 55 56 /** 57 * @brief FLASH handle Structure definition 58 */ 59 typedef struct 60 { 61 __IO FLASH_ProcedureTypeDef ProcedureOnGoing; /* Internal variable to indicate which procedure is ongoing or not in IT context */ 62 63 __IO uint32_t NbSectorsToErase; /* Internal variable to save the remaining sectors to erase in IT context */ 64 65 __IO uint8_t VoltageForErase; /* Internal variable to provide voltage range selected by user in IT context */ 66 67 __IO uint32_t Sector; /* Internal variable to define the current sector which is erasing */ 68 69 __IO uint32_t Address; /* Internal variable to save address selected for program */ 70 71 HAL_LockTypeDef Lock; /* FLASH locking object */ 72 73 __IO uint32_t ErrorCode; /* FLASH error code */ 74 75 }FLASH_ProcessTypeDef; 76 77 /** 78 * @} 79 */ 80 81 /* Exported constants --------------------------------------------------------*/ 82 /** @defgroup FLASH_Exported_Constants FLASH Exported Constants 83 * @{ 84 */ 85 86 /** @defgroup FLASH_Error_Code FLASH Error Code 87 * @brief FLASH Error Code 88 * @{ 89 */ 90 #define HAL_FLASH_ERROR_NONE ((uint32_t)0x00000000U) /*!< No error */ 91 #define HAL_FLASH_ERROR_ERS ((uint32_t)0x00000002U) /*!< Programming Sequence error */ 92 #define HAL_FLASH_ERROR_PGP ((uint32_t)0x00000004U) /*!< Programming Parallelism error */ 93 #define HAL_FLASH_ERROR_PGA ((uint32_t)0x00000008U) /*!< Programming Alignment error */ 94 #define HAL_FLASH_ERROR_WRP ((uint32_t)0x00000010U) /*!< Write protection error */ 95 #define HAL_FLASH_ERROR_OPERATION ((uint32_t)0x00000020U) /*!< Operation Error */ 96 #define HAL_FLASH_ERROR_RD ((uint32_t)0x00000040U) /*!< Read Protection Error */ 97 /** 98 * @} 99 */ 100 101 /** @defgroup FLASH_Type_Program FLASH Type Program 102 * @{ 103 */ 104 #define FLASH_TYPEPROGRAM_BYTE ((uint32_t)0x00U) /*!< Program byte (8-bit) at a specified address */ 105 #define FLASH_TYPEPROGRAM_HALFWORD ((uint32_t)0x01U) /*!< Program a half-word (16-bit) at a specified address */ 106 #define FLASH_TYPEPROGRAM_WORD ((uint32_t)0x02U) /*!< Program a word (32-bit) at a specified address */ 107 #define FLASH_TYPEPROGRAM_DOUBLEWORD ((uint32_t)0x03U) /*!< Program a double word (64-bit) at a specified address */ 108 /** 109 * @} 110 */ 111 112 /** @defgroup FLASH_Flag_definition FLASH Flag definition 113 * @brief Flag definition 114 * @{ 115 */ 116 #define FLASH_FLAG_EOP FLASH_SR_EOP /*!< FLASH End of Operation flag */ 117 #define FLASH_FLAG_OPERR FLASH_SR_OPERR /*!< FLASH operation Error flag */ 118 #define FLASH_FLAG_WRPERR FLASH_SR_WRPERR /*!< FLASH Write protected error flag */ 119 #define FLASH_FLAG_PGAERR FLASH_SR_PGAERR /*!< FLASH Programming Alignment error flag */ 120 #define FLASH_FLAG_PGPERR FLASH_SR_PGPERR /*!< FLASH Programming Parallelism error flag */ 121 #define FLASH_FLAG_ERSERR FLASH_SR_ERSERR /*!< FLASH Erasing Sequence error flag */ 122 #define FLASH_FLAG_BSY FLASH_SR_BSY /*!< FLASH Busy flag */ 123 124 #if defined (FLASH_OPTCR2_PCROP) 125 #define FLASH_FLAG_RDERR FLASH_SR_RDERR /*!< FLASH Read protection error flag */ 126 #define FLASH_FLAG_ALL_ERRORS (FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \ 127 FLASH_FLAG_PGPERR | FLASH_FLAG_ERSERR | FLASH_FLAG_RDERR) 128 #else 129 #define FLASH_FLAG_ALL_ERRORS (FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \ 130 FLASH_FLAG_PGPERR | FLASH_FLAG_ERSERR) 131 #endif /* FLASH_OPTCR2_PCROP */ 132 /** 133 * @} 134 */ 135 136 /** @defgroup FLASH_Interrupt_definition FLASH Interrupt definition 137 * @brief FLASH Interrupt definition 138 * @{ 139 */ 140 #define FLASH_IT_EOP FLASH_CR_EOPIE /*!< End of FLASH Operation Interrupt source */ 141 #define FLASH_IT_ERR ((uint32_t)0x02000000U) /*!< Error Interrupt source */ 142 /** 143 * @} 144 */ 145 146 /** @defgroup FLASH_Program_Parallelism FLASH Program Parallelism 147 * @{ 148 */ 149 #define FLASH_PSIZE_BYTE ((uint32_t)0x00000000U) 150 #define FLASH_PSIZE_HALF_WORD ((uint32_t)FLASH_CR_PSIZE_0) 151 #define FLASH_PSIZE_WORD ((uint32_t)FLASH_CR_PSIZE_1) 152 #define FLASH_PSIZE_DOUBLE_WORD ((uint32_t)FLASH_CR_PSIZE) 153 #define CR_PSIZE_MASK ((uint32_t)0xFFFFFCFFU) 154 /** 155 * @} 156 */ 157 158 /** @defgroup FLASH_Keys FLASH Keys 159 * @{ 160 */ 161 #define FLASH_KEY1 ((uint32_t)0x45670123U) 162 #define FLASH_KEY2 ((uint32_t)0xCDEF89ABU) 163 #define FLASH_OPT_KEY1 ((uint32_t)0x08192A3BU) 164 #define FLASH_OPT_KEY2 ((uint32_t)0x4C5D6E7FU) 165 /** 166 * @} 167 */ 168 169 /** @defgroup FLASH_Sectors FLASH Sectors 170 * @{ 171 */ 172 #if (FLASH_SECTOR_TOTAL == 2) 173 #define FLASH_SECTOR_0 ((uint32_t)0U) /*!< Sector Number 0 */ 174 #define FLASH_SECTOR_1 ((uint32_t)1U) /*!< Sector Number 1 */ 175 #elif (FLASH_SECTOR_TOTAL == 4) 176 #define FLASH_SECTOR_0 ((uint32_t)0U) /*!< Sector Number 0 */ 177 #define FLASH_SECTOR_1 ((uint32_t)1U) /*!< Sector Number 1 */ 178 #define FLASH_SECTOR_2 ((uint32_t)2U) /*!< Sector Number 2 */ 179 #define FLASH_SECTOR_3 ((uint32_t)3U) /*!< Sector Number 3 */ 180 #else 181 #define FLASH_SECTOR_0 ((uint32_t)0U) /*!< Sector Number 0 */ 182 #define FLASH_SECTOR_1 ((uint32_t)1U) /*!< Sector Number 1 */ 183 #define FLASH_SECTOR_2 ((uint32_t)2U) /*!< Sector Number 2 */ 184 #define FLASH_SECTOR_3 ((uint32_t)3U) /*!< Sector Number 3 */ 185 #define FLASH_SECTOR_4 ((uint32_t)4U) /*!< Sector Number 4 */ 186 #define FLASH_SECTOR_5 ((uint32_t)5U) /*!< Sector Number 5 */ 187 #define FLASH_SECTOR_6 ((uint32_t)6U) /*!< Sector Number 6 */ 188 #define FLASH_SECTOR_7 ((uint32_t)7U) /*!< Sector Number 7 */ 189 #endif /* FLASH_SECTOR_TOTAL */ 190 /** 191 * @} 192 */ 193 194 /** 195 * @} 196 */ 197 198 /* Exported macro ------------------------------------------------------------*/ 199 /** @defgroup FLASH_Exported_Macros FLASH Exported Macros 200 * @{ 201 */ 202 /** 203 * @brief Set the FLASH Latency. 204 * @param __LATENCY__ FLASH Latency 205 * The value of this parameter depend on device used within the same series 206 * @retval none 207 */ 208 #define __HAL_FLASH_SET_LATENCY(__LATENCY__) \ 209 MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(__LATENCY__)) 210 211 /** 212 * @brief Get the FLASH Latency. 213 * @retval FLASH Latency 214 * The value of this parameter depend on device used within the same series 215 */ 216 #define __HAL_FLASH_GET_LATENCY() (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)) 217 218 /** 219 * @brief Enable the FLASH prefetch buffer. 220 * @retval none 221 */ 222 #define __HAL_FLASH_PREFETCH_BUFFER_ENABLE() (FLASH->ACR |= FLASH_ACR_PRFTEN) 223 224 /** 225 * @brief Disable the FLASH prefetch buffer. 226 * @retval none 227 */ 228 #define __HAL_FLASH_PREFETCH_BUFFER_DISABLE() (FLASH->ACR &= (~FLASH_ACR_PRFTEN)) 229 230 /** 231 * @brief Enable the FLASH Adaptive Real-Time memory accelerator. 232 * @note The ART accelerator is available only for flash access on ITCM interface. 233 * @retval none 234 */ 235 #define __HAL_FLASH_ART_ENABLE() SET_BIT(FLASH->ACR, FLASH_ACR_ARTEN) 236 237 /** 238 * @brief Disable the FLASH Adaptive Real-Time memory accelerator. 239 * @retval none 240 */ 241 #define __HAL_FLASH_ART_DISABLE() CLEAR_BIT(FLASH->ACR, FLASH_ACR_ARTEN) 242 243 /** 244 * @brief Resets the FLASH Adaptive Real-Time memory accelerator. 245 * @note This function must be used only when the Adaptive Real-Time memory accelerator 246 * is disabled. 247 * @retval None 248 */ 249 #define __HAL_FLASH_ART_RESET() (FLASH->ACR |= FLASH_ACR_ARTRST) 250 251 /** 252 * @brief Enable the specified FLASH interrupt. 253 * @param __INTERRUPT__ FLASH interrupt 254 * This parameter can be any combination of the following values: 255 * @arg FLASH_IT_EOP: End of FLASH Operation Interrupt 256 * @arg FLASH_IT_ERR: Error Interrupt 257 * @retval none 258 */ 259 #define __HAL_FLASH_ENABLE_IT(__INTERRUPT__) (FLASH->CR |= (__INTERRUPT__)) 260 261 /** 262 * @brief Disable the specified FLASH interrupt. 263 * @param __INTERRUPT__ FLASH interrupt 264 * This parameter can be any combination of the following values: 265 * @arg FLASH_IT_EOP: End of FLASH Operation Interrupt 266 * @arg FLASH_IT_ERR: Error Interrupt 267 * @retval none 268 */ 269 #define __HAL_FLASH_DISABLE_IT(__INTERRUPT__) (FLASH->CR &= ~(uint32_t)(__INTERRUPT__)) 270 271 /** 272 * @brief Get the specified FLASH flag status. 273 * @param __FLAG__ specifies the FLASH flag to check. 274 * This parameter can be one of the following values: 275 * @arg FLASH_FLAG_EOP : FLASH End of Operation flag 276 * @arg FLASH_FLAG_OPERR : FLASH operation Error flag 277 * @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag 278 * @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag 279 * @arg FLASH_FLAG_PGPERR: FLASH Programming Parallelism error flag 280 * @arg FLASH_FLAG_ERSERR : FLASH Erasing Sequence error flag 281 * @arg FLASH_FLAG_BSY : FLASH Busy flag 282 * @retval The new state of __FLAG__ (SET or RESET). 283 */ 284 #define __HAL_FLASH_GET_FLAG(__FLAG__) ((FLASH->SR & (__FLAG__))) 285 286 /** 287 * @brief Clear the specified FLASH flag. 288 * @param __FLAG__ specifies the FLASH flags to clear. 289 * This parameter can be any combination of the following values: 290 * @arg FLASH_FLAG_EOP : FLASH End of Operation flag 291 * @arg FLASH_FLAG_OPERR : FLASH operation Error flag 292 * @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag 293 * @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag 294 * @arg FLASH_FLAG_PGPERR: FLASH Programming Parallelism error flag 295 * @arg FLASH_FLAG_ERSERR : FLASH Erasing Sequence error flag 296 * @retval none 297 */ 298 #define __HAL_FLASH_CLEAR_FLAG(__FLAG__) (FLASH->SR = (__FLAG__)) 299 /** 300 * @} 301 */ 302 303 /* Include FLASH HAL Extension module */ 304 #include "stm32f7xx_hal_flash_ex.h" 305 306 /* Exported functions --------------------------------------------------------*/ 307 /** @addtogroup FLASH_Exported_Functions 308 * @{ 309 */ 310 /** @addtogroup FLASH_Exported_Functions_Group1 311 * @{ 312 */ 313 /* Program operation functions ***********************************************/ 314 HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data); 315 HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data); 316 /* FLASH IRQ handler method */ 317 void HAL_FLASH_IRQHandler(void); 318 /* Callbacks in non blocking modes */ 319 void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue); 320 void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue); 321 /** 322 * @} 323 */ 324 325 /** @addtogroup FLASH_Exported_Functions_Group2 326 * @{ 327 */ 328 /* Peripheral Control functions **********************************************/ 329 HAL_StatusTypeDef HAL_FLASH_Unlock(void); 330 HAL_StatusTypeDef HAL_FLASH_Lock(void); 331 HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void); 332 HAL_StatusTypeDef HAL_FLASH_OB_Lock(void); 333 /* Option bytes control */ 334 HAL_StatusTypeDef HAL_FLASH_OB_Launch(void); 335 /** 336 * @} 337 */ 338 339 /** @addtogroup FLASH_Exported_Functions_Group3 340 * @{ 341 */ 342 /* Peripheral State functions ************************************************/ 343 uint32_t HAL_FLASH_GetError(void); 344 HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout); 345 /** 346 * @} 347 */ 348 349 /** 350 * @} 351 */ 352 /* Private types -------------------------------------------------------------*/ 353 /* Private variables ---------------------------------------------------------*/ 354 /** @defgroup FLASH_Private_Variables FLASH Private Variables 355 * @{ 356 */ 357 358 /** 359 * @} 360 */ 361 /* Private constants ---------------------------------------------------------*/ 362 /** @defgroup FLASH_Private_Constants FLASH Private Constants 363 * @{ 364 */ 365 366 /** 367 * @brief OPTCR register byte 1 (Bits[15:8]) base address 368 */ 369 #define OPTCR_BYTE1_ADDRESS ((uint32_t)0x40023C15) 370 371 /** 372 * @} 373 */ 374 375 /* Private macros ------------------------------------------------------------*/ 376 /** @defgroup FLASH_Private_Macros FLASH Private Macros 377 * @{ 378 */ 379 380 /** @defgroup FLASH_IS_FLASH_Definitions FLASH Private macros to check input parameters 381 * @{ 382 */ 383 #define IS_FLASH_TYPEPROGRAM(VALUE)(((VALUE) == FLASH_TYPEPROGRAM_BYTE) || \ 384 ((VALUE) == FLASH_TYPEPROGRAM_HALFWORD) || \ 385 ((VALUE) == FLASH_TYPEPROGRAM_WORD) || \ 386 ((VALUE) == FLASH_TYPEPROGRAM_DOUBLEWORD)) 387 /** 388 * @} 389 */ 390 391 /** 392 * @} 393 */ 394 395 /* Private functions ---------------------------------------------------------*/ 396 /** @defgroup FLASH_Private_Functions FLASH Private Functions 397 * @{ 398 */ 399 400 /** 401 * @} 402 */ 403 404 /** 405 * @} 406 */ 407 408 /** 409 * @} 410 */ 411 412 #ifdef __cplusplus 413 } 414 #endif 415 416 #endif /* __STM32F7xx_HAL_FLASH_H */ 417 418 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 419