1 /** 2 ****************************************************************************** 3 * @file stm32l1xx_hal_flash.h 4 * @author MCD Application Team 5 * @version V1.2.0 6 * @date 01-July-2016 7 * @brief Header file of Flash HAL module. 8 ****************************************************************************** 9 * @attention 10 * 11 * <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> 12 * 13 * Redistribution and use in source and binary forms, with or without modification, 14 * are permitted provided that the following conditions are met: 15 * 1. Redistributions of source code must retain the above copyright notice, 16 * this list of conditions and the following disclaimer. 17 * 2. Redistributions in binary form must reproduce the above copyright notice, 18 * this list of conditions and the following disclaimer in the documentation 19 * and/or other materials provided with the distribution. 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors 21 * may be used to endorse or promote products derived from this software 22 * without specific prior written permission. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34 * 35 ****************************************************************************** 36 */ 37 38 /* Define to prevent recursive inclusion -------------------------------------*/ 39 #ifndef __STM32L1xx_HAL_FLASH_H 40 #define __STM32L1xx_HAL_FLASH_H 41 42 #ifdef __cplusplus 43 extern "C" { 44 #endif 45 46 /* Includes ------------------------------------------------------------------*/ 47 #include "stm32l1xx_hal_def.h" 48 49 /** @addtogroup STM32L1xx_HAL_Driver 50 * @{ 51 */ 52 53 /** @addtogroup FLASH 54 * @{ 55 */ 56 57 /** @addtogroup FLASH_Private_Constants 58 * @{ 59 */ 60 #define FLASH_TIMEOUT_VALUE ((uint32_t)50000U) /* 50 s */ 61 /** 62 * @} 63 */ 64 65 /** @addtogroup FLASH_Private_Macros 66 * @{ 67 */ 68 69 #define IS_FLASH_TYPEPROGRAM(_VALUE_) (((_VALUE_) == FLASH_TYPEPROGRAM_WORD)) 70 71 #define IS_FLASH_LATENCY(__LATENCY__) (((__LATENCY__) == FLASH_LATENCY_0) || \ 72 ((__LATENCY__) == FLASH_LATENCY_1)) 73 74 /** 75 * @} 76 */ 77 78 /* Exported types ------------------------------------------------------------*/ 79 /** @defgroup FLASH_Exported_Types FLASH Exported Types 80 * @{ 81 */ 82 83 /** 84 * @brief FLASH Procedure structure definition 85 */ 86 typedef enum 87 { 88 FLASH_PROC_NONE = 0, 89 FLASH_PROC_PAGEERASE = 1, 90 FLASH_PROC_PROGRAM = 2, 91 } FLASH_ProcedureTypeDef; 92 93 /** 94 * @brief FLASH handle Structure definition 95 */ 96 typedef struct 97 { 98 __IO FLASH_ProcedureTypeDef ProcedureOnGoing; /*!< Internal variable to indicate which procedure is ongoing or not in IT context */ 99 100 __IO uint32_t NbPagesToErase; /*!< Internal variable to save the remaining sectors to erase in IT context*/ 101 102 __IO uint32_t Address; /*!< Internal variable to save address selected for program or erase */ 103 104 __IO uint32_t Page; /*!< Internal variable to define the current page which is erasing */ 105 106 HAL_LockTypeDef Lock; /*!< FLASH locking object */ 107 108 __IO uint32_t ErrorCode; /*!< FLASH error code 109 This parameter can be a value of @ref FLASH_Error_Codes */ 110 } FLASH_ProcessTypeDef; 111 112 /** 113 * @} 114 */ 115 116 /* Exported constants --------------------------------------------------------*/ 117 /** @defgroup FLASH_Exported_Constants FLASH Exported Constants 118 * @{ 119 */ 120 121 /** @defgroup FLASH_Error_Codes FLASH Error Codes 122 * @{ 123 */ 124 125 #define HAL_FLASH_ERROR_NONE 0x00U /*!< No error */ 126 #define HAL_FLASH_ERROR_PGA 0x01U /*!< Programming alignment error */ 127 #define HAL_FLASH_ERROR_WRP 0x02U /*!< Write protection error */ 128 #define HAL_FLASH_ERROR_OPTV 0x04U /*!< Option validity error */ 129 #define HAL_FLASH_ERROR_SIZE 0x08U /*!< */ 130 #define HAL_FLASH_ERROR_RD 0x10U /*!< Read protected error */ 131 #define HAL_FLASH_ERROR_OPTVUSR 0x20U /*!< Option UserValidity Error. */ 132 #define HAL_FLASH_ERROR_OPERATION 0x40U /*!< Not used */ 133 134 /** 135 * @} 136 */ 137 138 /** @defgroup FLASH_Page_Size FLASH size information 139 * @{ 140 */ 141 142 #define FLASH_SIZE (uint32_t)(*((uint16_t *)FLASHSIZE_BASE) * 1024U) 143 #define FLASH_PAGE_SIZE ((uint32_t)256U) /*!< FLASH Page Size in bytes */ 144 145 /** 146 * @} 147 */ 148 149 /** @defgroup FLASH_Type_Program FLASH Type Program 150 * @{ 151 */ 152 #define FLASH_TYPEPROGRAM_WORD ((uint32_t)0x02U) /*!<Program a word (32-bit) at a specified address.*/ 153 154 /** 155 * @} 156 */ 157 158 /** @defgroup FLASH_Latency FLASH Latency 159 * @{ 160 */ 161 #define FLASH_LATENCY_0 ((uint32_t)0x00000000U) /*!< FLASH Zero Latency cycle */ 162 #define FLASH_LATENCY_1 FLASH_ACR_LATENCY /*!< FLASH One Latency cycle */ 163 164 /** 165 * @} 166 */ 167 168 /** @defgroup FLASH_Interrupts FLASH Interrupts 169 * @{ 170 */ 171 172 #define FLASH_IT_EOP FLASH_PECR_EOPIE /*!< End of programming interrupt source */ 173 #define FLASH_IT_ERR FLASH_PECR_ERRIE /*!< Error interrupt source */ 174 /** 175 * @} 176 */ 177 178 /** @defgroup FLASH_Flags FLASH Flags 179 * @{ 180 */ 181 182 #define FLASH_FLAG_BSY FLASH_SR_BSY /*!< FLASH Busy flag */ 183 #define FLASH_FLAG_EOP FLASH_SR_EOP /*!< FLASH End of Programming flag */ 184 #define FLASH_FLAG_ENDHV FLASH_SR_ENDHV /*!< FLASH End of High Voltage flag */ 185 #define FLASH_FLAG_READY FLASH_SR_READY /*!< FLASH Ready flag after low power mode */ 186 #define FLASH_FLAG_WRPERR FLASH_SR_WRPERR /*!< FLASH Write protected error flag */ 187 #define FLASH_FLAG_PGAERR FLASH_SR_PGAERR /*!< FLASH Programming Alignment error flag */ 188 #define FLASH_FLAG_SIZERR FLASH_SR_SIZERR /*!< FLASH Size error flag */ 189 #define FLASH_FLAG_OPTVERR FLASH_SR_OPTVERR /*!< FLASH Option Validity error flag */ 190 /* Cat2 & Cat3*/ 191 #if defined(FLASH_SR_RDERR) 192 #define FLASH_FLAG_RDERR FLASH_SR_RDERR /*!< Read protected error flag */ 193 #endif /* FLASH_SR_RDERR */ 194 /* Cat3, Cat4 & Cat5*/ 195 #if defined(FLASH_SR_OPTVERRUSR) 196 #define FLASH_FLAG_OPTVERRUSR FLASH_SR_OPTVERRUSR /*!< FLASH Option User Validity error flag */ 197 #endif /* FLASH_SR_OPTVERRUSR */ 198 199 /** 200 * @} 201 */ 202 203 /** @defgroup FLASH_Keys FLASH Keys 204 * @{ 205 */ 206 207 #define FLASH_PDKEY1 ((uint32_t)0x04152637U) /*!< Flash power down key1 */ 208 #define FLASH_PDKEY2 ((uint32_t)0xFAFBFCFDU) /*!< Flash power down key2: used with FLASH_PDKEY1 209 to unlock the RUN_PD bit in FLASH_ACR */ 210 211 #define FLASH_PEKEY1 ((uint32_t)0x89ABCDEFU) /*!< Flash program erase key1 */ 212 #define FLASH_PEKEY2 ((uint32_t)0x02030405U) /*!< Flash program erase key: used with FLASH_PEKEY2 213 to unlock the write access to the FLASH_PECR register and 214 data EEPROM */ 215 216 #define FLASH_PRGKEY1 ((uint32_t)0x8C9DAEBFU) /*!< Flash program memory key1 */ 217 #define FLASH_PRGKEY2 ((uint32_t)0x13141516U) /*!< Flash program memory key2: used with FLASH_PRGKEY2 218 to unlock the program memory */ 219 220 #define FLASH_OPTKEY1 ((uint32_t)0xFBEAD9C8U) /*!< Flash option key1 */ 221 #define FLASH_OPTKEY2 ((uint32_t)0x24252627U) /*!< Flash option key2: used with FLASH_OPTKEY1 to 222 unlock the write access to the option byte block */ 223 /** 224 * @} 225 */ 226 /** 227 * @} 228 */ 229 230 /* Exported macro ------------------------------------------------------------*/ 231 232 /** @defgroup FLASH_Exported_Macros FLASH Exported Macros 233 * @brief macros to control FLASH features 234 * @{ 235 */ 236 237 238 /** @defgroup FLASH_Interrupt FLASH Interrupts 239 * @brief macros to handle FLASH interrupts 240 * @{ 241 */ 242 243 /** 244 * @brief Enable the specified FLASH interrupt. 245 * @param __INTERRUPT__ FLASH interrupt 246 * This parameter can be any combination of the following values: 247 * @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt 248 * @arg @ref FLASH_IT_ERR Error Interrupt 249 * @retval none 250 */ 251 #define __HAL_FLASH_ENABLE_IT(__INTERRUPT__) SET_BIT((FLASH->PECR), (__INTERRUPT__)) 252 253 /** 254 * @brief Disable the specified FLASH interrupt. 255 * @param __INTERRUPT__ FLASH interrupt 256 * This parameter can be any combination of the following values: 257 * @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt 258 * @arg @ref FLASH_IT_ERR Error Interrupt 259 * @retval none 260 */ 261 #define __HAL_FLASH_DISABLE_IT(__INTERRUPT__) CLEAR_BIT((FLASH->PECR), (uint32_t)(__INTERRUPT__)) 262 263 /** 264 * @brief Get the specified FLASH flag status. 265 * @param __FLAG__ specifies the FLASH flag to check. 266 * This parameter can be one of the following values: 267 * @arg @ref FLASH_FLAG_BSY FLASH Busy flag 268 * @arg @ref FLASH_FLAG_EOP FLASH End of Operation flag 269 * @arg @ref FLASH_FLAG_ENDHV FLASH End of High Voltage flag 270 * @arg @ref FLASH_FLAG_READY FLASH Ready flag after low power mode 271 * @arg @ref FLASH_FLAG_PGAERR FLASH Programming Alignment error flag 272 * @arg @ref FLASH_FLAG_SIZERR FLASH Size error flag 273 * @arg @ref FLASH_FLAG_OPTVERR FLASH Option validity error error flag 274 @if STM32L100xB 275 @elif STM32L100xBA 276 * @arg @ref FLASH_FLAG_RDERR FLASH Read Protection error flag (PCROP) 277 @elif STM32L151xB 278 @elif STM32L151xBA 279 * @arg @ref FLASH_FLAG_RDERR FLASH Read Protection error flag (PCROP) 280 @elif STM32L152xB 281 @elif STM32L152xBA 282 * @arg @ref FLASH_FLAG_RDERR FLASH Read Protection error flag (PCROP) 283 @elif STM32L100xC 284 * @arg @ref FLASH_FLAG_RDERR FLASH Read Protection error flag (PCROP) 285 * @arg @ref FLASH_FLAG_OPTVERRUSR FLASH Option User validity error 286 @elif STM32L151xC 287 * @arg @ref FLASH_FLAG_RDERR FLASH Read Protection error flag (PCROP) 288 * @arg @ref FLASH_FLAG_OPTVERRUSR FLASH Option User validity error 289 @elif STM32L152xC 290 * @arg @ref FLASH_FLAG_RDERR FLASH Read Protection error flag (PCROP) 291 * @arg @ref FLASH_FLAG_OPTVERRUSR FLASH Option User validity error 292 @elif STM32L162xC 293 * @arg @ref FLASH_FLAG_RDERR FLASH Read Protection error flag (PCROP) 294 * @arg @ref FLASH_FLAG_OPTVERRUSR FLASH Option User validity error 295 @else 296 * @arg @ref FLASH_FLAG_OPTVERRUSR FLASH Option User validity error 297 @endif 298 * @arg @ref FLASH_FLAG_WRPERR FLASH Write protected error flag 299 * @retval The new state of __FLAG__ (SET or RESET). 300 */ 301 #define __HAL_FLASH_GET_FLAG(__FLAG__) (((FLASH->SR) & (__FLAG__)) == (__FLAG__)) 302 303 /** 304 * @brief Clear the specified FLASH flag. 305 * @param __FLAG__ specifies the FLASH flags to clear. 306 * This parameter can be any combination of the following values: 307 * @arg @ref FLASH_FLAG_EOP FLASH End of Operation flag 308 * @arg @ref FLASH_FLAG_ENDHV FLASH End of High Voltage flag 309 * @arg @ref FLASH_FLAG_READY FLASH Ready flag after low power mode 310 * @arg @ref FLASH_FLAG_PGAERR FLASH Programming Alignment error flag 311 * @arg @ref FLASH_FLAG_SIZERR FLASH Size error flag 312 * @arg @ref FLASH_FLAG_OPTVERR FLASH Option validity error error flag 313 @if STM32L100xB 314 @elif STM32L100xBA 315 * @arg @ref FLASH_FLAG_RDERR FLASH Read Protection error flag (PCROP) 316 @elif STM32L151xB 317 @elif STM32L151xBA 318 * @arg @ref FLASH_FLAG_RDERR FLASH Read Protection error flag (PCROP) 319 @elif STM32L152xB 320 @elif STM32L152xBA 321 * @arg @ref FLASH_FLAG_RDERR FLASH Read Protection error flag (PCROP) 322 @elif STM32L100xC 323 * @arg @ref FLASH_FLAG_RDERR FLASH Read Protection error flag (PCROP) 324 * @arg @ref FLASH_FLAG_OPTVERRUSR FLASH Option User validity error 325 @elif STM32L151xC 326 * @arg @ref FLASH_FLAG_RDERR FLASH Read Protection error flag (PCROP) 327 * @arg @ref FLASH_FLAG_OPTVERRUSR FLASH Option User validity error 328 @elif STM32L152xC 329 * @arg @ref FLASH_FLAG_RDERR FLASH Read Protection error flag (PCROP) 330 * @arg @ref FLASH_FLAG_OPTVERRUSR FLASH Option User validity error 331 @elif STM32L162xC 332 * @arg @ref FLASH_FLAG_RDERR FLASH Read Protection error flag (PCROP) 333 * @arg @ref FLASH_FLAG_OPTVERRUSR FLASH Option User validity error 334 @else 335 * @arg @ref FLASH_FLAG_OPTVERRUSR FLASH Option User validity error 336 @endif 337 * @arg @ref FLASH_FLAG_WRPERR FLASH Write protected error flag 338 * @retval none 339 */ 340 #define __HAL_FLASH_CLEAR_FLAG(__FLAG__) ((FLASH->SR) = (__FLAG__)) 341 342 /** 343 * @} 344 */ 345 346 /** 347 * @} 348 */ 349 350 /* Include FLASH HAL Extended module */ 351 #include "stm32l1xx_hal_flash_ex.h" 352 #include "stm32l1xx_hal_flash_ramfunc.h" 353 354 /* Exported functions --------------------------------------------------------*/ 355 /** @addtogroup FLASH_Exported_Functions 356 * @{ 357 */ 358 359 /** @addtogroup FLASH_Exported_Functions_Group1 360 * @{ 361 */ 362 /* IO operation functions *****************************************************/ 363 HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint32_t Data); 364 HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint32_t Data); 365 366 /* FLASH IRQ handler function */ 367 void HAL_FLASH_IRQHandler(void); 368 /* Callbacks in non blocking modes */ 369 void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue); 370 void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue); 371 372 /** 373 * @} 374 */ 375 376 /** @addtogroup FLASH_Exported_Functions_Group2 377 * @{ 378 */ 379 /* Peripheral Control functions ***********************************************/ 380 HAL_StatusTypeDef HAL_FLASH_Unlock(void); 381 HAL_StatusTypeDef HAL_FLASH_Lock(void); 382 HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void); 383 HAL_StatusTypeDef HAL_FLASH_OB_Lock(void); 384 HAL_StatusTypeDef HAL_FLASH_OB_Launch(void); 385 386 /** 387 * @} 388 */ 389 390 /** @addtogroup FLASH_Exported_Functions_Group3 391 * @{ 392 */ 393 /* Peripheral State and Error functions ***************************************/ 394 uint32_t HAL_FLASH_GetError(void); 395 396 /** 397 * @} 398 */ 399 400 /** 401 * @} 402 */ 403 404 /* Private function -------------------------------------------------*/ 405 /** @addtogroup FLASH_Private_Functions 406 * @{ 407 */ 408 HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout); 409 410 /** 411 * @} 412 */ 413 414 /** 415 * @} 416 */ 417 418 /** 419 * @} 420 */ 421 422 #ifdef __cplusplus 423 } 424 #endif 425 426 #endif /* __STM32L1xx_HAL_FLASH_H */ 427 428 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 429 430