1 /** 2 ****************************************************************************** 3 * @file stm32f1xx_hal_flash.h 4 * @author MCD Application Team 5 * @brief Header file of Flash HAL module. 6 ****************************************************************************** 7 * @attention 8 * 9 * Copyright (c) 2016 STMicroelectronics. 10 * All rights reserved. 11 * 12 * This software is licensed under terms that can be found in the LICENSE file in 13 * the root directory of this software component. 14 * If no LICENSE file comes with this software, it is provided AS-IS. 15 ****************************************************************************** 16 */ 17 18 /* Define to prevent recursive inclusion -------------------------------------*/ 19 #ifndef __STM32F1xx_HAL_FLASH_H 20 #define __STM32F1xx_HAL_FLASH_H 21 22 #ifdef __cplusplus 23 extern "C" { 24 #endif 25 26 /* Includes ------------------------------------------------------------------*/ 27 #include "stm32f1xx_hal_def.h" 28 29 /** @addtogroup STM32F1xx_HAL_Driver 30 * @{ 31 */ 32 33 /** @addtogroup FLASH 34 * @{ 35 */ 36 37 /** @addtogroup FLASH_Private_Constants 38 * @{ 39 */ 40 #define FLASH_TIMEOUT_VALUE 50000U /* 50 s */ 41 /** 42 * @} 43 */ 44 45 /** @addtogroup FLASH_Private_Macros 46 * @{ 47 */ 48 49 #define IS_FLASH_TYPEPROGRAM(VALUE) (((VALUE) == FLASH_TYPEPROGRAM_HALFWORD) || \ 50 ((VALUE) == FLASH_TYPEPROGRAM_WORD) || \ 51 ((VALUE) == FLASH_TYPEPROGRAM_DOUBLEWORD)) 52 53 #if defined(FLASH_ACR_LATENCY) 54 #define IS_FLASH_LATENCY(__LATENCY__) (((__LATENCY__) == FLASH_LATENCY_0) || \ 55 ((__LATENCY__) == FLASH_LATENCY_1) || \ 56 ((__LATENCY__) == FLASH_LATENCY_2)) 57 58 #else 59 #define IS_FLASH_LATENCY(__LATENCY__) ((__LATENCY__) == FLASH_LATENCY_0) 60 #endif /* FLASH_ACR_LATENCY */ 61 /** 62 * @} 63 */ 64 65 /* Exported types ------------------------------------------------------------*/ 66 /** @defgroup FLASH_Exported_Types FLASH Exported Types 67 * @{ 68 */ 69 70 /** 71 * @brief FLASH Procedure structure definition 72 */ 73 typedef enum 74 { 75 FLASH_PROC_NONE = 0U, 76 FLASH_PROC_PAGEERASE = 1U, 77 FLASH_PROC_MASSERASE = 2U, 78 FLASH_PROC_PROGRAMHALFWORD = 3U, 79 FLASH_PROC_PROGRAMWORD = 4U, 80 FLASH_PROC_PROGRAMDOUBLEWORD = 5U 81 } FLASH_ProcedureTypeDef; 82 83 /** 84 * @brief FLASH handle Structure definition 85 */ 86 typedef struct 87 { 88 __IO FLASH_ProcedureTypeDef ProcedureOnGoing; /*!< Internal variable to indicate which procedure is ongoing or not in IT context */ 89 90 __IO uint32_t DataRemaining; /*!< Internal variable to save the remaining pages to erase or half-word to program in IT context */ 91 92 __IO uint32_t Address; /*!< Internal variable to save address selected for program or erase */ 93 94 __IO uint64_t Data; /*!< Internal variable to save data to be programmed */ 95 96 HAL_LockTypeDef Lock; /*!< FLASH locking object */ 97 98 __IO uint32_t ErrorCode; /*!< FLASH error code 99 This parameter can be a value of @ref FLASH_Error_Codes */ 100 } FLASH_ProcessTypeDef; 101 102 /** 103 * @} 104 */ 105 106 /* Exported constants --------------------------------------------------------*/ 107 /** @defgroup FLASH_Exported_Constants FLASH Exported Constants 108 * @{ 109 */ 110 111 /** @defgroup FLASH_Error_Codes FLASH Error Codes 112 * @{ 113 */ 114 115 #define HAL_FLASH_ERROR_NONE 0x00U /*!< No error */ 116 #define HAL_FLASH_ERROR_PROG 0x01U /*!< Programming error */ 117 #define HAL_FLASH_ERROR_WRP 0x02U /*!< Write protection error */ 118 #define HAL_FLASH_ERROR_OPTV 0x04U /*!< Option validity error */ 119 120 /** 121 * @} 122 */ 123 124 /** @defgroup FLASH_Type_Program FLASH Type Program 125 * @{ 126 */ 127 #define FLASH_TYPEPROGRAM_HALFWORD 0x01U /*!<Program a half-word (16-bit) at a specified address.*/ 128 #define FLASH_TYPEPROGRAM_WORD 0x02U /*!<Program a word (32-bit) at a specified address.*/ 129 #define FLASH_TYPEPROGRAM_DOUBLEWORD 0x03U /*!<Program a double word (64-bit) at a specified address*/ 130 131 /** 132 * @} 133 */ 134 135 #if defined(FLASH_ACR_LATENCY) 136 /** @defgroup FLASH_Latency FLASH Latency 137 * @{ 138 */ 139 #define FLASH_LATENCY_0 0x00000000U /*!< FLASH Zero Latency cycle */ 140 #define FLASH_LATENCY_1 FLASH_ACR_LATENCY_0 /*!< FLASH One Latency cycle */ 141 #define FLASH_LATENCY_2 FLASH_ACR_LATENCY_1 /*!< FLASH Two Latency cycles */ 142 143 /** 144 * @} 145 */ 146 147 #else 148 /** @defgroup FLASH_Latency FLASH Latency 149 * @{ 150 */ 151 #define FLASH_LATENCY_0 0x00000000U /*!< FLASH Zero Latency cycle */ 152 153 /** 154 * @} 155 */ 156 157 #endif /* FLASH_ACR_LATENCY */ 158 /** 159 * @} 160 */ 161 162 /* Exported macro ------------------------------------------------------------*/ 163 164 /** @defgroup FLASH_Exported_Macros FLASH Exported Macros 165 * @brief macros to control FLASH features 166 * @{ 167 */ 168 169 /** @defgroup FLASH_Half_Cycle FLASH Half Cycle 170 * @brief macros to handle FLASH half cycle 171 * @{ 172 */ 173 174 /** 175 * @brief Enable the FLASH half cycle access. 176 * @note half cycle access can only be used with a low-frequency clock of less than 177 8 MHz that can be obtained with the use of HSI or HSE but not of PLL. 178 * @retval None 179 */ 180 #define __HAL_FLASH_HALF_CYCLE_ACCESS_ENABLE() (FLASH->ACR |= FLASH_ACR_HLFCYA) 181 182 /** 183 * @brief Disable the FLASH half cycle access. 184 * @note half cycle access can only be used with a low-frequency clock of less than 185 8 MHz that can be obtained with the use of HSI or HSE but not of PLL. 186 * @retval None 187 */ 188 #define __HAL_FLASH_HALF_CYCLE_ACCESS_DISABLE() (FLASH->ACR &= (~FLASH_ACR_HLFCYA)) 189 190 /** 191 * @} 192 */ 193 194 #if defined(FLASH_ACR_LATENCY) 195 /** @defgroup FLASH_EM_Latency FLASH Latency 196 * @brief macros to handle FLASH Latency 197 * @{ 198 */ 199 200 /** 201 * @brief Set the FLASH Latency. 202 * @param __LATENCY__ FLASH Latency 203 * The value of this parameter depend on device used within the same series 204 * @retval None 205 */ 206 #define __HAL_FLASH_SET_LATENCY(__LATENCY__) (FLASH->ACR = (FLASH->ACR&(~FLASH_ACR_LATENCY)) | (__LATENCY__)) 207 208 209 /** 210 * @brief Get the FLASH Latency. 211 * @retval FLASH Latency 212 * The value of this parameter depend on device used within the same series 213 */ 214 #define __HAL_FLASH_GET_LATENCY() (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)) 215 216 /** 217 * @} 218 */ 219 220 #endif /* FLASH_ACR_LATENCY */ 221 /** @defgroup FLASH_Prefetch FLASH Prefetch 222 * @brief macros to handle FLASH Prefetch buffer 223 * @{ 224 */ 225 /** 226 * @brief Enable the FLASH prefetch buffer. 227 * @retval None 228 */ 229 #define __HAL_FLASH_PREFETCH_BUFFER_ENABLE() (FLASH->ACR |= FLASH_ACR_PRFTBE) 230 231 /** 232 * @brief Disable the FLASH prefetch buffer. 233 * @retval None 234 */ 235 #define __HAL_FLASH_PREFETCH_BUFFER_DISABLE() (FLASH->ACR &= (~FLASH_ACR_PRFTBE)) 236 237 /** 238 * @} 239 */ 240 241 /** 242 * @} 243 */ 244 245 /* Include FLASH HAL Extended module */ 246 #include "stm32f1xx_hal_flash_ex.h" 247 248 /* Exported functions --------------------------------------------------------*/ 249 /** @addtogroup FLASH_Exported_Functions 250 * @{ 251 */ 252 253 /** @addtogroup FLASH_Exported_Functions_Group1 254 * @{ 255 */ 256 /* IO operation functions *****************************************************/ 257 HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data); 258 HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data); 259 260 /* FLASH IRQ handler function */ 261 void HAL_FLASH_IRQHandler(void); 262 /* Callbacks in non blocking modes */ 263 void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue); 264 void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue); 265 266 /** 267 * @} 268 */ 269 270 /** @addtogroup FLASH_Exported_Functions_Group2 271 * @{ 272 */ 273 /* Peripheral Control functions ***********************************************/ 274 HAL_StatusTypeDef HAL_FLASH_Unlock(void); 275 HAL_StatusTypeDef HAL_FLASH_Lock(void); 276 HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void); 277 HAL_StatusTypeDef HAL_FLASH_OB_Lock(void); 278 void HAL_FLASH_OB_Launch(void); 279 280 /** 281 * @} 282 */ 283 284 /** @addtogroup FLASH_Exported_Functions_Group3 285 * @{ 286 */ 287 /* Peripheral State and Error functions ***************************************/ 288 uint32_t HAL_FLASH_GetError(void); 289 290 /** 291 * @} 292 */ 293 294 /** 295 * @} 296 */ 297 298 /* Private function -------------------------------------------------*/ 299 /** @addtogroup FLASH_Private_Functions 300 * @{ 301 */ 302 HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout); 303 #if defined(FLASH_BANK2_END) 304 HAL_StatusTypeDef FLASH_WaitForLastOperationBank2(uint32_t Timeout); 305 #endif /* FLASH_BANK2_END */ 306 307 /** 308 * @} 309 */ 310 311 /** 312 * @} 313 */ 314 315 /** 316 * @} 317 */ 318 319 #ifdef __cplusplus 320 } 321 #endif 322 323 #endif /* __STM32F1xx_HAL_FLASH_H */ 324 325 326