1 /** 2 ****************************************************************************** 3 * @file stm32f2xx_hal_flash_ex.h 4 * @author MCD Application Team 5 * @brief Header file of FLASH HAL Extension 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 __STM32F2xx_HAL_FLASH_EX_H 22 #define __STM32F2xx_HAL_FLASH_EX_H 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 /* Includes ------------------------------------------------------------------*/ 29 #include "stm32f2xx_hal_def.h" 30 31 /** @addtogroup STM32F2xx_HAL_Driver 32 * @{ 33 */ 34 35 /** @addtogroup FLASHEx 36 * @{ 37 */ 38 39 /* Exported types ------------------------------------------------------------*/ 40 /** @defgroup FLASHEx_Exported_Types FLASH Exported Types 41 * @{ 42 */ 43 44 /** 45 * @brief FLASH Erase structure definition 46 */ 47 typedef struct 48 { 49 uint32_t TypeErase; /*!< Mass erase or sector Erase. 50 This parameter can be a value of @ref FLASHEx_Type_Erase */ 51 52 uint32_t Banks; /*!< Select banks to erase when Mass erase is enabled. 53 This parameter must be a value of @ref FLASHEx_Banks */ 54 55 uint32_t Sector; /*!< Initial FLASH sector to erase when Mass erase is disabled 56 This parameter must be a value of @ref FLASHEx_Sectors */ 57 58 uint32_t NbSectors; /*!< Number of sectors to be erased. 59 This parameter must be a value between 1 and (max number of sectors - value of Initial sector)*/ 60 61 uint32_t VoltageRange;/*!< The device voltage range which defines the erase parallelism 62 This parameter must be a value of @ref FLASHEx_Voltage_Range */ 63 64 } FLASH_EraseInitTypeDef; 65 66 /** 67 * @brief FLASH Option Bytes Program structure definition 68 */ 69 typedef struct 70 { 71 uint32_t OptionType; /*!< Option byte to be configured. 72 This parameter can be a value of @ref FLASHEx_Option_Type */ 73 74 uint32_t WRPState; /*!< Write protection activation or deactivation. 75 This parameter can be a value of @ref FLASHEx_WRP_State */ 76 77 uint32_t WRPSector; /*!< Specifies the sector(s) to be write protected. 78 The value of this parameter depend on device used within the same series */ 79 80 uint32_t Banks; /*!< Select banks for WRP activation/deactivation of all sectors. 81 This parameter must be a value of @ref FLASHEx_Banks */ 82 83 uint32_t RDPLevel; /*!< Set the read protection level. 84 This parameter can be a value of @ref FLASHEx_Option_Bytes_Read_Protection */ 85 86 uint32_t BORLevel; /*!< Set the BOR Level. 87 This parameter can be a value of @ref FLASHEx_BOR_Reset_Level */ 88 89 uint8_t USERConfig; /*!< Program the FLASH User Option Byte: IWDG_SW / RST_STOP / RST_STDBY. */ 90 91 } FLASH_OBProgramInitTypeDef; 92 93 /* Exported constants --------------------------------------------------------*/ 94 95 /** @defgroup FLASHEx_Exported_Constants FLASH Exported Constants 96 * @{ 97 */ 98 99 /** @defgroup FLASHEx_Type_Erase FLASH Type Erase 100 * @{ 101 */ 102 #define FLASH_TYPEERASE_SECTORS 0x00000000U /*!< Sectors erase only */ 103 #define FLASH_TYPEERASE_MASSERASE 0x00000001U /*!< Flash Mass erase activation */ 104 /** 105 * @} 106 */ 107 108 /** @defgroup FLASHEx_Voltage_Range FLASH Voltage Range 109 * @{ 110 */ 111 #define FLASH_VOLTAGE_RANGE_1 0x00000000U /*!< Device operating range: 1.8V to 2.1V */ 112 #define FLASH_VOLTAGE_RANGE_2 0x00000001U /*!< Device operating range: 2.1V to 2.7V */ 113 #define FLASH_VOLTAGE_RANGE_3 0x00000002U /*!< Device operating range: 2.7V to 3.6V */ 114 #define FLASH_VOLTAGE_RANGE_4 0x00000003U /*!< Device operating range: 2.7V to 3.6V + External Vpp */ 115 /** 116 * @} 117 */ 118 119 /** @defgroup FLASHEx_WRP_State FLASH WRP State 120 * @{ 121 */ 122 #define OB_WRPSTATE_DISABLE 0x00000000U /*!< Disable the write protection of the desired bank 1 sectors */ 123 #define OB_WRPSTATE_ENABLE 0x00000001U /*!< Enable the write protection of the desired bank 1 sectors */ 124 /** 125 * @} 126 */ 127 128 /** @defgroup FLASHEx_Option_Type FLASH Option Type 129 * @{ 130 */ 131 #define OPTIONBYTE_WRP 0x00000001U /*!< WRP option byte configuration */ 132 #define OPTIONBYTE_RDP 0x00000002U /*!< RDP option byte configuration */ 133 #define OPTIONBYTE_USER 0x00000004U /*!< USER option byte configuration */ 134 #define OPTIONBYTE_BOR 0x00000008U /*!< BOR option byte configuration */ 135 /** 136 * @} 137 */ 138 139 /** @defgroup FLASHEx_Option_Bytes_Read_Protection FLASH Option Bytes Read Protection 140 * @{ 141 */ 142 #define OB_RDP_LEVEL_0 ((uint8_t)0xAA) 143 #define OB_RDP_LEVEL_1 ((uint8_t)0x55) 144 #define OB_RDP_LEVEL_2 ((uint8_t)0xCC) /*!< Warning: When enabling read protection level 2 145 it s no more possible to go back to level 1 or 0 */ 146 /** 147 * @} 148 */ 149 150 /** @defgroup FLASHEx_Option_Bytes_IWatchdog FLASH Option Bytes IWatchdog 151 * @{ 152 */ 153 #define OB_IWDG_SW ((uint8_t)0x20) /*!< Software IWDG selected */ 154 #define OB_IWDG_HW ((uint8_t)0x00) /*!< Hardware IWDG selected */ 155 /** 156 * @} 157 */ 158 159 /** @defgroup FLASHEx_Option_Bytes_nRST_STOP FLASH Option Bytes nRST_STOP 160 * @{ 161 */ 162 #define OB_STOP_NO_RST ((uint8_t)0x40) /*!< No reset generated when entering in STOP */ 163 #define OB_STOP_RST ((uint8_t)0x00) /*!< Reset generated when entering in STOP */ 164 /** 165 * @} 166 */ 167 168 169 /** @defgroup FLASHEx_Option_Bytes_nRST_STDBY FLASH Option Bytes nRST_STDBY 170 * @{ 171 */ 172 #define OB_STDBY_NO_RST ((uint8_t)0x80) /*!< No reset generated when entering in STANDBY */ 173 #define OB_STDBY_RST ((uint8_t)0x00) /*!< Reset generated when entering in STANDBY */ 174 /** 175 * @} 176 */ 177 178 /** @defgroup FLASHEx_BOR_Reset_Level FLASH BOR Reset Level 179 * @{ 180 */ 181 #define OB_BOR_LEVEL3 ((uint8_t)0x00) /*!< Supply voltage ranges from 2.70 to 3.60 V */ 182 #define OB_BOR_LEVEL2 ((uint8_t)0x04) /*!< Supply voltage ranges from 2.40 to 2.70 V */ 183 #define OB_BOR_LEVEL1 ((uint8_t)0x08) /*!< Supply voltage ranges from 2.10 to 2.40 V */ 184 #define OB_BOR_OFF ((uint8_t)0x0C) /*!< Supply voltage ranges from 1.62 to 2.10 V */ 185 /** 186 * @} 187 */ 188 189 190 /** 191 * @} 192 */ 193 194 /** @defgroup FLASH_Latency FLASH Latency 195 * @{ 196 */ 197 #define FLASH_LATENCY_0 FLASH_ACR_LATENCY_0WS /*!< FLASH Zero Latency cycle */ 198 #define FLASH_LATENCY_1 FLASH_ACR_LATENCY_1WS /*!< FLASH One Latency cycle */ 199 #define FLASH_LATENCY_2 FLASH_ACR_LATENCY_2WS /*!< FLASH Two Latency cycles */ 200 #define FLASH_LATENCY_3 FLASH_ACR_LATENCY_3WS /*!< FLASH Three Latency cycles */ 201 #define FLASH_LATENCY_4 FLASH_ACR_LATENCY_4WS /*!< FLASH Four Latency cycles */ 202 #define FLASH_LATENCY_5 FLASH_ACR_LATENCY_5WS /*!< FLASH Five Latency cycles */ 203 #define FLASH_LATENCY_6 FLASH_ACR_LATENCY_6WS /*!< FLASH Six Latency cycles */ 204 #define FLASH_LATENCY_7 FLASH_ACR_LATENCY_7WS /*!< FLASH Seven Latency cycles */ 205 206 /** 207 * @} 208 */ 209 210 211 /** @defgroup FLASHEx_Banks FLASH Banks 212 * @{ 213 */ 214 #define FLASH_BANK_1 1U /*!< Bank 1 */ 215 /** 216 * @} 217 */ 218 219 /** @defgroup FLASHEx_MassErase_bit FLASH Mass Erase bit 220 * @{ 221 */ 222 #define FLASH_MER_BIT FLASH_CR_MER /*!< only 1 MER Bit */ 223 /** 224 * @} 225 */ 226 227 /** @defgroup FLASHEx_Sectors FLASH Sectors 228 * @{ 229 */ 230 #define FLASH_SECTOR_0 0U /*!< Sector Number 0 */ 231 #define FLASH_SECTOR_1 1U /*!< Sector Number 1 */ 232 #define FLASH_SECTOR_2 2U /*!< Sector Number 2 */ 233 #define FLASH_SECTOR_3 3U /*!< Sector Number 3 */ 234 #define FLASH_SECTOR_4 4U /*!< Sector Number 4 */ 235 #define FLASH_SECTOR_5 5U /*!< Sector Number 5 */ 236 #define FLASH_SECTOR_6 6U /*!< Sector Number 6 */ 237 #define FLASH_SECTOR_7 7U /*!< Sector Number 7 */ 238 #define FLASH_SECTOR_8 8U /*!< Sector Number 8 */ 239 #define FLASH_SECTOR_9 9U /*!< Sector Number 9 */ 240 #define FLASH_SECTOR_10 10U /*!< Sector Number 10 */ 241 #define FLASH_SECTOR_11 11U /*!< Sector Number 11 */ 242 243 244 245 /** 246 * @} 247 */ 248 249 /** @defgroup FLASHEx_Option_Bytes_Write_Protection FLASH Option Bytes Write Protection 250 * @{ 251 */ 252 #define OB_WRP_SECTOR_0 0x00000001U /*!< Write protection of Sector0 */ 253 #define OB_WRP_SECTOR_1 0x00000002U /*!< Write protection of Sector1 */ 254 #define OB_WRP_SECTOR_2 0x00000004U /*!< Write protection of Sector2 */ 255 #define OB_WRP_SECTOR_3 0x00000008U /*!< Write protection of Sector3 */ 256 #define OB_WRP_SECTOR_4 0x00000010U /*!< Write protection of Sector4 */ 257 #define OB_WRP_SECTOR_5 0x00000020U /*!< Write protection of Sector5 */ 258 #define OB_WRP_SECTOR_6 0x00000040U /*!< Write protection of Sector6 */ 259 #define OB_WRP_SECTOR_7 0x00000080U /*!< Write protection of Sector7 */ 260 #define OB_WRP_SECTOR_8 0x00000100U /*!< Write protection of Sector8 */ 261 #define OB_WRP_SECTOR_9 0x00000200U /*!< Write protection of Sector9 */ 262 #define OB_WRP_SECTOR_10 0x00000400U /*!< Write protection of Sector10 */ 263 #define OB_WRP_SECTOR_11 0x00000800U /*!< Write protection of Sector11 */ 264 #define OB_WRP_SECTOR_All 0x00000FFFU /*!< Write protection of all Sectors */ 265 266 267 /** 268 * @} 269 */ 270 271 /** 272 * @} 273 */ 274 275 /* Exported macro ------------------------------------------------------------*/ 276 277 /* Exported functions --------------------------------------------------------*/ 278 /** @addtogroup FLASHEx_Exported_Functions 279 * @{ 280 */ 281 282 /** @addtogroup FLASHEx_Exported_Functions_Group1 283 * @{ 284 */ 285 /* Extension Program operation functions *************************************/ 286 HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *SectorError); 287 HAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit); 288 HAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit); 289 void HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit); 290 291 /** 292 * @} 293 */ 294 295 /** 296 * @} 297 */ 298 /* Private types -------------------------------------------------------------*/ 299 /* Private variables ---------------------------------------------------------*/ 300 /** @defgroup FLASHEx_Private_Variables FLASH Private Variables 301 * @{ 302 */ 303 304 /** 305 * @} 306 */ 307 /* Private constants ---------------------------------------------------------*/ 308 /** @defgroup FLASHEx_Private_Constants FLASH Private Constants 309 * @{ 310 */ 311 312 #define FLASH_SECTOR_TOTAL 12U 313 314 /** 315 * @} 316 */ 317 318 /* Private macros ------------------------------------------------------------*/ 319 /** @defgroup FLASHEx_Private_Macros FLASH Private Macros 320 * @{ 321 */ 322 323 /** @defgroup FLASHEx_IS_FLASH_Definitions FLASH Private macros to check input parameters 324 * @{ 325 */ 326 327 #define IS_FLASH_TYPEERASE(VALUE)(((VALUE) == FLASH_TYPEERASE_SECTORS) || \ 328 ((VALUE) == FLASH_TYPEERASE_MASSERASE)) 329 330 #define IS_VOLTAGERANGE(RANGE)(((RANGE) == FLASH_VOLTAGE_RANGE_1) || \ 331 ((RANGE) == FLASH_VOLTAGE_RANGE_2) || \ 332 ((RANGE) == FLASH_VOLTAGE_RANGE_3) || \ 333 ((RANGE) == FLASH_VOLTAGE_RANGE_4)) 334 335 #define IS_WRPSTATE(VALUE)(((VALUE) == OB_WRPSTATE_DISABLE) || \ 336 ((VALUE) == OB_WRPSTATE_ENABLE)) 337 338 #define IS_OPTIONBYTE(VALUE)(((VALUE) <= (OPTIONBYTE_WRP|OPTIONBYTE_RDP|OPTIONBYTE_USER|OPTIONBYTE_BOR))) 339 340 #define IS_OB_RDP_LEVEL(LEVEL) (((LEVEL) == OB_RDP_LEVEL_0) ||\ 341 ((LEVEL) == OB_RDP_LEVEL_1) ||\ 342 ((LEVEL) == OB_RDP_LEVEL_2)) 343 344 #define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW)) 345 346 #define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NO_RST) || ((SOURCE) == OB_STOP_RST)) 347 348 #define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NO_RST) || ((SOURCE) == OB_STDBY_RST)) 349 350 #define IS_OB_BOR_LEVEL(LEVEL) (((LEVEL) == OB_BOR_LEVEL1) || ((LEVEL) == OB_BOR_LEVEL2) ||\ 351 ((LEVEL) == OB_BOR_LEVEL3) || ((LEVEL) == OB_BOR_OFF)) 352 353 354 #define IS_FLASH_LATENCY(LATENCY) (((LATENCY) == FLASH_LATENCY_0) || \ 355 ((LATENCY) == FLASH_LATENCY_1) || \ 356 ((LATENCY) == FLASH_LATENCY_2) || \ 357 ((LATENCY) == FLASH_LATENCY_3) || \ 358 ((LATENCY) == FLASH_LATENCY_4) || \ 359 ((LATENCY) == FLASH_LATENCY_5) || \ 360 ((LATENCY) == FLASH_LATENCY_6) || \ 361 ((LATENCY) == FLASH_LATENCY_7)) 362 #define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1)) 363 #define IS_FLASH_SECTOR(SECTOR) (((SECTOR) == FLASH_SECTOR_0) || ((SECTOR) == FLASH_SECTOR_1) ||\ 364 ((SECTOR) == FLASH_SECTOR_2) || ((SECTOR) == FLASH_SECTOR_3) ||\ 365 ((SECTOR) == FLASH_SECTOR_4) || ((SECTOR) == FLASH_SECTOR_5) ||\ 366 ((SECTOR) == FLASH_SECTOR_6) || ((SECTOR) == FLASH_SECTOR_7) ||\ 367 ((SECTOR) == FLASH_SECTOR_8) || ((SECTOR) == FLASH_SECTOR_9) ||\ 368 ((SECTOR) == FLASH_SECTOR_10) || ((SECTOR) == FLASH_SECTOR_11)) 369 370 371 372 #define IS_FLASH_ADDRESS(ADDRESS) ((((ADDRESS) >= FLASH_BASE) && ((ADDRESS) <= FLASH_END)) || \ 373 (((ADDRESS) >= FLASH_OTP_BASE) && ((ADDRESS) <= FLASH_OTP_END))) 374 #define IS_FLASH_NBSECTORS(NBSECTORS) (((NBSECTORS) != 0U) && ((NBSECTORS) <= FLASH_SECTOR_TOTAL)) 375 #define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) 376 377 /** 378 * @} 379 */ 380 381 /** 382 * @} 383 */ 384 385 /* Private functions ---------------------------------------------------------*/ 386 /** @defgroup FLASHEx_Private_Functions FLASH Private Functions 387 * @{ 388 */ 389 void FLASH_Erase_Sector(uint32_t Sector, uint8_t VoltageRange); 390 void FLASH_FlushCaches(void); 391 /** 392 * @} 393 */ 394 395 /** 396 * @} 397 */ 398 399 /** 400 * @} 401 */ 402 403 #ifdef __cplusplus 404 } 405 #endif 406 407 #endif /* __STM32F2xx_HAL_FLASH_EX_H */ 408 409 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 410