mbed library sources

Dependents:   frdm_kl05z_gpio_test

Fork of mbed-src by mbed official

Committer:
shaoziyang
Date:
Sat Sep 13 14:25:46 2014 +0000
Revision:
323:9e901b0a5aa1
Parent:
126:549ba18ddd81
test with CLOCK_SETUP = 0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 126:549ba18ddd81 1 /**
mbed_official 126:549ba18ddd81 2 ******************************************************************************
mbed_official 126:549ba18ddd81 3 * @file stm32f10x_flash.c
mbed_official 126:549ba18ddd81 4 * @author MCD Application Team
mbed_official 126:549ba18ddd81 5 * @version V3.6.1
mbed_official 126:549ba18ddd81 6 * @date 05-March-2012
mbed_official 126:549ba18ddd81 7 * @brief This file provides all the FLASH firmware functions.
mbed_official 126:549ba18ddd81 8 *******************************************************************************
mbed_official 126:549ba18ddd81 9 * Copyright (c) 2014, STMicroelectronics
mbed_official 126:549ba18ddd81 10 * All rights reserved.
mbed_official 126:549ba18ddd81 11 *
mbed_official 126:549ba18ddd81 12 * Redistribution and use in source and binary forms, with or without
mbed_official 126:549ba18ddd81 13 * modification, are permitted provided that the following conditions are met:
mbed_official 126:549ba18ddd81 14 *
mbed_official 126:549ba18ddd81 15 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 126:549ba18ddd81 16 * this list of conditions and the following disclaimer.
mbed_official 126:549ba18ddd81 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 126:549ba18ddd81 18 * this list of conditions and the following disclaimer in the documentation
mbed_official 126:549ba18ddd81 19 * and/or other materials provided with the distribution.
mbed_official 126:549ba18ddd81 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 126:549ba18ddd81 21 * may be used to endorse or promote products derived from this software
mbed_official 126:549ba18ddd81 22 * without specific prior written permission.
mbed_official 126:549ba18ddd81 23 *
mbed_official 126:549ba18ddd81 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 126:549ba18ddd81 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 126:549ba18ddd81 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 126:549ba18ddd81 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 126:549ba18ddd81 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 126:549ba18ddd81 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 126:549ba18ddd81 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 126:549ba18ddd81 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 126:549ba18ddd81 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 126:549ba18ddd81 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 126:549ba18ddd81 34 *******************************************************************************
mbed_official 126:549ba18ddd81 35 */
mbed_official 126:549ba18ddd81 36
mbed_official 126:549ba18ddd81 37 /* Includes ------------------------------------------------------------------*/
mbed_official 126:549ba18ddd81 38 #include "stm32f10x_flash.h"
mbed_official 126:549ba18ddd81 39
mbed_official 126:549ba18ddd81 40 /** @addtogroup STM32F10x_StdPeriph_Driver
mbed_official 126:549ba18ddd81 41 * @{
mbed_official 126:549ba18ddd81 42 */
mbed_official 126:549ba18ddd81 43
mbed_official 126:549ba18ddd81 44 /** @defgroup FLASH
mbed_official 126:549ba18ddd81 45 * @brief FLASH driver modules
mbed_official 126:549ba18ddd81 46 * @{
mbed_official 126:549ba18ddd81 47 */
mbed_official 126:549ba18ddd81 48
mbed_official 126:549ba18ddd81 49 /** @defgroup FLASH_Private_TypesDefinitions
mbed_official 126:549ba18ddd81 50 * @{
mbed_official 126:549ba18ddd81 51 */
mbed_official 126:549ba18ddd81 52
mbed_official 126:549ba18ddd81 53 /**
mbed_official 126:549ba18ddd81 54 * @}
mbed_official 126:549ba18ddd81 55 */
mbed_official 126:549ba18ddd81 56
mbed_official 126:549ba18ddd81 57 /** @defgroup FLASH_Private_Defines
mbed_official 126:549ba18ddd81 58 * @{
mbed_official 126:549ba18ddd81 59 */
mbed_official 126:549ba18ddd81 60
mbed_official 126:549ba18ddd81 61 /* Flash Access Control Register bits */
mbed_official 126:549ba18ddd81 62 #define ACR_LATENCY_Mask ((uint32_t)0x00000038)
mbed_official 126:549ba18ddd81 63 #define ACR_HLFCYA_Mask ((uint32_t)0xFFFFFFF7)
mbed_official 126:549ba18ddd81 64 #define ACR_PRFTBE_Mask ((uint32_t)0xFFFFFFEF)
mbed_official 126:549ba18ddd81 65
mbed_official 126:549ba18ddd81 66 /* Flash Access Control Register bits */
mbed_official 126:549ba18ddd81 67 #define ACR_PRFTBS_Mask ((uint32_t)0x00000020)
mbed_official 126:549ba18ddd81 68
mbed_official 126:549ba18ddd81 69 /* Flash Control Register bits */
mbed_official 126:549ba18ddd81 70 #define CR_PG_Set ((uint32_t)0x00000001)
mbed_official 126:549ba18ddd81 71 #define CR_PG_Reset ((uint32_t)0x00001FFE)
mbed_official 126:549ba18ddd81 72 #define CR_PER_Set ((uint32_t)0x00000002)
mbed_official 126:549ba18ddd81 73 #define CR_PER_Reset ((uint32_t)0x00001FFD)
mbed_official 126:549ba18ddd81 74 #define CR_MER_Set ((uint32_t)0x00000004)
mbed_official 126:549ba18ddd81 75 #define CR_MER_Reset ((uint32_t)0x00001FFB)
mbed_official 126:549ba18ddd81 76 #define CR_OPTPG_Set ((uint32_t)0x00000010)
mbed_official 126:549ba18ddd81 77 #define CR_OPTPG_Reset ((uint32_t)0x00001FEF)
mbed_official 126:549ba18ddd81 78 #define CR_OPTER_Set ((uint32_t)0x00000020)
mbed_official 126:549ba18ddd81 79 #define CR_OPTER_Reset ((uint32_t)0x00001FDF)
mbed_official 126:549ba18ddd81 80 #define CR_STRT_Set ((uint32_t)0x00000040)
mbed_official 126:549ba18ddd81 81 #define CR_LOCK_Set ((uint32_t)0x00000080)
mbed_official 126:549ba18ddd81 82
mbed_official 126:549ba18ddd81 83 /* FLASH Mask */
mbed_official 126:549ba18ddd81 84 #define RDPRT_Mask ((uint32_t)0x00000002)
mbed_official 126:549ba18ddd81 85 #define WRP0_Mask ((uint32_t)0x000000FF)
mbed_official 126:549ba18ddd81 86 #define WRP1_Mask ((uint32_t)0x0000FF00)
mbed_official 126:549ba18ddd81 87 #define WRP2_Mask ((uint32_t)0x00FF0000)
mbed_official 126:549ba18ddd81 88 #define WRP3_Mask ((uint32_t)0xFF000000)
mbed_official 126:549ba18ddd81 89 #define OB_USER_BFB2 ((uint16_t)0x0008)
mbed_official 126:549ba18ddd81 90
mbed_official 126:549ba18ddd81 91 /* FLASH BANK address */
mbed_official 126:549ba18ddd81 92 #define FLASH_BANK1_END_ADDRESS ((uint32_t)0x807FFFF)
mbed_official 126:549ba18ddd81 93
mbed_official 126:549ba18ddd81 94 /* Delay definition */
mbed_official 126:549ba18ddd81 95 #define EraseTimeout ((uint32_t)0x000B0000)
mbed_official 126:549ba18ddd81 96 #define ProgramTimeout ((uint32_t)0x00002000)
mbed_official 126:549ba18ddd81 97 /**
mbed_official 126:549ba18ddd81 98 * @}
mbed_official 126:549ba18ddd81 99 */
mbed_official 126:549ba18ddd81 100
mbed_official 126:549ba18ddd81 101 /** @defgroup FLASH_Private_Macros
mbed_official 126:549ba18ddd81 102 * @{
mbed_official 126:549ba18ddd81 103 */
mbed_official 126:549ba18ddd81 104
mbed_official 126:549ba18ddd81 105 /**
mbed_official 126:549ba18ddd81 106 * @}
mbed_official 126:549ba18ddd81 107 */
mbed_official 126:549ba18ddd81 108
mbed_official 126:549ba18ddd81 109 /** @defgroup FLASH_Private_Variables
mbed_official 126:549ba18ddd81 110 * @{
mbed_official 126:549ba18ddd81 111 */
mbed_official 126:549ba18ddd81 112
mbed_official 126:549ba18ddd81 113 /**
mbed_official 126:549ba18ddd81 114 * @}
mbed_official 126:549ba18ddd81 115 */
mbed_official 126:549ba18ddd81 116
mbed_official 126:549ba18ddd81 117 /** @defgroup FLASH_Private_FunctionPrototypes
mbed_official 126:549ba18ddd81 118 * @{
mbed_official 126:549ba18ddd81 119 */
mbed_official 126:549ba18ddd81 120
mbed_official 126:549ba18ddd81 121 /**
mbed_official 126:549ba18ddd81 122 * @}
mbed_official 126:549ba18ddd81 123 */
mbed_official 126:549ba18ddd81 124
mbed_official 126:549ba18ddd81 125 /** @defgroup FLASH_Private_Functions
mbed_official 126:549ba18ddd81 126 * @{
mbed_official 126:549ba18ddd81 127 */
mbed_official 126:549ba18ddd81 128
mbed_official 126:549ba18ddd81 129 /**
mbed_official 126:549ba18ddd81 130 @code
mbed_official 126:549ba18ddd81 131
mbed_official 126:549ba18ddd81 132 This driver provides functions to configure and program the Flash memory of all STM32F10x devices,
mbed_official 126:549ba18ddd81 133 including the latest STM32F10x_XL density devices.
mbed_official 126:549ba18ddd81 134
mbed_official 126:549ba18ddd81 135 STM32F10x_XL devices feature up to 1 Mbyte with dual bank architecture for read-while-write (RWW) capability:
mbed_official 126:549ba18ddd81 136 - bank1: fixed size of 512 Kbytes (256 pages of 2Kbytes each)
mbed_official 126:549ba18ddd81 137 - bank2: up to 512 Kbytes (up to 256 pages of 2Kbytes each)
mbed_official 126:549ba18ddd81 138 While other STM32F10x devices features only one bank with memory up to 512 Kbytes.
mbed_official 126:549ba18ddd81 139
mbed_official 126:549ba18ddd81 140 In version V3.3.0, some functions were updated and new ones were added to support
mbed_official 126:549ba18ddd81 141 STM32F10x_XL devices. Thus some functions manages all devices, while other are
mbed_official 126:549ba18ddd81 142 dedicated for XL devices only.
mbed_official 126:549ba18ddd81 143
mbed_official 126:549ba18ddd81 144 The table below presents the list of available functions depending on the used STM32F10x devices.
mbed_official 126:549ba18ddd81 145
mbed_official 126:549ba18ddd81 146 ***************************************************
mbed_official 126:549ba18ddd81 147 * Legacy functions used for all STM32F10x devices *
mbed_official 126:549ba18ddd81 148 ***************************************************
mbed_official 126:549ba18ddd81 149 +----------------------------------------------------------------------------------------------------------------------------------+
mbed_official 126:549ba18ddd81 150 | Functions prototypes |STM32F10x_XL|Other STM32F10x| Comments |
mbed_official 126:549ba18ddd81 151 | | devices | devices | |
mbed_official 126:549ba18ddd81 152 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 153 |FLASH_SetLatency | Yes | Yes | No change |
mbed_official 126:549ba18ddd81 154 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 155 |FLASH_HalfCycleAccessCmd | Yes | Yes | No change |
mbed_official 126:549ba18ddd81 156 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 157 |FLASH_PrefetchBufferCmd | Yes | Yes | No change |
mbed_official 126:549ba18ddd81 158 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 159 |FLASH_Unlock | Yes | Yes | - For STM32F10X_XL devices: unlock Bank1 and Bank2. |
mbed_official 126:549ba18ddd81 160 | | | | - For other devices: unlock Bank1 and it is equivalent |
mbed_official 126:549ba18ddd81 161 | | | | to FLASH_UnlockBank1 function. |
mbed_official 126:549ba18ddd81 162 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 163 |FLASH_Lock | Yes | Yes | - For STM32F10X_XL devices: lock Bank1 and Bank2. |
mbed_official 126:549ba18ddd81 164 | | | | - For other devices: lock Bank1 and it is equivalent |
mbed_official 126:549ba18ddd81 165 | | | | to FLASH_LockBank1 function. |
mbed_official 126:549ba18ddd81 166 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 167 |FLASH_ErasePage | Yes | Yes | - For STM32F10x_XL devices: erase a page in Bank1 and Bank2 |
mbed_official 126:549ba18ddd81 168 | | | | - For other devices: erase a page in Bank1 |
mbed_official 126:549ba18ddd81 169 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 170 |FLASH_EraseAllPages | Yes | Yes | - For STM32F10x_XL devices: erase all pages in Bank1 and Bank2 |
mbed_official 126:549ba18ddd81 171 | | | | - For other devices: erase all pages in Bank1 |
mbed_official 126:549ba18ddd81 172 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 173 |FLASH_EraseOptionBytes | Yes | Yes | No change |
mbed_official 126:549ba18ddd81 174 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 175 |FLASH_ProgramWord | Yes | Yes | Updated to program up to 1MByte (depending on the used device) |
mbed_official 126:549ba18ddd81 176 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 177 |FLASH_ProgramHalfWord | Yes | Yes | Updated to program up to 1MByte (depending on the used device) |
mbed_official 126:549ba18ddd81 178 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 179 |FLASH_ProgramOptionByteData | Yes | Yes | No change |
mbed_official 126:549ba18ddd81 180 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 181 |FLASH_EnableWriteProtection | Yes | Yes | No change |
mbed_official 126:549ba18ddd81 182 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 183 |FLASH_ReadOutProtection | Yes | Yes | No change |
mbed_official 126:549ba18ddd81 184 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 185 |FLASH_UserOptionByteConfig | Yes | Yes | No change |
mbed_official 126:549ba18ddd81 186 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 187 |FLASH_GetUserOptionByte | Yes | Yes | No change |
mbed_official 126:549ba18ddd81 188 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 189 |FLASH_GetWriteProtectionOptionByte | Yes | Yes | No change |
mbed_official 126:549ba18ddd81 190 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 191 |FLASH_GetReadOutProtectionStatus | Yes | Yes | No change |
mbed_official 126:549ba18ddd81 192 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 193 |FLASH_GetPrefetchBufferStatus | Yes | Yes | No change |
mbed_official 126:549ba18ddd81 194 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 195 |FLASH_ITConfig | Yes | Yes | - For STM32F10x_XL devices: enable Bank1 and Bank2's interrupts|
mbed_official 126:549ba18ddd81 196 | | | | - For other devices: enable Bank1's interrupts |
mbed_official 126:549ba18ddd81 197 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 198 |FLASH_GetFlagStatus | Yes | Yes | - For STM32F10x_XL devices: return Bank1 and Bank2's flag status|
mbed_official 126:549ba18ddd81 199 | | | | - For other devices: return Bank1's flag status |
mbed_official 126:549ba18ddd81 200 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 201 |FLASH_ClearFlag | Yes | Yes | - For STM32F10x_XL devices: clear Bank1 and Bank2's flag |
mbed_official 126:549ba18ddd81 202 | | | | - For other devices: clear Bank1's flag |
mbed_official 126:549ba18ddd81 203 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 204 |FLASH_GetStatus | Yes | Yes | - Return the status of Bank1 (for all devices) |
mbed_official 126:549ba18ddd81 205 | | | | equivalent to FLASH_GetBank1Status function |
mbed_official 126:549ba18ddd81 206 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 207 |FLASH_WaitForLastOperation | Yes | Yes | - Wait for Bank1 last operation (for all devices) |
mbed_official 126:549ba18ddd81 208 | | | | equivalent to: FLASH_WaitForLastBank1Operation function |
mbed_official 126:549ba18ddd81 209 +----------------------------------------------------------------------------------------------------------------------------------+
mbed_official 126:549ba18ddd81 210
mbed_official 126:549ba18ddd81 211 ************************************************************************************************************************
mbed_official 126:549ba18ddd81 212 * New functions used for all STM32F10x devices to manage Bank1: *
mbed_official 126:549ba18ddd81 213 * - These functions are mainly useful for STM32F10x_XL density devices, to have separate control for Bank1 and bank2 *
mbed_official 126:549ba18ddd81 214 * - For other devices, these functions are optional (covered by functions listed above) *
mbed_official 126:549ba18ddd81 215 ************************************************************************************************************************
mbed_official 126:549ba18ddd81 216 +----------------------------------------------------------------------------------------------------------------------------------+
mbed_official 126:549ba18ddd81 217 | Functions prototypes |STM32F10x_XL|Other STM32F10x| Comments |
mbed_official 126:549ba18ddd81 218 | | devices | devices | |
mbed_official 126:549ba18ddd81 219 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 220 | FLASH_UnlockBank1 | Yes | Yes | - Unlock Bank1 |
mbed_official 126:549ba18ddd81 221 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 222 |FLASH_LockBank1 | Yes | Yes | - Lock Bank1 |
mbed_official 126:549ba18ddd81 223 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 224 | FLASH_EraseAllBank1Pages | Yes | Yes | - Erase all pages in Bank1 |
mbed_official 126:549ba18ddd81 225 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 226 | FLASH_GetBank1Status | Yes | Yes | - Return the status of Bank1 |
mbed_official 126:549ba18ddd81 227 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 228 | FLASH_WaitForLastBank1Operation | Yes | Yes | - Wait for Bank1 last operation |
mbed_official 126:549ba18ddd81 229 +----------------------------------------------------------------------------------------------------------------------------------+
mbed_official 126:549ba18ddd81 230
mbed_official 126:549ba18ddd81 231 *****************************************************************************
mbed_official 126:549ba18ddd81 232 * New Functions used only with STM32F10x_XL density devices to manage Bank2 *
mbed_official 126:549ba18ddd81 233 *****************************************************************************
mbed_official 126:549ba18ddd81 234 +----------------------------------------------------------------------------------------------------------------------------------+
mbed_official 126:549ba18ddd81 235 | Functions prototypes |STM32F10x_XL|Other STM32F10x| Comments |
mbed_official 126:549ba18ddd81 236 | | devices | devices | |
mbed_official 126:549ba18ddd81 237 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 238 | FLASH_UnlockBank2 | Yes | No | - Unlock Bank2 |
mbed_official 126:549ba18ddd81 239 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 240 |FLASH_LockBank2 | Yes | No | - Lock Bank2 |
mbed_official 126:549ba18ddd81 241 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 242 | FLASH_EraseAllBank2Pages | Yes | No | - Erase all pages in Bank2 |
mbed_official 126:549ba18ddd81 243 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 244 | FLASH_GetBank2Status | Yes | No | - Return the status of Bank2 |
mbed_official 126:549ba18ddd81 245 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 246 | FLASH_WaitForLastBank2Operation | Yes | No | - Wait for Bank2 last operation |
mbed_official 126:549ba18ddd81 247 |----------------------------------------------------------------------------------------------------------------------------------|
mbed_official 126:549ba18ddd81 248 | FLASH_BootConfig | Yes | No | - Configure to boot from Bank1 or Bank2 |
mbed_official 126:549ba18ddd81 249 +----------------------------------------------------------------------------------------------------------------------------------+
mbed_official 126:549ba18ddd81 250 @endcode
mbed_official 126:549ba18ddd81 251 */
mbed_official 126:549ba18ddd81 252
mbed_official 126:549ba18ddd81 253
mbed_official 126:549ba18ddd81 254 /**
mbed_official 126:549ba18ddd81 255 * @brief Sets the code latency value.
mbed_official 126:549ba18ddd81 256 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 257 * @param FLASH_Latency: specifies the FLASH Latency value.
mbed_official 126:549ba18ddd81 258 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 259 * @arg FLASH_Latency_0: FLASH Zero Latency cycle
mbed_official 126:549ba18ddd81 260 * @arg FLASH_Latency_1: FLASH One Latency cycle
mbed_official 126:549ba18ddd81 261 * @arg FLASH_Latency_2: FLASH Two Latency cycles
mbed_official 126:549ba18ddd81 262 * @retval None
mbed_official 126:549ba18ddd81 263 */
mbed_official 126:549ba18ddd81 264 void FLASH_SetLatency(uint32_t FLASH_Latency)
mbed_official 126:549ba18ddd81 265 {
mbed_official 126:549ba18ddd81 266 uint32_t tmpreg = 0;
mbed_official 126:549ba18ddd81 267
mbed_official 126:549ba18ddd81 268 /* Check the parameters */
mbed_official 126:549ba18ddd81 269 assert_param(IS_FLASH_LATENCY(FLASH_Latency));
mbed_official 126:549ba18ddd81 270
mbed_official 126:549ba18ddd81 271 /* Read the ACR register */
mbed_official 126:549ba18ddd81 272 tmpreg = FLASH->ACR;
mbed_official 126:549ba18ddd81 273
mbed_official 126:549ba18ddd81 274 /* Sets the Latency value */
mbed_official 126:549ba18ddd81 275 tmpreg &= ACR_LATENCY_Mask;
mbed_official 126:549ba18ddd81 276 tmpreg |= FLASH_Latency;
mbed_official 126:549ba18ddd81 277
mbed_official 126:549ba18ddd81 278 /* Write the ACR register */
mbed_official 126:549ba18ddd81 279 FLASH->ACR = tmpreg;
mbed_official 126:549ba18ddd81 280 }
mbed_official 126:549ba18ddd81 281
mbed_official 126:549ba18ddd81 282 /**
mbed_official 126:549ba18ddd81 283 * @brief Enables or disables the Half cycle flash access.
mbed_official 126:549ba18ddd81 284 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 285 * @param FLASH_HalfCycleAccess: specifies the FLASH Half cycle Access mode.
mbed_official 126:549ba18ddd81 286 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 287 * @arg FLASH_HalfCycleAccess_Enable: FLASH Half Cycle Enable
mbed_official 126:549ba18ddd81 288 * @arg FLASH_HalfCycleAccess_Disable: FLASH Half Cycle Disable
mbed_official 126:549ba18ddd81 289 * @retval None
mbed_official 126:549ba18ddd81 290 */
mbed_official 126:549ba18ddd81 291 void FLASH_HalfCycleAccessCmd(uint32_t FLASH_HalfCycleAccess)
mbed_official 126:549ba18ddd81 292 {
mbed_official 126:549ba18ddd81 293 /* Check the parameters */
mbed_official 126:549ba18ddd81 294 assert_param(IS_FLASH_HALFCYCLEACCESS_STATE(FLASH_HalfCycleAccess));
mbed_official 126:549ba18ddd81 295
mbed_official 126:549ba18ddd81 296 /* Enable or disable the Half cycle access */
mbed_official 126:549ba18ddd81 297 FLASH->ACR &= ACR_HLFCYA_Mask;
mbed_official 126:549ba18ddd81 298 FLASH->ACR |= FLASH_HalfCycleAccess;
mbed_official 126:549ba18ddd81 299 }
mbed_official 126:549ba18ddd81 300
mbed_official 126:549ba18ddd81 301 /**
mbed_official 126:549ba18ddd81 302 * @brief Enables or disables the Prefetch Buffer.
mbed_official 126:549ba18ddd81 303 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 304 * @param FLASH_PrefetchBuffer: specifies the Prefetch buffer status.
mbed_official 126:549ba18ddd81 305 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 306 * @arg FLASH_PrefetchBuffer_Enable: FLASH Prefetch Buffer Enable
mbed_official 126:549ba18ddd81 307 * @arg FLASH_PrefetchBuffer_Disable: FLASH Prefetch Buffer Disable
mbed_official 126:549ba18ddd81 308 * @retval None
mbed_official 126:549ba18ddd81 309 */
mbed_official 126:549ba18ddd81 310 void FLASH_PrefetchBufferCmd(uint32_t FLASH_PrefetchBuffer)
mbed_official 126:549ba18ddd81 311 {
mbed_official 126:549ba18ddd81 312 /* Check the parameters */
mbed_official 126:549ba18ddd81 313 assert_param(IS_FLASH_PREFETCHBUFFER_STATE(FLASH_PrefetchBuffer));
mbed_official 126:549ba18ddd81 314
mbed_official 126:549ba18ddd81 315 /* Enable or disable the Prefetch Buffer */
mbed_official 126:549ba18ddd81 316 FLASH->ACR &= ACR_PRFTBE_Mask;
mbed_official 126:549ba18ddd81 317 FLASH->ACR |= FLASH_PrefetchBuffer;
mbed_official 126:549ba18ddd81 318 }
mbed_official 126:549ba18ddd81 319
mbed_official 126:549ba18ddd81 320 /**
mbed_official 126:549ba18ddd81 321 * @brief Unlocks the FLASH Program Erase Controller.
mbed_official 126:549ba18ddd81 322 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 323 * - For STM32F10X_XL devices this function unlocks Bank1 and Bank2.
mbed_official 126:549ba18ddd81 324 * - For all other devices it unlocks Bank1 and it is equivalent
mbed_official 126:549ba18ddd81 325 * to FLASH_UnlockBank1 function..
mbed_official 126:549ba18ddd81 326 * @param None
mbed_official 126:549ba18ddd81 327 * @retval None
mbed_official 126:549ba18ddd81 328 */
mbed_official 126:549ba18ddd81 329 void FLASH_Unlock(void)
mbed_official 126:549ba18ddd81 330 {
mbed_official 126:549ba18ddd81 331 /* Authorize the FPEC of Bank1 Access */
mbed_official 126:549ba18ddd81 332 FLASH->KEYR = FLASH_KEY1;
mbed_official 126:549ba18ddd81 333 FLASH->KEYR = FLASH_KEY2;
mbed_official 126:549ba18ddd81 334
mbed_official 126:549ba18ddd81 335 #ifdef STM32F10X_XL
mbed_official 126:549ba18ddd81 336 /* Authorize the FPEC of Bank2 Access */
mbed_official 126:549ba18ddd81 337 FLASH->KEYR2 = FLASH_KEY1;
mbed_official 126:549ba18ddd81 338 FLASH->KEYR2 = FLASH_KEY2;
mbed_official 126:549ba18ddd81 339 #endif /* STM32F10X_XL */
mbed_official 126:549ba18ddd81 340 }
mbed_official 126:549ba18ddd81 341 /**
mbed_official 126:549ba18ddd81 342 * @brief Unlocks the FLASH Bank1 Program Erase Controller.
mbed_official 126:549ba18ddd81 343 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 344 * - For STM32F10X_XL devices this function unlocks Bank1.
mbed_official 126:549ba18ddd81 345 * - For all other devices it unlocks Bank1 and it is
mbed_official 126:549ba18ddd81 346 * equivalent to FLASH_Unlock function.
mbed_official 126:549ba18ddd81 347 * @param None
mbed_official 126:549ba18ddd81 348 * @retval None
mbed_official 126:549ba18ddd81 349 */
mbed_official 126:549ba18ddd81 350 void FLASH_UnlockBank1(void)
mbed_official 126:549ba18ddd81 351 {
mbed_official 126:549ba18ddd81 352 /* Authorize the FPEC of Bank1 Access */
mbed_official 126:549ba18ddd81 353 FLASH->KEYR = FLASH_KEY1;
mbed_official 126:549ba18ddd81 354 FLASH->KEYR = FLASH_KEY2;
mbed_official 126:549ba18ddd81 355 }
mbed_official 126:549ba18ddd81 356
mbed_official 126:549ba18ddd81 357 #ifdef STM32F10X_XL
mbed_official 126:549ba18ddd81 358 /**
mbed_official 126:549ba18ddd81 359 * @brief Unlocks the FLASH Bank2 Program Erase Controller.
mbed_official 126:549ba18ddd81 360 * @note This function can be used only for STM32F10X_XL density devices.
mbed_official 126:549ba18ddd81 361 * @param None
mbed_official 126:549ba18ddd81 362 * @retval None
mbed_official 126:549ba18ddd81 363 */
mbed_official 126:549ba18ddd81 364 void FLASH_UnlockBank2(void)
mbed_official 126:549ba18ddd81 365 {
mbed_official 126:549ba18ddd81 366 /* Authorize the FPEC of Bank2 Access */
mbed_official 126:549ba18ddd81 367 FLASH->KEYR2 = FLASH_KEY1;
mbed_official 126:549ba18ddd81 368 FLASH->KEYR2 = FLASH_KEY2;
mbed_official 126:549ba18ddd81 369
mbed_official 126:549ba18ddd81 370 }
mbed_official 126:549ba18ddd81 371 #endif /* STM32F10X_XL */
mbed_official 126:549ba18ddd81 372
mbed_official 126:549ba18ddd81 373 /**
mbed_official 126:549ba18ddd81 374 * @brief Locks the FLASH Program Erase Controller.
mbed_official 126:549ba18ddd81 375 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 376 * - For STM32F10X_XL devices this function Locks Bank1 and Bank2.
mbed_official 126:549ba18ddd81 377 * - For all other devices it Locks Bank1 and it is equivalent
mbed_official 126:549ba18ddd81 378 * to FLASH_LockBank1 function.
mbed_official 126:549ba18ddd81 379 * @param None
mbed_official 126:549ba18ddd81 380 * @retval None
mbed_official 126:549ba18ddd81 381 */
mbed_official 126:549ba18ddd81 382 void FLASH_Lock(void)
mbed_official 126:549ba18ddd81 383 {
mbed_official 126:549ba18ddd81 384 /* Set the Lock Bit to lock the FPEC and the CR of Bank1 */
mbed_official 126:549ba18ddd81 385 FLASH->CR |= CR_LOCK_Set;
mbed_official 126:549ba18ddd81 386
mbed_official 126:549ba18ddd81 387 #ifdef STM32F10X_XL
mbed_official 126:549ba18ddd81 388 /* Set the Lock Bit to lock the FPEC and the CR of Bank2 */
mbed_official 126:549ba18ddd81 389 FLASH->CR2 |= CR_LOCK_Set;
mbed_official 126:549ba18ddd81 390 #endif /* STM32F10X_XL */
mbed_official 126:549ba18ddd81 391 }
mbed_official 126:549ba18ddd81 392
mbed_official 126:549ba18ddd81 393 /**
mbed_official 126:549ba18ddd81 394 * @brief Locks the FLASH Bank1 Program Erase Controller.
mbed_official 126:549ba18ddd81 395 * @note this function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 396 * - For STM32F10X_XL devices this function Locks Bank1.
mbed_official 126:549ba18ddd81 397 * - For all other devices it Locks Bank1 and it is equivalent
mbed_official 126:549ba18ddd81 398 * to FLASH_Lock function.
mbed_official 126:549ba18ddd81 399 * @param None
mbed_official 126:549ba18ddd81 400 * @retval None
mbed_official 126:549ba18ddd81 401 */
mbed_official 126:549ba18ddd81 402 void FLASH_LockBank1(void)
mbed_official 126:549ba18ddd81 403 {
mbed_official 126:549ba18ddd81 404 /* Set the Lock Bit to lock the FPEC and the CR of Bank1 */
mbed_official 126:549ba18ddd81 405 FLASH->CR |= CR_LOCK_Set;
mbed_official 126:549ba18ddd81 406 }
mbed_official 126:549ba18ddd81 407
mbed_official 126:549ba18ddd81 408 #ifdef STM32F10X_XL
mbed_official 126:549ba18ddd81 409 /**
mbed_official 126:549ba18ddd81 410 * @brief Locks the FLASH Bank2 Program Erase Controller.
mbed_official 126:549ba18ddd81 411 * @note This function can be used only for STM32F10X_XL density devices.
mbed_official 126:549ba18ddd81 412 * @param None
mbed_official 126:549ba18ddd81 413 * @retval None
mbed_official 126:549ba18ddd81 414 */
mbed_official 126:549ba18ddd81 415 void FLASH_LockBank2(void)
mbed_official 126:549ba18ddd81 416 {
mbed_official 126:549ba18ddd81 417 /* Set the Lock Bit to lock the FPEC and the CR of Bank2 */
mbed_official 126:549ba18ddd81 418 FLASH->CR2 |= CR_LOCK_Set;
mbed_official 126:549ba18ddd81 419 }
mbed_official 126:549ba18ddd81 420 #endif /* STM32F10X_XL */
mbed_official 126:549ba18ddd81 421
mbed_official 126:549ba18ddd81 422 /**
mbed_official 126:549ba18ddd81 423 * @brief Erases a specified FLASH page.
mbed_official 126:549ba18ddd81 424 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 425 * @param Page_Address: The page address to be erased.
mbed_official 126:549ba18ddd81 426 * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG,
mbed_official 126:549ba18ddd81 427 * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 126:549ba18ddd81 428 */
mbed_official 126:549ba18ddd81 429 FLASH_Status FLASH_ErasePage(uint32_t Page_Address)
mbed_official 126:549ba18ddd81 430 {
mbed_official 126:549ba18ddd81 431 FLASH_Status status = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 432 /* Check the parameters */
mbed_official 126:549ba18ddd81 433 assert_param(IS_FLASH_ADDRESS(Page_Address));
mbed_official 126:549ba18ddd81 434
mbed_official 126:549ba18ddd81 435 #ifdef STM32F10X_XL
mbed_official 126:549ba18ddd81 436 if(Page_Address < FLASH_BANK1_END_ADDRESS)
mbed_official 126:549ba18ddd81 437 {
mbed_official 126:549ba18ddd81 438 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 439 status = FLASH_WaitForLastBank1Operation(EraseTimeout);
mbed_official 126:549ba18ddd81 440 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 441 {
mbed_official 126:549ba18ddd81 442 /* if the previous operation is completed, proceed to erase the page */
mbed_official 126:549ba18ddd81 443 FLASH->CR|= CR_PER_Set;
mbed_official 126:549ba18ddd81 444 FLASH->AR = Page_Address;
mbed_official 126:549ba18ddd81 445 FLASH->CR|= CR_STRT_Set;
mbed_official 126:549ba18ddd81 446
mbed_official 126:549ba18ddd81 447 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 448 status = FLASH_WaitForLastBank1Operation(EraseTimeout);
mbed_official 126:549ba18ddd81 449
mbed_official 126:549ba18ddd81 450 /* Disable the PER Bit */
mbed_official 126:549ba18ddd81 451 FLASH->CR &= CR_PER_Reset;
mbed_official 126:549ba18ddd81 452 }
mbed_official 126:549ba18ddd81 453 }
mbed_official 126:549ba18ddd81 454 else
mbed_official 126:549ba18ddd81 455 {
mbed_official 126:549ba18ddd81 456 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 457 status = FLASH_WaitForLastBank2Operation(EraseTimeout);
mbed_official 126:549ba18ddd81 458 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 459 {
mbed_official 126:549ba18ddd81 460 /* if the previous operation is completed, proceed to erase the page */
mbed_official 126:549ba18ddd81 461 FLASH->CR2|= CR_PER_Set;
mbed_official 126:549ba18ddd81 462 FLASH->AR2 = Page_Address;
mbed_official 126:549ba18ddd81 463 FLASH->CR2|= CR_STRT_Set;
mbed_official 126:549ba18ddd81 464
mbed_official 126:549ba18ddd81 465 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 466 status = FLASH_WaitForLastBank2Operation(EraseTimeout);
mbed_official 126:549ba18ddd81 467
mbed_official 126:549ba18ddd81 468 /* Disable the PER Bit */
mbed_official 126:549ba18ddd81 469 FLASH->CR2 &= CR_PER_Reset;
mbed_official 126:549ba18ddd81 470 }
mbed_official 126:549ba18ddd81 471 }
mbed_official 126:549ba18ddd81 472 #else
mbed_official 126:549ba18ddd81 473 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 474 status = FLASH_WaitForLastOperation(EraseTimeout);
mbed_official 126:549ba18ddd81 475
mbed_official 126:549ba18ddd81 476 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 477 {
mbed_official 126:549ba18ddd81 478 /* if the previous operation is completed, proceed to erase the page */
mbed_official 126:549ba18ddd81 479 FLASH->CR|= CR_PER_Set;
mbed_official 126:549ba18ddd81 480 FLASH->AR = Page_Address;
mbed_official 126:549ba18ddd81 481 FLASH->CR|= CR_STRT_Set;
mbed_official 126:549ba18ddd81 482
mbed_official 126:549ba18ddd81 483 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 484 status = FLASH_WaitForLastOperation(EraseTimeout);
mbed_official 126:549ba18ddd81 485
mbed_official 126:549ba18ddd81 486 /* Disable the PER Bit */
mbed_official 126:549ba18ddd81 487 FLASH->CR &= CR_PER_Reset;
mbed_official 126:549ba18ddd81 488 }
mbed_official 126:549ba18ddd81 489 #endif /* STM32F10X_XL */
mbed_official 126:549ba18ddd81 490
mbed_official 126:549ba18ddd81 491 /* Return the Erase Status */
mbed_official 126:549ba18ddd81 492 return status;
mbed_official 126:549ba18ddd81 493 }
mbed_official 126:549ba18ddd81 494
mbed_official 126:549ba18ddd81 495 /**
mbed_official 126:549ba18ddd81 496 * @brief Erases all FLASH pages.
mbed_official 126:549ba18ddd81 497 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 498 * @param None
mbed_official 126:549ba18ddd81 499 * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG,
mbed_official 126:549ba18ddd81 500 * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 126:549ba18ddd81 501 */
mbed_official 126:549ba18ddd81 502 FLASH_Status FLASH_EraseAllPages(void)
mbed_official 126:549ba18ddd81 503 {
mbed_official 126:549ba18ddd81 504 FLASH_Status status = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 505
mbed_official 126:549ba18ddd81 506 #ifdef STM32F10X_XL
mbed_official 126:549ba18ddd81 507 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 508 status = FLASH_WaitForLastBank1Operation(EraseTimeout);
mbed_official 126:549ba18ddd81 509
mbed_official 126:549ba18ddd81 510 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 511 {
mbed_official 126:549ba18ddd81 512 /* if the previous operation is completed, proceed to erase all pages */
mbed_official 126:549ba18ddd81 513 FLASH->CR |= CR_MER_Set;
mbed_official 126:549ba18ddd81 514 FLASH->CR |= CR_STRT_Set;
mbed_official 126:549ba18ddd81 515
mbed_official 126:549ba18ddd81 516 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 517 status = FLASH_WaitForLastBank1Operation(EraseTimeout);
mbed_official 126:549ba18ddd81 518
mbed_official 126:549ba18ddd81 519 /* Disable the MER Bit */
mbed_official 126:549ba18ddd81 520 FLASH->CR &= CR_MER_Reset;
mbed_official 126:549ba18ddd81 521 }
mbed_official 126:549ba18ddd81 522 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 523 {
mbed_official 126:549ba18ddd81 524 /* if the previous operation is completed, proceed to erase all pages */
mbed_official 126:549ba18ddd81 525 FLASH->CR2 |= CR_MER_Set;
mbed_official 126:549ba18ddd81 526 FLASH->CR2 |= CR_STRT_Set;
mbed_official 126:549ba18ddd81 527
mbed_official 126:549ba18ddd81 528 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 529 status = FLASH_WaitForLastBank2Operation(EraseTimeout);
mbed_official 126:549ba18ddd81 530
mbed_official 126:549ba18ddd81 531 /* Disable the MER Bit */
mbed_official 126:549ba18ddd81 532 FLASH->CR2 &= CR_MER_Reset;
mbed_official 126:549ba18ddd81 533 }
mbed_official 126:549ba18ddd81 534 #else
mbed_official 126:549ba18ddd81 535 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 536 status = FLASH_WaitForLastOperation(EraseTimeout);
mbed_official 126:549ba18ddd81 537 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 538 {
mbed_official 126:549ba18ddd81 539 /* if the previous operation is completed, proceed to erase all pages */
mbed_official 126:549ba18ddd81 540 FLASH->CR |= CR_MER_Set;
mbed_official 126:549ba18ddd81 541 FLASH->CR |= CR_STRT_Set;
mbed_official 126:549ba18ddd81 542
mbed_official 126:549ba18ddd81 543 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 544 status = FLASH_WaitForLastOperation(EraseTimeout);
mbed_official 126:549ba18ddd81 545
mbed_official 126:549ba18ddd81 546 /* Disable the MER Bit */
mbed_official 126:549ba18ddd81 547 FLASH->CR &= CR_MER_Reset;
mbed_official 126:549ba18ddd81 548 }
mbed_official 126:549ba18ddd81 549 #endif /* STM32F10X_XL */
mbed_official 126:549ba18ddd81 550
mbed_official 126:549ba18ddd81 551 /* Return the Erase Status */
mbed_official 126:549ba18ddd81 552 return status;
mbed_official 126:549ba18ddd81 553 }
mbed_official 126:549ba18ddd81 554
mbed_official 126:549ba18ddd81 555 /**
mbed_official 126:549ba18ddd81 556 * @brief Erases all Bank1 FLASH pages.
mbed_official 126:549ba18ddd81 557 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 558 * - For STM32F10X_XL devices this function erases all Bank1 pages.
mbed_official 126:549ba18ddd81 559 * - For all other devices it erases all Bank1 pages and it is equivalent
mbed_official 126:549ba18ddd81 560 * to FLASH_EraseAllPages function.
mbed_official 126:549ba18ddd81 561 * @param None
mbed_official 126:549ba18ddd81 562 * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG,
mbed_official 126:549ba18ddd81 563 * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 126:549ba18ddd81 564 */
mbed_official 126:549ba18ddd81 565 FLASH_Status FLASH_EraseAllBank1Pages(void)
mbed_official 126:549ba18ddd81 566 {
mbed_official 126:549ba18ddd81 567 FLASH_Status status = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 568 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 569 status = FLASH_WaitForLastBank1Operation(EraseTimeout);
mbed_official 126:549ba18ddd81 570
mbed_official 126:549ba18ddd81 571 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 572 {
mbed_official 126:549ba18ddd81 573 /* if the previous operation is completed, proceed to erase all pages */
mbed_official 126:549ba18ddd81 574 FLASH->CR |= CR_MER_Set;
mbed_official 126:549ba18ddd81 575 FLASH->CR |= CR_STRT_Set;
mbed_official 126:549ba18ddd81 576
mbed_official 126:549ba18ddd81 577 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 578 status = FLASH_WaitForLastBank1Operation(EraseTimeout);
mbed_official 126:549ba18ddd81 579
mbed_official 126:549ba18ddd81 580 /* Disable the MER Bit */
mbed_official 126:549ba18ddd81 581 FLASH->CR &= CR_MER_Reset;
mbed_official 126:549ba18ddd81 582 }
mbed_official 126:549ba18ddd81 583 /* Return the Erase Status */
mbed_official 126:549ba18ddd81 584 return status;
mbed_official 126:549ba18ddd81 585 }
mbed_official 126:549ba18ddd81 586
mbed_official 126:549ba18ddd81 587 #ifdef STM32F10X_XL
mbed_official 126:549ba18ddd81 588 /**
mbed_official 126:549ba18ddd81 589 * @brief Erases all Bank2 FLASH pages.
mbed_official 126:549ba18ddd81 590 * @note This function can be used only for STM32F10x_XL density devices.
mbed_official 126:549ba18ddd81 591 * @param None
mbed_official 126:549ba18ddd81 592 * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG,
mbed_official 126:549ba18ddd81 593 * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 126:549ba18ddd81 594 */
mbed_official 126:549ba18ddd81 595 FLASH_Status FLASH_EraseAllBank2Pages(void)
mbed_official 126:549ba18ddd81 596 {
mbed_official 126:549ba18ddd81 597 FLASH_Status status = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 598 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 599 status = FLASH_WaitForLastBank2Operation(EraseTimeout);
mbed_official 126:549ba18ddd81 600
mbed_official 126:549ba18ddd81 601 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 602 {
mbed_official 126:549ba18ddd81 603 /* if the previous operation is completed, proceed to erase all pages */
mbed_official 126:549ba18ddd81 604 FLASH->CR2 |= CR_MER_Set;
mbed_official 126:549ba18ddd81 605 FLASH->CR2 |= CR_STRT_Set;
mbed_official 126:549ba18ddd81 606
mbed_official 126:549ba18ddd81 607 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 608 status = FLASH_WaitForLastBank2Operation(EraseTimeout);
mbed_official 126:549ba18ddd81 609
mbed_official 126:549ba18ddd81 610 /* Disable the MER Bit */
mbed_official 126:549ba18ddd81 611 FLASH->CR2 &= CR_MER_Reset;
mbed_official 126:549ba18ddd81 612 }
mbed_official 126:549ba18ddd81 613 /* Return the Erase Status */
mbed_official 126:549ba18ddd81 614 return status;
mbed_official 126:549ba18ddd81 615 }
mbed_official 126:549ba18ddd81 616 #endif /* STM32F10X_XL */
mbed_official 126:549ba18ddd81 617
mbed_official 126:549ba18ddd81 618 /**
mbed_official 126:549ba18ddd81 619 * @brief Erases the FLASH option bytes.
mbed_official 126:549ba18ddd81 620 * @note This functions erases all option bytes except the Read protection (RDP).
mbed_official 126:549ba18ddd81 621 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 622 * @param None
mbed_official 126:549ba18ddd81 623 * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG,
mbed_official 126:549ba18ddd81 624 * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 126:549ba18ddd81 625 */
mbed_official 126:549ba18ddd81 626 FLASH_Status FLASH_EraseOptionBytes(void)
mbed_official 126:549ba18ddd81 627 {
mbed_official 126:549ba18ddd81 628 uint16_t rdptmp = RDP_Key;
mbed_official 126:549ba18ddd81 629
mbed_official 126:549ba18ddd81 630 FLASH_Status status = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 631
mbed_official 126:549ba18ddd81 632 /* Get the actual read protection Option Byte value */
mbed_official 126:549ba18ddd81 633 if(FLASH_GetReadOutProtectionStatus() != RESET)
mbed_official 126:549ba18ddd81 634 {
mbed_official 126:549ba18ddd81 635 rdptmp = 0x00;
mbed_official 126:549ba18ddd81 636 }
mbed_official 126:549ba18ddd81 637
mbed_official 126:549ba18ddd81 638 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 639 status = FLASH_WaitForLastOperation(EraseTimeout);
mbed_official 126:549ba18ddd81 640 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 641 {
mbed_official 126:549ba18ddd81 642 /* Authorize the small information block programming */
mbed_official 126:549ba18ddd81 643 FLASH->OPTKEYR = FLASH_KEY1;
mbed_official 126:549ba18ddd81 644 FLASH->OPTKEYR = FLASH_KEY2;
mbed_official 126:549ba18ddd81 645
mbed_official 126:549ba18ddd81 646 /* if the previous operation is completed, proceed to erase the option bytes */
mbed_official 126:549ba18ddd81 647 FLASH->CR |= CR_OPTER_Set;
mbed_official 126:549ba18ddd81 648 FLASH->CR |= CR_STRT_Set;
mbed_official 126:549ba18ddd81 649 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 650 status = FLASH_WaitForLastOperation(EraseTimeout);
mbed_official 126:549ba18ddd81 651
mbed_official 126:549ba18ddd81 652 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 653 {
mbed_official 126:549ba18ddd81 654 /* if the erase operation is completed, disable the OPTER Bit */
mbed_official 126:549ba18ddd81 655 FLASH->CR &= CR_OPTER_Reset;
mbed_official 126:549ba18ddd81 656
mbed_official 126:549ba18ddd81 657 /* Enable the Option Bytes Programming operation */
mbed_official 126:549ba18ddd81 658 FLASH->CR |= CR_OPTPG_Set;
mbed_official 126:549ba18ddd81 659 /* Restore the last read protection Option Byte value */
mbed_official 126:549ba18ddd81 660 OB->RDP = (uint16_t)rdptmp;
mbed_official 126:549ba18ddd81 661 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 662 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 663
mbed_official 126:549ba18ddd81 664 if(status != FLASH_TIMEOUT)
mbed_official 126:549ba18ddd81 665 {
mbed_official 126:549ba18ddd81 666 /* if the program operation is completed, disable the OPTPG Bit */
mbed_official 126:549ba18ddd81 667 FLASH->CR &= CR_OPTPG_Reset;
mbed_official 126:549ba18ddd81 668 }
mbed_official 126:549ba18ddd81 669 }
mbed_official 126:549ba18ddd81 670 else
mbed_official 126:549ba18ddd81 671 {
mbed_official 126:549ba18ddd81 672 if (status != FLASH_TIMEOUT)
mbed_official 126:549ba18ddd81 673 {
mbed_official 126:549ba18ddd81 674 /* Disable the OPTPG Bit */
mbed_official 126:549ba18ddd81 675 FLASH->CR &= CR_OPTPG_Reset;
mbed_official 126:549ba18ddd81 676 }
mbed_official 126:549ba18ddd81 677 }
mbed_official 126:549ba18ddd81 678 }
mbed_official 126:549ba18ddd81 679 /* Return the erase status */
mbed_official 126:549ba18ddd81 680 return status;
mbed_official 126:549ba18ddd81 681 }
mbed_official 126:549ba18ddd81 682
mbed_official 126:549ba18ddd81 683 /**
mbed_official 126:549ba18ddd81 684 * @brief Programs a word at a specified address.
mbed_official 126:549ba18ddd81 685 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 686 * @param Address: specifies the address to be programmed.
mbed_official 126:549ba18ddd81 687 * @param Data: specifies the data to be programmed.
mbed_official 126:549ba18ddd81 688 * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG,
mbed_official 126:549ba18ddd81 689 * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 126:549ba18ddd81 690 */
mbed_official 126:549ba18ddd81 691 FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data)
mbed_official 126:549ba18ddd81 692 {
mbed_official 126:549ba18ddd81 693 FLASH_Status status = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 694 __IO uint32_t tmp = 0;
mbed_official 126:549ba18ddd81 695
mbed_official 126:549ba18ddd81 696 /* Check the parameters */
mbed_official 126:549ba18ddd81 697 assert_param(IS_FLASH_ADDRESS(Address));
mbed_official 126:549ba18ddd81 698
mbed_official 126:549ba18ddd81 699 #ifdef STM32F10X_XL
mbed_official 126:549ba18ddd81 700 if(Address < FLASH_BANK1_END_ADDRESS - 2)
mbed_official 126:549ba18ddd81 701 {
mbed_official 126:549ba18ddd81 702 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 703 status = FLASH_WaitForLastBank1Operation(ProgramTimeout);
mbed_official 126:549ba18ddd81 704 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 705 {
mbed_official 126:549ba18ddd81 706 /* if the previous operation is completed, proceed to program the new first
mbed_official 126:549ba18ddd81 707 half word */
mbed_official 126:549ba18ddd81 708 FLASH->CR |= CR_PG_Set;
mbed_official 126:549ba18ddd81 709
mbed_official 126:549ba18ddd81 710 *(__IO uint16_t*)Address = (uint16_t)Data;
mbed_official 126:549ba18ddd81 711 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 712 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 713
mbed_official 126:549ba18ddd81 714 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 715 {
mbed_official 126:549ba18ddd81 716 /* if the previous operation is completed, proceed to program the new second
mbed_official 126:549ba18ddd81 717 half word */
mbed_official 126:549ba18ddd81 718 tmp = Address + 2;
mbed_official 126:549ba18ddd81 719
mbed_official 126:549ba18ddd81 720 *(__IO uint16_t*) tmp = Data >> 16;
mbed_official 126:549ba18ddd81 721
mbed_official 126:549ba18ddd81 722 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 723 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 724
mbed_official 126:549ba18ddd81 725 /* Disable the PG Bit */
mbed_official 126:549ba18ddd81 726 FLASH->CR &= CR_PG_Reset;
mbed_official 126:549ba18ddd81 727 }
mbed_official 126:549ba18ddd81 728 else
mbed_official 126:549ba18ddd81 729 {
mbed_official 126:549ba18ddd81 730 /* Disable the PG Bit */
mbed_official 126:549ba18ddd81 731 FLASH->CR &= CR_PG_Reset;
mbed_official 126:549ba18ddd81 732 }
mbed_official 126:549ba18ddd81 733 }
mbed_official 126:549ba18ddd81 734 }
mbed_official 126:549ba18ddd81 735 else if(Address == (FLASH_BANK1_END_ADDRESS - 1))
mbed_official 126:549ba18ddd81 736 {
mbed_official 126:549ba18ddd81 737 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 738 status = FLASH_WaitForLastBank1Operation(ProgramTimeout);
mbed_official 126:549ba18ddd81 739
mbed_official 126:549ba18ddd81 740 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 741 {
mbed_official 126:549ba18ddd81 742 /* if the previous operation is completed, proceed to program the new first
mbed_official 126:549ba18ddd81 743 half word */
mbed_official 126:549ba18ddd81 744 FLASH->CR |= CR_PG_Set;
mbed_official 126:549ba18ddd81 745
mbed_official 126:549ba18ddd81 746 *(__IO uint16_t*)Address = (uint16_t)Data;
mbed_official 126:549ba18ddd81 747
mbed_official 126:549ba18ddd81 748 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 749 status = FLASH_WaitForLastBank1Operation(ProgramTimeout);
mbed_official 126:549ba18ddd81 750
mbed_official 126:549ba18ddd81 751 /* Disable the PG Bit */
mbed_official 126:549ba18ddd81 752 FLASH->CR &= CR_PG_Reset;
mbed_official 126:549ba18ddd81 753 }
mbed_official 126:549ba18ddd81 754 else
mbed_official 126:549ba18ddd81 755 {
mbed_official 126:549ba18ddd81 756 /* Disable the PG Bit */
mbed_official 126:549ba18ddd81 757 FLASH->CR &= CR_PG_Reset;
mbed_official 126:549ba18ddd81 758 }
mbed_official 126:549ba18ddd81 759
mbed_official 126:549ba18ddd81 760 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 761 status = FLASH_WaitForLastBank2Operation(ProgramTimeout);
mbed_official 126:549ba18ddd81 762
mbed_official 126:549ba18ddd81 763 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 764 {
mbed_official 126:549ba18ddd81 765 /* if the previous operation is completed, proceed to program the new second
mbed_official 126:549ba18ddd81 766 half word */
mbed_official 126:549ba18ddd81 767 FLASH->CR2 |= CR_PG_Set;
mbed_official 126:549ba18ddd81 768 tmp = Address + 2;
mbed_official 126:549ba18ddd81 769
mbed_official 126:549ba18ddd81 770 *(__IO uint16_t*) tmp = Data >> 16;
mbed_official 126:549ba18ddd81 771
mbed_official 126:549ba18ddd81 772 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 773 status = FLASH_WaitForLastBank2Operation(ProgramTimeout);
mbed_official 126:549ba18ddd81 774
mbed_official 126:549ba18ddd81 775 /* Disable the PG Bit */
mbed_official 126:549ba18ddd81 776 FLASH->CR2 &= CR_PG_Reset;
mbed_official 126:549ba18ddd81 777 }
mbed_official 126:549ba18ddd81 778 else
mbed_official 126:549ba18ddd81 779 {
mbed_official 126:549ba18ddd81 780 /* Disable the PG Bit */
mbed_official 126:549ba18ddd81 781 FLASH->CR2 &= CR_PG_Reset;
mbed_official 126:549ba18ddd81 782 }
mbed_official 126:549ba18ddd81 783 }
mbed_official 126:549ba18ddd81 784 else
mbed_official 126:549ba18ddd81 785 {
mbed_official 126:549ba18ddd81 786 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 787 status = FLASH_WaitForLastBank2Operation(ProgramTimeout);
mbed_official 126:549ba18ddd81 788
mbed_official 126:549ba18ddd81 789 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 790 {
mbed_official 126:549ba18ddd81 791 /* if the previous operation is completed, proceed to program the new first
mbed_official 126:549ba18ddd81 792 half word */
mbed_official 126:549ba18ddd81 793 FLASH->CR2 |= CR_PG_Set;
mbed_official 126:549ba18ddd81 794
mbed_official 126:549ba18ddd81 795 *(__IO uint16_t*)Address = (uint16_t)Data;
mbed_official 126:549ba18ddd81 796 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 797 status = FLASH_WaitForLastBank2Operation(ProgramTimeout);
mbed_official 126:549ba18ddd81 798
mbed_official 126:549ba18ddd81 799 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 800 {
mbed_official 126:549ba18ddd81 801 /* if the previous operation is completed, proceed to program the new second
mbed_official 126:549ba18ddd81 802 half word */
mbed_official 126:549ba18ddd81 803 tmp = Address + 2;
mbed_official 126:549ba18ddd81 804
mbed_official 126:549ba18ddd81 805 *(__IO uint16_t*) tmp = Data >> 16;
mbed_official 126:549ba18ddd81 806
mbed_official 126:549ba18ddd81 807 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 808 status = FLASH_WaitForLastBank2Operation(ProgramTimeout);
mbed_official 126:549ba18ddd81 809
mbed_official 126:549ba18ddd81 810 /* Disable the PG Bit */
mbed_official 126:549ba18ddd81 811 FLASH->CR2 &= CR_PG_Reset;
mbed_official 126:549ba18ddd81 812 }
mbed_official 126:549ba18ddd81 813 else
mbed_official 126:549ba18ddd81 814 {
mbed_official 126:549ba18ddd81 815 /* Disable the PG Bit */
mbed_official 126:549ba18ddd81 816 FLASH->CR2 &= CR_PG_Reset;
mbed_official 126:549ba18ddd81 817 }
mbed_official 126:549ba18ddd81 818 }
mbed_official 126:549ba18ddd81 819 }
mbed_official 126:549ba18ddd81 820 #else
mbed_official 126:549ba18ddd81 821 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 822 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 823
mbed_official 126:549ba18ddd81 824 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 825 {
mbed_official 126:549ba18ddd81 826 /* if the previous operation is completed, proceed to program the new first
mbed_official 126:549ba18ddd81 827 half word */
mbed_official 126:549ba18ddd81 828 FLASH->CR |= CR_PG_Set;
mbed_official 126:549ba18ddd81 829
mbed_official 126:549ba18ddd81 830 *(__IO uint16_t*)Address = (uint16_t)Data;
mbed_official 126:549ba18ddd81 831 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 832 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 833
mbed_official 126:549ba18ddd81 834 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 835 {
mbed_official 126:549ba18ddd81 836 /* if the previous operation is completed, proceed to program the new second
mbed_official 126:549ba18ddd81 837 half word */
mbed_official 126:549ba18ddd81 838 tmp = Address + 2;
mbed_official 126:549ba18ddd81 839
mbed_official 126:549ba18ddd81 840 *(__IO uint16_t*) tmp = Data >> 16;
mbed_official 126:549ba18ddd81 841
mbed_official 126:549ba18ddd81 842 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 843 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 844
mbed_official 126:549ba18ddd81 845 /* Disable the PG Bit */
mbed_official 126:549ba18ddd81 846 FLASH->CR &= CR_PG_Reset;
mbed_official 126:549ba18ddd81 847 }
mbed_official 126:549ba18ddd81 848 else
mbed_official 126:549ba18ddd81 849 {
mbed_official 126:549ba18ddd81 850 /* Disable the PG Bit */
mbed_official 126:549ba18ddd81 851 FLASH->CR &= CR_PG_Reset;
mbed_official 126:549ba18ddd81 852 }
mbed_official 126:549ba18ddd81 853 }
mbed_official 126:549ba18ddd81 854 #endif /* STM32F10X_XL */
mbed_official 126:549ba18ddd81 855
mbed_official 126:549ba18ddd81 856 /* Return the Program Status */
mbed_official 126:549ba18ddd81 857 return status;
mbed_official 126:549ba18ddd81 858 }
mbed_official 126:549ba18ddd81 859
mbed_official 126:549ba18ddd81 860 /**
mbed_official 126:549ba18ddd81 861 * @brief Programs a half word at a specified address.
mbed_official 126:549ba18ddd81 862 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 863 * @param Address: specifies the address to be programmed.
mbed_official 126:549ba18ddd81 864 * @param Data: specifies the data to be programmed.
mbed_official 126:549ba18ddd81 865 * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG,
mbed_official 126:549ba18ddd81 866 * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 126:549ba18ddd81 867 */
mbed_official 126:549ba18ddd81 868 FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data)
mbed_official 126:549ba18ddd81 869 {
mbed_official 126:549ba18ddd81 870 FLASH_Status status = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 871 /* Check the parameters */
mbed_official 126:549ba18ddd81 872 assert_param(IS_FLASH_ADDRESS(Address));
mbed_official 126:549ba18ddd81 873
mbed_official 126:549ba18ddd81 874 #ifdef STM32F10X_XL
mbed_official 126:549ba18ddd81 875 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 876 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 877
mbed_official 126:549ba18ddd81 878 if(Address < FLASH_BANK1_END_ADDRESS)
mbed_official 126:549ba18ddd81 879 {
mbed_official 126:549ba18ddd81 880 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 881 {
mbed_official 126:549ba18ddd81 882 /* if the previous operation is completed, proceed to program the new data */
mbed_official 126:549ba18ddd81 883 FLASH->CR |= CR_PG_Set;
mbed_official 126:549ba18ddd81 884
mbed_official 126:549ba18ddd81 885 *(__IO uint16_t*)Address = Data;
mbed_official 126:549ba18ddd81 886 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 887 status = FLASH_WaitForLastBank1Operation(ProgramTimeout);
mbed_official 126:549ba18ddd81 888
mbed_official 126:549ba18ddd81 889 /* Disable the PG Bit */
mbed_official 126:549ba18ddd81 890 FLASH->CR &= CR_PG_Reset;
mbed_official 126:549ba18ddd81 891 }
mbed_official 126:549ba18ddd81 892 }
mbed_official 126:549ba18ddd81 893 else
mbed_official 126:549ba18ddd81 894 {
mbed_official 126:549ba18ddd81 895 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 896 {
mbed_official 126:549ba18ddd81 897 /* if the previous operation is completed, proceed to program the new data */
mbed_official 126:549ba18ddd81 898 FLASH->CR2 |= CR_PG_Set;
mbed_official 126:549ba18ddd81 899
mbed_official 126:549ba18ddd81 900 *(__IO uint16_t*)Address = Data;
mbed_official 126:549ba18ddd81 901 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 902 status = FLASH_WaitForLastBank2Operation(ProgramTimeout);
mbed_official 126:549ba18ddd81 903
mbed_official 126:549ba18ddd81 904 /* Disable the PG Bit */
mbed_official 126:549ba18ddd81 905 FLASH->CR2 &= CR_PG_Reset;
mbed_official 126:549ba18ddd81 906 }
mbed_official 126:549ba18ddd81 907 }
mbed_official 126:549ba18ddd81 908 #else
mbed_official 126:549ba18ddd81 909 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 910 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 911
mbed_official 126:549ba18ddd81 912 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 913 {
mbed_official 126:549ba18ddd81 914 /* if the previous operation is completed, proceed to program the new data */
mbed_official 126:549ba18ddd81 915 FLASH->CR |= CR_PG_Set;
mbed_official 126:549ba18ddd81 916
mbed_official 126:549ba18ddd81 917 *(__IO uint16_t*)Address = Data;
mbed_official 126:549ba18ddd81 918 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 919 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 920
mbed_official 126:549ba18ddd81 921 /* Disable the PG Bit */
mbed_official 126:549ba18ddd81 922 FLASH->CR &= CR_PG_Reset;
mbed_official 126:549ba18ddd81 923 }
mbed_official 126:549ba18ddd81 924 #endif /* STM32F10X_XL */
mbed_official 126:549ba18ddd81 925
mbed_official 126:549ba18ddd81 926 /* Return the Program Status */
mbed_official 126:549ba18ddd81 927 return status;
mbed_official 126:549ba18ddd81 928 }
mbed_official 126:549ba18ddd81 929
mbed_official 126:549ba18ddd81 930 /**
mbed_official 126:549ba18ddd81 931 * @brief Programs a half word at a specified Option Byte Data address.
mbed_official 126:549ba18ddd81 932 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 933 * @param Address: specifies the address to be programmed.
mbed_official 126:549ba18ddd81 934 * This parameter can be 0x1FFFF804 or 0x1FFFF806.
mbed_official 126:549ba18ddd81 935 * @param Data: specifies the data to be programmed.
mbed_official 126:549ba18ddd81 936 * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG,
mbed_official 126:549ba18ddd81 937 * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 126:549ba18ddd81 938 */
mbed_official 126:549ba18ddd81 939 FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data)
mbed_official 126:549ba18ddd81 940 {
mbed_official 126:549ba18ddd81 941 FLASH_Status status = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 942 /* Check the parameters */
mbed_official 126:549ba18ddd81 943 assert_param(IS_OB_DATA_ADDRESS(Address));
mbed_official 126:549ba18ddd81 944 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 945
mbed_official 126:549ba18ddd81 946 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 947 {
mbed_official 126:549ba18ddd81 948 /* Authorize the small information block programming */
mbed_official 126:549ba18ddd81 949 FLASH->OPTKEYR = FLASH_KEY1;
mbed_official 126:549ba18ddd81 950 FLASH->OPTKEYR = FLASH_KEY2;
mbed_official 126:549ba18ddd81 951 /* Enables the Option Bytes Programming operation */
mbed_official 126:549ba18ddd81 952 FLASH->CR |= CR_OPTPG_Set;
mbed_official 126:549ba18ddd81 953 *(__IO uint16_t*)Address = Data;
mbed_official 126:549ba18ddd81 954
mbed_official 126:549ba18ddd81 955 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 956 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 957 if(status != FLASH_TIMEOUT)
mbed_official 126:549ba18ddd81 958 {
mbed_official 126:549ba18ddd81 959 /* if the program operation is completed, disable the OPTPG Bit */
mbed_official 126:549ba18ddd81 960 FLASH->CR &= CR_OPTPG_Reset;
mbed_official 126:549ba18ddd81 961 }
mbed_official 126:549ba18ddd81 962 }
mbed_official 126:549ba18ddd81 963 /* Return the Option Byte Data Program Status */
mbed_official 126:549ba18ddd81 964 return status;
mbed_official 126:549ba18ddd81 965 }
mbed_official 126:549ba18ddd81 966
mbed_official 126:549ba18ddd81 967 /**
mbed_official 126:549ba18ddd81 968 * @brief Write protects the desired pages
mbed_official 126:549ba18ddd81 969 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 970 * @param FLASH_Pages: specifies the address of the pages to be write protected.
mbed_official 126:549ba18ddd81 971 * This parameter can be:
mbed_official 126:549ba18ddd81 972 * @arg For @b STM32_Low-density_devices: value between FLASH_WRProt_Pages0to3 and FLASH_WRProt_Pages28to31
mbed_official 126:549ba18ddd81 973 * @arg For @b STM32_Medium-density_devices: value between FLASH_WRProt_Pages0to3
mbed_official 126:549ba18ddd81 974 * and FLASH_WRProt_Pages124to127
mbed_official 126:549ba18ddd81 975 * @arg For @b STM32_High-density_devices: value between FLASH_WRProt_Pages0to1 and
mbed_official 126:549ba18ddd81 976 * FLASH_WRProt_Pages60to61 or FLASH_WRProt_Pages62to255
mbed_official 126:549ba18ddd81 977 * @arg For @b STM32_Connectivity_line_devices: value between FLASH_WRProt_Pages0to1 and
mbed_official 126:549ba18ddd81 978 * FLASH_WRProt_Pages60to61 or FLASH_WRProt_Pages62to127
mbed_official 126:549ba18ddd81 979 * @arg For @b STM32_XL-density_devices: value between FLASH_WRProt_Pages0to1 and
mbed_official 126:549ba18ddd81 980 * FLASH_WRProt_Pages60to61 or FLASH_WRProt_Pages62to511
mbed_official 126:549ba18ddd81 981 * @arg FLASH_WRProt_AllPages
mbed_official 126:549ba18ddd81 982 * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG,
mbed_official 126:549ba18ddd81 983 * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 126:549ba18ddd81 984 */
mbed_official 126:549ba18ddd81 985 FLASH_Status FLASH_EnableWriteProtection(uint32_t FLASH_Pages)
mbed_official 126:549ba18ddd81 986 {
mbed_official 126:549ba18ddd81 987 uint16_t WRP0_Data = 0xFFFF, WRP1_Data = 0xFFFF, WRP2_Data = 0xFFFF, WRP3_Data = 0xFFFF;
mbed_official 126:549ba18ddd81 988
mbed_official 126:549ba18ddd81 989 FLASH_Status status = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 990
mbed_official 126:549ba18ddd81 991 /* Check the parameters */
mbed_official 126:549ba18ddd81 992 assert_param(IS_FLASH_WRPROT_PAGE(FLASH_Pages));
mbed_official 126:549ba18ddd81 993
mbed_official 126:549ba18ddd81 994 FLASH_Pages = (uint32_t)(~FLASH_Pages);
mbed_official 126:549ba18ddd81 995 WRP0_Data = (uint16_t)(FLASH_Pages & WRP0_Mask);
mbed_official 126:549ba18ddd81 996 WRP1_Data = (uint16_t)((FLASH_Pages & WRP1_Mask) >> 8);
mbed_official 126:549ba18ddd81 997 WRP2_Data = (uint16_t)((FLASH_Pages & WRP2_Mask) >> 16);
mbed_official 126:549ba18ddd81 998 WRP3_Data = (uint16_t)((FLASH_Pages & WRP3_Mask) >> 24);
mbed_official 126:549ba18ddd81 999
mbed_official 126:549ba18ddd81 1000 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 1001 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 1002
mbed_official 126:549ba18ddd81 1003 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 1004 {
mbed_official 126:549ba18ddd81 1005 /* Authorizes the small information block programming */
mbed_official 126:549ba18ddd81 1006 FLASH->OPTKEYR = FLASH_KEY1;
mbed_official 126:549ba18ddd81 1007 FLASH->OPTKEYR = FLASH_KEY2;
mbed_official 126:549ba18ddd81 1008 FLASH->CR |= CR_OPTPG_Set;
mbed_official 126:549ba18ddd81 1009 if(WRP0_Data != 0xFF)
mbed_official 126:549ba18ddd81 1010 {
mbed_official 126:549ba18ddd81 1011 OB->WRP0 = WRP0_Data;
mbed_official 126:549ba18ddd81 1012
mbed_official 126:549ba18ddd81 1013 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 1014 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 1015 }
mbed_official 126:549ba18ddd81 1016 if((status == FLASH_COMPLETE) && (WRP1_Data != 0xFF))
mbed_official 126:549ba18ddd81 1017 {
mbed_official 126:549ba18ddd81 1018 OB->WRP1 = WRP1_Data;
mbed_official 126:549ba18ddd81 1019
mbed_official 126:549ba18ddd81 1020 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 1021 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 1022 }
mbed_official 126:549ba18ddd81 1023 if((status == FLASH_COMPLETE) && (WRP2_Data != 0xFF))
mbed_official 126:549ba18ddd81 1024 {
mbed_official 126:549ba18ddd81 1025 OB->WRP2 = WRP2_Data;
mbed_official 126:549ba18ddd81 1026
mbed_official 126:549ba18ddd81 1027 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 1028 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 1029 }
mbed_official 126:549ba18ddd81 1030
mbed_official 126:549ba18ddd81 1031 if((status == FLASH_COMPLETE)&& (WRP3_Data != 0xFF))
mbed_official 126:549ba18ddd81 1032 {
mbed_official 126:549ba18ddd81 1033 OB->WRP3 = WRP3_Data;
mbed_official 126:549ba18ddd81 1034
mbed_official 126:549ba18ddd81 1035 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 1036 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 1037 }
mbed_official 126:549ba18ddd81 1038
mbed_official 126:549ba18ddd81 1039 if(status != FLASH_TIMEOUT)
mbed_official 126:549ba18ddd81 1040 {
mbed_official 126:549ba18ddd81 1041 /* if the program operation is completed, disable the OPTPG Bit */
mbed_official 126:549ba18ddd81 1042 FLASH->CR &= CR_OPTPG_Reset;
mbed_official 126:549ba18ddd81 1043 }
mbed_official 126:549ba18ddd81 1044 }
mbed_official 126:549ba18ddd81 1045 /* Return the write protection operation Status */
mbed_official 126:549ba18ddd81 1046 return status;
mbed_official 126:549ba18ddd81 1047 }
mbed_official 126:549ba18ddd81 1048
mbed_official 126:549ba18ddd81 1049 /**
mbed_official 126:549ba18ddd81 1050 * @brief Enables or disables the read out protection.
mbed_official 126:549ba18ddd81 1051 * @note If the user has already programmed the other option bytes before calling
mbed_official 126:549ba18ddd81 1052 * this function, he must re-program them since this function erases all option bytes.
mbed_official 126:549ba18ddd81 1053 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 1054 * @param Newstate: new state of the ReadOut Protection.
mbed_official 126:549ba18ddd81 1055 * This parameter can be: ENABLE or DISABLE.
mbed_official 126:549ba18ddd81 1056 * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG,
mbed_official 126:549ba18ddd81 1057 * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 126:549ba18ddd81 1058 */
mbed_official 126:549ba18ddd81 1059 FLASH_Status FLASH_ReadOutProtection(FunctionalState NewState)
mbed_official 126:549ba18ddd81 1060 {
mbed_official 126:549ba18ddd81 1061 FLASH_Status status = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 1062 /* Check the parameters */
mbed_official 126:549ba18ddd81 1063 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 126:549ba18ddd81 1064 status = FLASH_WaitForLastOperation(EraseTimeout);
mbed_official 126:549ba18ddd81 1065 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 1066 {
mbed_official 126:549ba18ddd81 1067 /* Authorizes the small information block programming */
mbed_official 126:549ba18ddd81 1068 FLASH->OPTKEYR = FLASH_KEY1;
mbed_official 126:549ba18ddd81 1069 FLASH->OPTKEYR = FLASH_KEY2;
mbed_official 126:549ba18ddd81 1070 FLASH->CR |= CR_OPTER_Set;
mbed_official 126:549ba18ddd81 1071 FLASH->CR |= CR_STRT_Set;
mbed_official 126:549ba18ddd81 1072 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 1073 status = FLASH_WaitForLastOperation(EraseTimeout);
mbed_official 126:549ba18ddd81 1074 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 1075 {
mbed_official 126:549ba18ddd81 1076 /* if the erase operation is completed, disable the OPTER Bit */
mbed_official 126:549ba18ddd81 1077 FLASH->CR &= CR_OPTER_Reset;
mbed_official 126:549ba18ddd81 1078 /* Enable the Option Bytes Programming operation */
mbed_official 126:549ba18ddd81 1079 FLASH->CR |= CR_OPTPG_Set;
mbed_official 126:549ba18ddd81 1080 if(NewState != DISABLE)
mbed_official 126:549ba18ddd81 1081 {
mbed_official 126:549ba18ddd81 1082 OB->RDP = 0x00;
mbed_official 126:549ba18ddd81 1083 }
mbed_official 126:549ba18ddd81 1084 else
mbed_official 126:549ba18ddd81 1085 {
mbed_official 126:549ba18ddd81 1086 OB->RDP = RDP_Key;
mbed_official 126:549ba18ddd81 1087 }
mbed_official 126:549ba18ddd81 1088 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 1089 status = FLASH_WaitForLastOperation(EraseTimeout);
mbed_official 126:549ba18ddd81 1090
mbed_official 126:549ba18ddd81 1091 if(status != FLASH_TIMEOUT)
mbed_official 126:549ba18ddd81 1092 {
mbed_official 126:549ba18ddd81 1093 /* if the program operation is completed, disable the OPTPG Bit */
mbed_official 126:549ba18ddd81 1094 FLASH->CR &= CR_OPTPG_Reset;
mbed_official 126:549ba18ddd81 1095 }
mbed_official 126:549ba18ddd81 1096 }
mbed_official 126:549ba18ddd81 1097 else
mbed_official 126:549ba18ddd81 1098 {
mbed_official 126:549ba18ddd81 1099 if(status != FLASH_TIMEOUT)
mbed_official 126:549ba18ddd81 1100 {
mbed_official 126:549ba18ddd81 1101 /* Disable the OPTER Bit */
mbed_official 126:549ba18ddd81 1102 FLASH->CR &= CR_OPTER_Reset;
mbed_official 126:549ba18ddd81 1103 }
mbed_official 126:549ba18ddd81 1104 }
mbed_official 126:549ba18ddd81 1105 }
mbed_official 126:549ba18ddd81 1106 /* Return the protection operation Status */
mbed_official 126:549ba18ddd81 1107 return status;
mbed_official 126:549ba18ddd81 1108 }
mbed_official 126:549ba18ddd81 1109
mbed_official 126:549ba18ddd81 1110 /**
mbed_official 126:549ba18ddd81 1111 * @brief Programs the FLASH User Option Byte: IWDG_SW / RST_STOP / RST_STDBY.
mbed_official 126:549ba18ddd81 1112 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 1113 * @param OB_IWDG: Selects the IWDG mode
mbed_official 126:549ba18ddd81 1114 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 1115 * @arg OB_IWDG_SW: Software IWDG selected
mbed_official 126:549ba18ddd81 1116 * @arg OB_IWDG_HW: Hardware IWDG selected
mbed_official 126:549ba18ddd81 1117 * @param OB_STOP: Reset event when entering STOP mode.
mbed_official 126:549ba18ddd81 1118 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 1119 * @arg OB_STOP_NoRST: No reset generated when entering in STOP
mbed_official 126:549ba18ddd81 1120 * @arg OB_STOP_RST: Reset generated when entering in STOP
mbed_official 126:549ba18ddd81 1121 * @param OB_STDBY: Reset event when entering Standby mode.
mbed_official 126:549ba18ddd81 1122 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 1123 * @arg OB_STDBY_NoRST: No reset generated when entering in STANDBY
mbed_official 126:549ba18ddd81 1124 * @arg OB_STDBY_RST: Reset generated when entering in STANDBY
mbed_official 126:549ba18ddd81 1125 * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG,
mbed_official 126:549ba18ddd81 1126 * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 126:549ba18ddd81 1127 */
mbed_official 126:549ba18ddd81 1128 FLASH_Status FLASH_UserOptionByteConfig(uint16_t OB_IWDG, uint16_t OB_STOP, uint16_t OB_STDBY)
mbed_official 126:549ba18ddd81 1129 {
mbed_official 126:549ba18ddd81 1130 FLASH_Status status = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 1131
mbed_official 126:549ba18ddd81 1132 /* Check the parameters */
mbed_official 126:549ba18ddd81 1133 assert_param(IS_OB_IWDG_SOURCE(OB_IWDG));
mbed_official 126:549ba18ddd81 1134 assert_param(IS_OB_STOP_SOURCE(OB_STOP));
mbed_official 126:549ba18ddd81 1135 assert_param(IS_OB_STDBY_SOURCE(OB_STDBY));
mbed_official 126:549ba18ddd81 1136
mbed_official 126:549ba18ddd81 1137 /* Authorize the small information block programming */
mbed_official 126:549ba18ddd81 1138 FLASH->OPTKEYR = FLASH_KEY1;
mbed_official 126:549ba18ddd81 1139 FLASH->OPTKEYR = FLASH_KEY2;
mbed_official 126:549ba18ddd81 1140
mbed_official 126:549ba18ddd81 1141 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 1142 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 1143
mbed_official 126:549ba18ddd81 1144 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 1145 {
mbed_official 126:549ba18ddd81 1146 /* Enable the Option Bytes Programming operation */
mbed_official 126:549ba18ddd81 1147 FLASH->CR |= CR_OPTPG_Set;
mbed_official 126:549ba18ddd81 1148
mbed_official 126:549ba18ddd81 1149 OB->USER = OB_IWDG | (uint16_t)(OB_STOP | (uint16_t)(OB_STDBY | ((uint16_t)0xF8)));
mbed_official 126:549ba18ddd81 1150
mbed_official 126:549ba18ddd81 1151 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 1152 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 1153 if(status != FLASH_TIMEOUT)
mbed_official 126:549ba18ddd81 1154 {
mbed_official 126:549ba18ddd81 1155 /* if the program operation is completed, disable the OPTPG Bit */
mbed_official 126:549ba18ddd81 1156 FLASH->CR &= CR_OPTPG_Reset;
mbed_official 126:549ba18ddd81 1157 }
mbed_official 126:549ba18ddd81 1158 }
mbed_official 126:549ba18ddd81 1159 /* Return the Option Byte program Status */
mbed_official 126:549ba18ddd81 1160 return status;
mbed_official 126:549ba18ddd81 1161 }
mbed_official 126:549ba18ddd81 1162
mbed_official 126:549ba18ddd81 1163 #ifdef STM32F10X_XL
mbed_official 126:549ba18ddd81 1164 /**
mbed_official 126:549ba18ddd81 1165 * @brief Configures to boot from Bank1 or Bank2.
mbed_official 126:549ba18ddd81 1166 * @note This function can be used only for STM32F10x_XL density devices.
mbed_official 126:549ba18ddd81 1167 * @param FLASH_BOOT: select the FLASH Bank to boot from.
mbed_official 126:549ba18ddd81 1168 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 1169 * @arg FLASH_BOOT_Bank1: At startup, if boot pins are set in boot from user Flash
mbed_official 126:549ba18ddd81 1170 * position and this parameter is selected the device will boot from Bank1(Default).
mbed_official 126:549ba18ddd81 1171 * @arg FLASH_BOOT_Bank2: At startup, if boot pins are set in boot from user Flash
mbed_official 126:549ba18ddd81 1172 * position and this parameter is selected the device will boot from Bank2 or Bank1,
mbed_official 126:549ba18ddd81 1173 * depending on the activation of the bank. The active banks are checked in
mbed_official 126:549ba18ddd81 1174 * the following order: Bank2, followed by Bank1.
mbed_official 126:549ba18ddd81 1175 * The active bank is recognized by the value programmed at the base address
mbed_official 126:549ba18ddd81 1176 * of the respective bank (corresponding to the initial stack pointer value
mbed_official 126:549ba18ddd81 1177 * in the interrupt vector table).
mbed_official 126:549ba18ddd81 1178 * For more information, please refer to AN2606 from www.st.com.
mbed_official 126:549ba18ddd81 1179 * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG,
mbed_official 126:549ba18ddd81 1180 * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 126:549ba18ddd81 1181 */
mbed_official 126:549ba18ddd81 1182 FLASH_Status FLASH_BootConfig(uint16_t FLASH_BOOT)
mbed_official 126:549ba18ddd81 1183 {
mbed_official 126:549ba18ddd81 1184 FLASH_Status status = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 1185 assert_param(IS_FLASH_BOOT(FLASH_BOOT));
mbed_official 126:549ba18ddd81 1186 /* Authorize the small information block programming */
mbed_official 126:549ba18ddd81 1187 FLASH->OPTKEYR = FLASH_KEY1;
mbed_official 126:549ba18ddd81 1188 FLASH->OPTKEYR = FLASH_KEY2;
mbed_official 126:549ba18ddd81 1189
mbed_official 126:549ba18ddd81 1190 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 1191 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 1192
mbed_official 126:549ba18ddd81 1193 if(status == FLASH_COMPLETE)
mbed_official 126:549ba18ddd81 1194 {
mbed_official 126:549ba18ddd81 1195 /* Enable the Option Bytes Programming operation */
mbed_official 126:549ba18ddd81 1196 FLASH->CR |= CR_OPTPG_Set;
mbed_official 126:549ba18ddd81 1197
mbed_official 126:549ba18ddd81 1198 if(FLASH_BOOT == FLASH_BOOT_Bank1)
mbed_official 126:549ba18ddd81 1199 {
mbed_official 126:549ba18ddd81 1200 OB->USER |= OB_USER_BFB2;
mbed_official 126:549ba18ddd81 1201 }
mbed_official 126:549ba18ddd81 1202 else
mbed_official 126:549ba18ddd81 1203 {
mbed_official 126:549ba18ddd81 1204 OB->USER &= (uint16_t)(~(uint16_t)(OB_USER_BFB2));
mbed_official 126:549ba18ddd81 1205 }
mbed_official 126:549ba18ddd81 1206 /* Wait for last operation to be completed */
mbed_official 126:549ba18ddd81 1207 status = FLASH_WaitForLastOperation(ProgramTimeout);
mbed_official 126:549ba18ddd81 1208 if(status != FLASH_TIMEOUT)
mbed_official 126:549ba18ddd81 1209 {
mbed_official 126:549ba18ddd81 1210 /* if the program operation is completed, disable the OPTPG Bit */
mbed_official 126:549ba18ddd81 1211 FLASH->CR &= CR_OPTPG_Reset;
mbed_official 126:549ba18ddd81 1212 }
mbed_official 126:549ba18ddd81 1213 }
mbed_official 126:549ba18ddd81 1214 /* Return the Option Byte program Status */
mbed_official 126:549ba18ddd81 1215 return status;
mbed_official 126:549ba18ddd81 1216 }
mbed_official 126:549ba18ddd81 1217 #endif /* STM32F10X_XL */
mbed_official 126:549ba18ddd81 1218
mbed_official 126:549ba18ddd81 1219 /**
mbed_official 126:549ba18ddd81 1220 * @brief Returns the FLASH User Option Bytes values.
mbed_official 126:549ba18ddd81 1221 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 1222 * @param None
mbed_official 126:549ba18ddd81 1223 * @retval The FLASH User Option Bytes values:IWDG_SW(Bit0), RST_STOP(Bit1)
mbed_official 126:549ba18ddd81 1224 * and RST_STDBY(Bit2).
mbed_official 126:549ba18ddd81 1225 */
mbed_official 126:549ba18ddd81 1226 uint32_t FLASH_GetUserOptionByte(void)
mbed_official 126:549ba18ddd81 1227 {
mbed_official 126:549ba18ddd81 1228 /* Return the User Option Byte */
mbed_official 126:549ba18ddd81 1229 return (uint32_t)(FLASH->OBR >> 2);
mbed_official 126:549ba18ddd81 1230 }
mbed_official 126:549ba18ddd81 1231
mbed_official 126:549ba18ddd81 1232 /**
mbed_official 126:549ba18ddd81 1233 * @brief Returns the FLASH Write Protection Option Bytes Register value.
mbed_official 126:549ba18ddd81 1234 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 1235 * @param None
mbed_official 126:549ba18ddd81 1236 * @retval The FLASH Write Protection Option Bytes Register value
mbed_official 126:549ba18ddd81 1237 */
mbed_official 126:549ba18ddd81 1238 uint32_t FLASH_GetWriteProtectionOptionByte(void)
mbed_official 126:549ba18ddd81 1239 {
mbed_official 126:549ba18ddd81 1240 /* Return the Flash write protection Register value */
mbed_official 126:549ba18ddd81 1241 return (uint32_t)(FLASH->WRPR);
mbed_official 126:549ba18ddd81 1242 }
mbed_official 126:549ba18ddd81 1243
mbed_official 126:549ba18ddd81 1244 /**
mbed_official 126:549ba18ddd81 1245 * @brief Checks whether the FLASH Read Out Protection Status is set or not.
mbed_official 126:549ba18ddd81 1246 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 1247 * @param None
mbed_official 126:549ba18ddd81 1248 * @retval FLASH ReadOut Protection Status(SET or RESET)
mbed_official 126:549ba18ddd81 1249 */
mbed_official 126:549ba18ddd81 1250 FlagStatus FLASH_GetReadOutProtectionStatus(void)
mbed_official 126:549ba18ddd81 1251 {
mbed_official 126:549ba18ddd81 1252 FlagStatus readoutstatus = RESET;
mbed_official 126:549ba18ddd81 1253 if ((FLASH->OBR & RDPRT_Mask) != (uint32_t)RESET)
mbed_official 126:549ba18ddd81 1254 {
mbed_official 126:549ba18ddd81 1255 readoutstatus = SET;
mbed_official 126:549ba18ddd81 1256 }
mbed_official 126:549ba18ddd81 1257 else
mbed_official 126:549ba18ddd81 1258 {
mbed_official 126:549ba18ddd81 1259 readoutstatus = RESET;
mbed_official 126:549ba18ddd81 1260 }
mbed_official 126:549ba18ddd81 1261 return readoutstatus;
mbed_official 126:549ba18ddd81 1262 }
mbed_official 126:549ba18ddd81 1263
mbed_official 126:549ba18ddd81 1264 /**
mbed_official 126:549ba18ddd81 1265 * @brief Checks whether the FLASH Prefetch Buffer status is set or not.
mbed_official 126:549ba18ddd81 1266 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 1267 * @param None
mbed_official 126:549ba18ddd81 1268 * @retval FLASH Prefetch Buffer Status (SET or RESET).
mbed_official 126:549ba18ddd81 1269 */
mbed_official 126:549ba18ddd81 1270 FlagStatus FLASH_GetPrefetchBufferStatus(void)
mbed_official 126:549ba18ddd81 1271 {
mbed_official 126:549ba18ddd81 1272 FlagStatus bitstatus = RESET;
mbed_official 126:549ba18ddd81 1273
mbed_official 126:549ba18ddd81 1274 if ((FLASH->ACR & ACR_PRFTBS_Mask) != (uint32_t)RESET)
mbed_official 126:549ba18ddd81 1275 {
mbed_official 126:549ba18ddd81 1276 bitstatus = SET;
mbed_official 126:549ba18ddd81 1277 }
mbed_official 126:549ba18ddd81 1278 else
mbed_official 126:549ba18ddd81 1279 {
mbed_official 126:549ba18ddd81 1280 bitstatus = RESET;
mbed_official 126:549ba18ddd81 1281 }
mbed_official 126:549ba18ddd81 1282 /* Return the new state of FLASH Prefetch Buffer Status (SET or RESET) */
mbed_official 126:549ba18ddd81 1283 return bitstatus;
mbed_official 126:549ba18ddd81 1284 }
mbed_official 126:549ba18ddd81 1285
mbed_official 126:549ba18ddd81 1286 /**
mbed_official 126:549ba18ddd81 1287 * @brief Enables or disables the specified FLASH interrupts.
mbed_official 126:549ba18ddd81 1288 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 1289 * - For STM32F10X_XL devices, enables or disables the specified FLASH interrupts
mbed_official 126:549ba18ddd81 1290 for Bank1 and Bank2.
mbed_official 126:549ba18ddd81 1291 * - For other devices it enables or disables the specified FLASH interrupts for Bank1.
mbed_official 126:549ba18ddd81 1292 * @param FLASH_IT: specifies the FLASH interrupt sources to be enabled or disabled.
mbed_official 126:549ba18ddd81 1293 * This parameter can be any combination of the following values:
mbed_official 126:549ba18ddd81 1294 * @arg FLASH_IT_ERROR: FLASH Error Interrupt
mbed_official 126:549ba18ddd81 1295 * @arg FLASH_IT_EOP: FLASH end of operation Interrupt
mbed_official 126:549ba18ddd81 1296 * @param NewState: new state of the specified Flash interrupts.
mbed_official 126:549ba18ddd81 1297 * This parameter can be: ENABLE or DISABLE.
mbed_official 126:549ba18ddd81 1298 * @retval None
mbed_official 126:549ba18ddd81 1299 */
mbed_official 126:549ba18ddd81 1300 void FLASH_ITConfig(uint32_t FLASH_IT, FunctionalState NewState)
mbed_official 126:549ba18ddd81 1301 {
mbed_official 126:549ba18ddd81 1302 #ifdef STM32F10X_XL
mbed_official 126:549ba18ddd81 1303 /* Check the parameters */
mbed_official 126:549ba18ddd81 1304 assert_param(IS_FLASH_IT(FLASH_IT));
mbed_official 126:549ba18ddd81 1305 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 126:549ba18ddd81 1306
mbed_official 126:549ba18ddd81 1307 if((FLASH_IT & 0x80000000) != 0x0)
mbed_official 126:549ba18ddd81 1308 {
mbed_official 126:549ba18ddd81 1309 if(NewState != DISABLE)
mbed_official 126:549ba18ddd81 1310 {
mbed_official 126:549ba18ddd81 1311 /* Enable the interrupt sources */
mbed_official 126:549ba18ddd81 1312 FLASH->CR2 |= (FLASH_IT & 0x7FFFFFFF);
mbed_official 126:549ba18ddd81 1313 }
mbed_official 126:549ba18ddd81 1314 else
mbed_official 126:549ba18ddd81 1315 {
mbed_official 126:549ba18ddd81 1316 /* Disable the interrupt sources */
mbed_official 126:549ba18ddd81 1317 FLASH->CR2 &= ~(uint32_t)(FLASH_IT & 0x7FFFFFFF);
mbed_official 126:549ba18ddd81 1318 }
mbed_official 126:549ba18ddd81 1319 }
mbed_official 126:549ba18ddd81 1320 else
mbed_official 126:549ba18ddd81 1321 {
mbed_official 126:549ba18ddd81 1322 if(NewState != DISABLE)
mbed_official 126:549ba18ddd81 1323 {
mbed_official 126:549ba18ddd81 1324 /* Enable the interrupt sources */
mbed_official 126:549ba18ddd81 1325 FLASH->CR |= FLASH_IT;
mbed_official 126:549ba18ddd81 1326 }
mbed_official 126:549ba18ddd81 1327 else
mbed_official 126:549ba18ddd81 1328 {
mbed_official 126:549ba18ddd81 1329 /* Disable the interrupt sources */
mbed_official 126:549ba18ddd81 1330 FLASH->CR &= ~(uint32_t)FLASH_IT;
mbed_official 126:549ba18ddd81 1331 }
mbed_official 126:549ba18ddd81 1332 }
mbed_official 126:549ba18ddd81 1333 #else
mbed_official 126:549ba18ddd81 1334 /* Check the parameters */
mbed_official 126:549ba18ddd81 1335 assert_param(IS_FLASH_IT(FLASH_IT));
mbed_official 126:549ba18ddd81 1336 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 126:549ba18ddd81 1337
mbed_official 126:549ba18ddd81 1338 if(NewState != DISABLE)
mbed_official 126:549ba18ddd81 1339 {
mbed_official 126:549ba18ddd81 1340 /* Enable the interrupt sources */
mbed_official 126:549ba18ddd81 1341 FLASH->CR |= FLASH_IT;
mbed_official 126:549ba18ddd81 1342 }
mbed_official 126:549ba18ddd81 1343 else
mbed_official 126:549ba18ddd81 1344 {
mbed_official 126:549ba18ddd81 1345 /* Disable the interrupt sources */
mbed_official 126:549ba18ddd81 1346 FLASH->CR &= ~(uint32_t)FLASH_IT;
mbed_official 126:549ba18ddd81 1347 }
mbed_official 126:549ba18ddd81 1348 #endif /* STM32F10X_XL */
mbed_official 126:549ba18ddd81 1349 }
mbed_official 126:549ba18ddd81 1350
mbed_official 126:549ba18ddd81 1351 /**
mbed_official 126:549ba18ddd81 1352 * @brief Checks whether the specified FLASH flag is set or not.
mbed_official 126:549ba18ddd81 1353 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 1354 * - For STM32F10X_XL devices, this function checks whether the specified
mbed_official 126:549ba18ddd81 1355 * Bank1 or Bank2 flag is set or not.
mbed_official 126:549ba18ddd81 1356 * - For other devices, it checks whether the specified Bank1 flag is
mbed_official 126:549ba18ddd81 1357 * set or not.
mbed_official 126:549ba18ddd81 1358 * @param FLASH_FLAG: specifies the FLASH flag to check.
mbed_official 126:549ba18ddd81 1359 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 1360 * @arg FLASH_FLAG_BSY: FLASH Busy flag
mbed_official 126:549ba18ddd81 1361 * @arg FLASH_FLAG_PGERR: FLASH Program error flag
mbed_official 126:549ba18ddd81 1362 * @arg FLASH_FLAG_WRPRTERR: FLASH Write protected error flag
mbed_official 126:549ba18ddd81 1363 * @arg FLASH_FLAG_EOP: FLASH End of Operation flag
mbed_official 126:549ba18ddd81 1364 * @arg FLASH_FLAG_OPTERR: FLASH Option Byte error flag
mbed_official 126:549ba18ddd81 1365 * @retval The new state of FLASH_FLAG (SET or RESET).
mbed_official 126:549ba18ddd81 1366 */
mbed_official 126:549ba18ddd81 1367 FlagStatus FLASH_GetFlagStatus(uint32_t FLASH_FLAG)
mbed_official 126:549ba18ddd81 1368 {
mbed_official 126:549ba18ddd81 1369 FlagStatus bitstatus = RESET;
mbed_official 126:549ba18ddd81 1370
mbed_official 126:549ba18ddd81 1371 #ifdef STM32F10X_XL
mbed_official 126:549ba18ddd81 1372 /* Check the parameters */
mbed_official 126:549ba18ddd81 1373 assert_param(IS_FLASH_GET_FLAG(FLASH_FLAG)) ;
mbed_official 126:549ba18ddd81 1374 if(FLASH_FLAG == FLASH_FLAG_OPTERR)
mbed_official 126:549ba18ddd81 1375 {
mbed_official 126:549ba18ddd81 1376 if((FLASH->OBR & FLASH_FLAG_OPTERR) != (uint32_t)RESET)
mbed_official 126:549ba18ddd81 1377 {
mbed_official 126:549ba18ddd81 1378 bitstatus = SET;
mbed_official 126:549ba18ddd81 1379 }
mbed_official 126:549ba18ddd81 1380 else
mbed_official 126:549ba18ddd81 1381 {
mbed_official 126:549ba18ddd81 1382 bitstatus = RESET;
mbed_official 126:549ba18ddd81 1383 }
mbed_official 126:549ba18ddd81 1384 }
mbed_official 126:549ba18ddd81 1385 else
mbed_official 126:549ba18ddd81 1386 {
mbed_official 126:549ba18ddd81 1387 if((FLASH_FLAG & 0x80000000) != 0x0)
mbed_official 126:549ba18ddd81 1388 {
mbed_official 126:549ba18ddd81 1389 if((FLASH->SR2 & FLASH_FLAG) != (uint32_t)RESET)
mbed_official 126:549ba18ddd81 1390 {
mbed_official 126:549ba18ddd81 1391 bitstatus = SET;
mbed_official 126:549ba18ddd81 1392 }
mbed_official 126:549ba18ddd81 1393 else
mbed_official 126:549ba18ddd81 1394 {
mbed_official 126:549ba18ddd81 1395 bitstatus = RESET;
mbed_official 126:549ba18ddd81 1396 }
mbed_official 126:549ba18ddd81 1397 }
mbed_official 126:549ba18ddd81 1398 else
mbed_official 126:549ba18ddd81 1399 {
mbed_official 126:549ba18ddd81 1400 if((FLASH->SR & FLASH_FLAG) != (uint32_t)RESET)
mbed_official 126:549ba18ddd81 1401 {
mbed_official 126:549ba18ddd81 1402 bitstatus = SET;
mbed_official 126:549ba18ddd81 1403 }
mbed_official 126:549ba18ddd81 1404 else
mbed_official 126:549ba18ddd81 1405 {
mbed_official 126:549ba18ddd81 1406 bitstatus = RESET;
mbed_official 126:549ba18ddd81 1407 }
mbed_official 126:549ba18ddd81 1408 }
mbed_official 126:549ba18ddd81 1409 }
mbed_official 126:549ba18ddd81 1410 #else
mbed_official 126:549ba18ddd81 1411 /* Check the parameters */
mbed_official 126:549ba18ddd81 1412 assert_param(IS_FLASH_GET_FLAG(FLASH_FLAG)) ;
mbed_official 126:549ba18ddd81 1413 if(FLASH_FLAG == FLASH_FLAG_OPTERR)
mbed_official 126:549ba18ddd81 1414 {
mbed_official 126:549ba18ddd81 1415 if((FLASH->OBR & FLASH_FLAG_OPTERR) != (uint32_t)RESET)
mbed_official 126:549ba18ddd81 1416 {
mbed_official 126:549ba18ddd81 1417 bitstatus = SET;
mbed_official 126:549ba18ddd81 1418 }
mbed_official 126:549ba18ddd81 1419 else
mbed_official 126:549ba18ddd81 1420 {
mbed_official 126:549ba18ddd81 1421 bitstatus = RESET;
mbed_official 126:549ba18ddd81 1422 }
mbed_official 126:549ba18ddd81 1423 }
mbed_official 126:549ba18ddd81 1424 else
mbed_official 126:549ba18ddd81 1425 {
mbed_official 126:549ba18ddd81 1426 if((FLASH->SR & FLASH_FLAG) != (uint32_t)RESET)
mbed_official 126:549ba18ddd81 1427 {
mbed_official 126:549ba18ddd81 1428 bitstatus = SET;
mbed_official 126:549ba18ddd81 1429 }
mbed_official 126:549ba18ddd81 1430 else
mbed_official 126:549ba18ddd81 1431 {
mbed_official 126:549ba18ddd81 1432 bitstatus = RESET;
mbed_official 126:549ba18ddd81 1433 }
mbed_official 126:549ba18ddd81 1434 }
mbed_official 126:549ba18ddd81 1435 #endif /* STM32F10X_XL */
mbed_official 126:549ba18ddd81 1436
mbed_official 126:549ba18ddd81 1437 /* Return the new state of FLASH_FLAG (SET or RESET) */
mbed_official 126:549ba18ddd81 1438 return bitstatus;
mbed_official 126:549ba18ddd81 1439 }
mbed_official 126:549ba18ddd81 1440
mbed_official 126:549ba18ddd81 1441 /**
mbed_official 126:549ba18ddd81 1442 * @brief Clears the FLASH's pending flags.
mbed_official 126:549ba18ddd81 1443 * @note This function can be used for all STM32F10x devices.
mbed_official 126:549ba18ddd81 1444 * - For STM32F10X_XL devices, this function clears Bank1 or Bank2’s pending flags
mbed_official 126:549ba18ddd81 1445 * - For other devices, it clears Bank1’s pending flags.
mbed_official 126:549ba18ddd81 1446 * @param FLASH_FLAG: specifies the FLASH flags to clear.
mbed_official 126:549ba18ddd81 1447 * This parameter can be any combination of the following values:
mbed_official 126:549ba18ddd81 1448 * @arg FLASH_FLAG_PGERR: FLASH Program error flag
mbed_official 126:549ba18ddd81 1449 * @arg FLASH_FLAG_WRPRTERR: FLASH Write protected error flag
mbed_official 126:549ba18ddd81 1450 * @arg FLASH_FLAG_EOP: FLASH End of Operation flag
mbed_official 126:549ba18ddd81 1451 * @retval None
mbed_official 126:549ba18ddd81 1452 */
mbed_official 126:549ba18ddd81 1453 void FLASH_ClearFlag(uint32_t FLASH_FLAG)
mbed_official 126:549ba18ddd81 1454 {
mbed_official 126:549ba18ddd81 1455 #ifdef STM32F10X_XL
mbed_official 126:549ba18ddd81 1456 /* Check the parameters */
mbed_official 126:549ba18ddd81 1457 assert_param(IS_FLASH_CLEAR_FLAG(FLASH_FLAG)) ;
mbed_official 126:549ba18ddd81 1458
mbed_official 126:549ba18ddd81 1459 if((FLASH_FLAG & 0x80000000) != 0x0)
mbed_official 126:549ba18ddd81 1460 {
mbed_official 126:549ba18ddd81 1461 /* Clear the flags */
mbed_official 126:549ba18ddd81 1462 FLASH->SR2 = FLASH_FLAG;
mbed_official 126:549ba18ddd81 1463 }
mbed_official 126:549ba18ddd81 1464 else
mbed_official 126:549ba18ddd81 1465 {
mbed_official 126:549ba18ddd81 1466 /* Clear the flags */
mbed_official 126:549ba18ddd81 1467 FLASH->SR = FLASH_FLAG;
mbed_official 126:549ba18ddd81 1468 }
mbed_official 126:549ba18ddd81 1469
mbed_official 126:549ba18ddd81 1470 #else
mbed_official 126:549ba18ddd81 1471 /* Check the parameters */
mbed_official 126:549ba18ddd81 1472 assert_param(IS_FLASH_CLEAR_FLAG(FLASH_FLAG)) ;
mbed_official 126:549ba18ddd81 1473
mbed_official 126:549ba18ddd81 1474 /* Clear the flags */
mbed_official 126:549ba18ddd81 1475 FLASH->SR = FLASH_FLAG;
mbed_official 126:549ba18ddd81 1476 #endif /* STM32F10X_XL */
mbed_official 126:549ba18ddd81 1477 }
mbed_official 126:549ba18ddd81 1478
mbed_official 126:549ba18ddd81 1479 /**
mbed_official 126:549ba18ddd81 1480 * @brief Returns the FLASH Status.
mbed_official 126:549ba18ddd81 1481 * @note This function can be used for all STM32F10x devices, it is equivalent
mbed_official 126:549ba18ddd81 1482 * to FLASH_GetBank1Status function.
mbed_official 126:549ba18ddd81 1483 * @param None
mbed_official 126:549ba18ddd81 1484 * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG,
mbed_official 126:549ba18ddd81 1485 * FLASH_ERROR_WRP or FLASH_COMPLETE
mbed_official 126:549ba18ddd81 1486 */
mbed_official 126:549ba18ddd81 1487 FLASH_Status FLASH_GetStatus(void)
mbed_official 126:549ba18ddd81 1488 {
mbed_official 126:549ba18ddd81 1489 FLASH_Status flashstatus = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 1490
mbed_official 126:549ba18ddd81 1491 if((FLASH->SR & FLASH_FLAG_BSY) == FLASH_FLAG_BSY)
mbed_official 126:549ba18ddd81 1492 {
mbed_official 126:549ba18ddd81 1493 flashstatus = FLASH_BUSY;
mbed_official 126:549ba18ddd81 1494 }
mbed_official 126:549ba18ddd81 1495 else
mbed_official 126:549ba18ddd81 1496 {
mbed_official 126:549ba18ddd81 1497 if((FLASH->SR & FLASH_FLAG_PGERR) != 0)
mbed_official 126:549ba18ddd81 1498 {
mbed_official 126:549ba18ddd81 1499 flashstatus = FLASH_ERROR_PG;
mbed_official 126:549ba18ddd81 1500 }
mbed_official 126:549ba18ddd81 1501 else
mbed_official 126:549ba18ddd81 1502 {
mbed_official 126:549ba18ddd81 1503 if((FLASH->SR & FLASH_FLAG_WRPRTERR) != 0 )
mbed_official 126:549ba18ddd81 1504 {
mbed_official 126:549ba18ddd81 1505 flashstatus = FLASH_ERROR_WRP;
mbed_official 126:549ba18ddd81 1506 }
mbed_official 126:549ba18ddd81 1507 else
mbed_official 126:549ba18ddd81 1508 {
mbed_official 126:549ba18ddd81 1509 flashstatus = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 1510 }
mbed_official 126:549ba18ddd81 1511 }
mbed_official 126:549ba18ddd81 1512 }
mbed_official 126:549ba18ddd81 1513 /* Return the Flash Status */
mbed_official 126:549ba18ddd81 1514 return flashstatus;
mbed_official 126:549ba18ddd81 1515 }
mbed_official 126:549ba18ddd81 1516
mbed_official 126:549ba18ddd81 1517 /**
mbed_official 126:549ba18ddd81 1518 * @brief Returns the FLASH Bank1 Status.
mbed_official 126:549ba18ddd81 1519 * @note This function can be used for all STM32F10x devices, it is equivalent
mbed_official 126:549ba18ddd81 1520 * to FLASH_GetStatus function.
mbed_official 126:549ba18ddd81 1521 * @param None
mbed_official 126:549ba18ddd81 1522 * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG,
mbed_official 126:549ba18ddd81 1523 * FLASH_ERROR_WRP or FLASH_COMPLETE
mbed_official 126:549ba18ddd81 1524 */
mbed_official 126:549ba18ddd81 1525 FLASH_Status FLASH_GetBank1Status(void)
mbed_official 126:549ba18ddd81 1526 {
mbed_official 126:549ba18ddd81 1527 FLASH_Status flashstatus = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 1528
mbed_official 126:549ba18ddd81 1529 if((FLASH->SR & FLASH_FLAG_BANK1_BSY) == FLASH_FLAG_BSY)
mbed_official 126:549ba18ddd81 1530 {
mbed_official 126:549ba18ddd81 1531 flashstatus = FLASH_BUSY;
mbed_official 126:549ba18ddd81 1532 }
mbed_official 126:549ba18ddd81 1533 else
mbed_official 126:549ba18ddd81 1534 {
mbed_official 126:549ba18ddd81 1535 if((FLASH->SR & FLASH_FLAG_BANK1_PGERR) != 0)
mbed_official 126:549ba18ddd81 1536 {
mbed_official 126:549ba18ddd81 1537 flashstatus = FLASH_ERROR_PG;
mbed_official 126:549ba18ddd81 1538 }
mbed_official 126:549ba18ddd81 1539 else
mbed_official 126:549ba18ddd81 1540 {
mbed_official 126:549ba18ddd81 1541 if((FLASH->SR & FLASH_FLAG_BANK1_WRPRTERR) != 0 )
mbed_official 126:549ba18ddd81 1542 {
mbed_official 126:549ba18ddd81 1543 flashstatus = FLASH_ERROR_WRP;
mbed_official 126:549ba18ddd81 1544 }
mbed_official 126:549ba18ddd81 1545 else
mbed_official 126:549ba18ddd81 1546 {
mbed_official 126:549ba18ddd81 1547 flashstatus = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 1548 }
mbed_official 126:549ba18ddd81 1549 }
mbed_official 126:549ba18ddd81 1550 }
mbed_official 126:549ba18ddd81 1551 /* Return the Flash Status */
mbed_official 126:549ba18ddd81 1552 return flashstatus;
mbed_official 126:549ba18ddd81 1553 }
mbed_official 126:549ba18ddd81 1554
mbed_official 126:549ba18ddd81 1555 #ifdef STM32F10X_XL
mbed_official 126:549ba18ddd81 1556 /**
mbed_official 126:549ba18ddd81 1557 * @brief Returns the FLASH Bank2 Status.
mbed_official 126:549ba18ddd81 1558 * @note This function can be used for STM32F10x_XL density devices.
mbed_official 126:549ba18ddd81 1559 * @param None
mbed_official 126:549ba18ddd81 1560 * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG,
mbed_official 126:549ba18ddd81 1561 * FLASH_ERROR_WRP or FLASH_COMPLETE
mbed_official 126:549ba18ddd81 1562 */
mbed_official 126:549ba18ddd81 1563 FLASH_Status FLASH_GetBank2Status(void)
mbed_official 126:549ba18ddd81 1564 {
mbed_official 126:549ba18ddd81 1565 FLASH_Status flashstatus = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 1566
mbed_official 126:549ba18ddd81 1567 if((FLASH->SR2 & (FLASH_FLAG_BANK2_BSY & 0x7FFFFFFF)) == (FLASH_FLAG_BANK2_BSY & 0x7FFFFFFF))
mbed_official 126:549ba18ddd81 1568 {
mbed_official 126:549ba18ddd81 1569 flashstatus = FLASH_BUSY;
mbed_official 126:549ba18ddd81 1570 }
mbed_official 126:549ba18ddd81 1571 else
mbed_official 126:549ba18ddd81 1572 {
mbed_official 126:549ba18ddd81 1573 if((FLASH->SR2 & (FLASH_FLAG_BANK2_PGERR & 0x7FFFFFFF)) != 0)
mbed_official 126:549ba18ddd81 1574 {
mbed_official 126:549ba18ddd81 1575 flashstatus = FLASH_ERROR_PG;
mbed_official 126:549ba18ddd81 1576 }
mbed_official 126:549ba18ddd81 1577 else
mbed_official 126:549ba18ddd81 1578 {
mbed_official 126:549ba18ddd81 1579 if((FLASH->SR2 & (FLASH_FLAG_BANK2_WRPRTERR & 0x7FFFFFFF)) != 0 )
mbed_official 126:549ba18ddd81 1580 {
mbed_official 126:549ba18ddd81 1581 flashstatus = FLASH_ERROR_WRP;
mbed_official 126:549ba18ddd81 1582 }
mbed_official 126:549ba18ddd81 1583 else
mbed_official 126:549ba18ddd81 1584 {
mbed_official 126:549ba18ddd81 1585 flashstatus = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 1586 }
mbed_official 126:549ba18ddd81 1587 }
mbed_official 126:549ba18ddd81 1588 }
mbed_official 126:549ba18ddd81 1589 /* Return the Flash Status */
mbed_official 126:549ba18ddd81 1590 return flashstatus;
mbed_official 126:549ba18ddd81 1591 }
mbed_official 126:549ba18ddd81 1592 #endif /* STM32F10X_XL */
mbed_official 126:549ba18ddd81 1593 /**
mbed_official 126:549ba18ddd81 1594 * @brief Waits for a Flash operation to complete or a TIMEOUT to occur.
mbed_official 126:549ba18ddd81 1595 * @note This function can be used for all STM32F10x devices,
mbed_official 126:549ba18ddd81 1596 * it is equivalent to FLASH_WaitForLastBank1Operation.
mbed_official 126:549ba18ddd81 1597 * - For STM32F10X_XL devices this function waits for a Bank1 Flash operation
mbed_official 126:549ba18ddd81 1598 * to complete or a TIMEOUT to occur.
mbed_official 126:549ba18ddd81 1599 * - For all other devices it waits for a Flash operation to complete
mbed_official 126:549ba18ddd81 1600 * or a TIMEOUT to occur.
mbed_official 126:549ba18ddd81 1601 * @param Timeout: FLASH programming Timeout
mbed_official 126:549ba18ddd81 1602 * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG,
mbed_official 126:549ba18ddd81 1603 * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 126:549ba18ddd81 1604 */
mbed_official 126:549ba18ddd81 1605 FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout)
mbed_official 126:549ba18ddd81 1606 {
mbed_official 126:549ba18ddd81 1607 FLASH_Status status = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 1608
mbed_official 126:549ba18ddd81 1609 /* Check for the Flash Status */
mbed_official 126:549ba18ddd81 1610 status = FLASH_GetBank1Status();
mbed_official 126:549ba18ddd81 1611 /* Wait for a Flash operation to complete or a TIMEOUT to occur */
mbed_official 126:549ba18ddd81 1612 while((status == FLASH_BUSY) && (Timeout != 0x00))
mbed_official 126:549ba18ddd81 1613 {
mbed_official 126:549ba18ddd81 1614 status = FLASH_GetBank1Status();
mbed_official 126:549ba18ddd81 1615 Timeout--;
mbed_official 126:549ba18ddd81 1616 }
mbed_official 126:549ba18ddd81 1617 if(Timeout == 0x00 )
mbed_official 126:549ba18ddd81 1618 {
mbed_official 126:549ba18ddd81 1619 status = FLASH_TIMEOUT;
mbed_official 126:549ba18ddd81 1620 }
mbed_official 126:549ba18ddd81 1621 /* Return the operation status */
mbed_official 126:549ba18ddd81 1622 return status;
mbed_official 126:549ba18ddd81 1623 }
mbed_official 126:549ba18ddd81 1624
mbed_official 126:549ba18ddd81 1625 /**
mbed_official 126:549ba18ddd81 1626 * @brief Waits for a Flash operation on Bank1 to complete or a TIMEOUT to occur.
mbed_official 126:549ba18ddd81 1627 * @note This function can be used for all STM32F10x devices,
mbed_official 126:549ba18ddd81 1628 * it is equivalent to FLASH_WaitForLastOperation.
mbed_official 126:549ba18ddd81 1629 * @param Timeout: FLASH programming Timeout
mbed_official 126:549ba18ddd81 1630 * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG,
mbed_official 126:549ba18ddd81 1631 * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 126:549ba18ddd81 1632 */
mbed_official 126:549ba18ddd81 1633 FLASH_Status FLASH_WaitForLastBank1Operation(uint32_t Timeout)
mbed_official 126:549ba18ddd81 1634 {
mbed_official 126:549ba18ddd81 1635 FLASH_Status status = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 1636
mbed_official 126:549ba18ddd81 1637 /* Check for the Flash Status */
mbed_official 126:549ba18ddd81 1638 status = FLASH_GetBank1Status();
mbed_official 126:549ba18ddd81 1639 /* Wait for a Flash operation to complete or a TIMEOUT to occur */
mbed_official 126:549ba18ddd81 1640 while((status == FLASH_FLAG_BANK1_BSY) && (Timeout != 0x00))
mbed_official 126:549ba18ddd81 1641 {
mbed_official 126:549ba18ddd81 1642 status = FLASH_GetBank1Status();
mbed_official 126:549ba18ddd81 1643 Timeout--;
mbed_official 126:549ba18ddd81 1644 }
mbed_official 126:549ba18ddd81 1645 if(Timeout == 0x00 )
mbed_official 126:549ba18ddd81 1646 {
mbed_official 126:549ba18ddd81 1647 status = FLASH_TIMEOUT;
mbed_official 126:549ba18ddd81 1648 }
mbed_official 126:549ba18ddd81 1649 /* Return the operation status */
mbed_official 126:549ba18ddd81 1650 return status;
mbed_official 126:549ba18ddd81 1651 }
mbed_official 126:549ba18ddd81 1652
mbed_official 126:549ba18ddd81 1653 #ifdef STM32F10X_XL
mbed_official 126:549ba18ddd81 1654 /**
mbed_official 126:549ba18ddd81 1655 * @brief Waits for a Flash operation on Bank2 to complete or a TIMEOUT to occur.
mbed_official 126:549ba18ddd81 1656 * @note This function can be used only for STM32F10x_XL density devices.
mbed_official 126:549ba18ddd81 1657 * @param Timeout: FLASH programming Timeout
mbed_official 126:549ba18ddd81 1658 * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG,
mbed_official 126:549ba18ddd81 1659 * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 126:549ba18ddd81 1660 */
mbed_official 126:549ba18ddd81 1661 FLASH_Status FLASH_WaitForLastBank2Operation(uint32_t Timeout)
mbed_official 126:549ba18ddd81 1662 {
mbed_official 126:549ba18ddd81 1663 FLASH_Status status = FLASH_COMPLETE;
mbed_official 126:549ba18ddd81 1664
mbed_official 126:549ba18ddd81 1665 /* Check for the Flash Status */
mbed_official 126:549ba18ddd81 1666 status = FLASH_GetBank2Status();
mbed_official 126:549ba18ddd81 1667 /* Wait for a Flash operation to complete or a TIMEOUT to occur */
mbed_official 126:549ba18ddd81 1668 while((status == (FLASH_FLAG_BANK2_BSY & 0x7FFFFFFF)) && (Timeout != 0x00))
mbed_official 126:549ba18ddd81 1669 {
mbed_official 126:549ba18ddd81 1670 status = FLASH_GetBank2Status();
mbed_official 126:549ba18ddd81 1671 Timeout--;
mbed_official 126:549ba18ddd81 1672 }
mbed_official 126:549ba18ddd81 1673 if(Timeout == 0x00 )
mbed_official 126:549ba18ddd81 1674 {
mbed_official 126:549ba18ddd81 1675 status = FLASH_TIMEOUT;
mbed_official 126:549ba18ddd81 1676 }
mbed_official 126:549ba18ddd81 1677 /* Return the operation status */
mbed_official 126:549ba18ddd81 1678 return status;
mbed_official 126:549ba18ddd81 1679 }
mbed_official 126:549ba18ddd81 1680 #endif /* STM32F10X_XL */
mbed_official 126:549ba18ddd81 1681
mbed_official 126:549ba18ddd81 1682 /**
mbed_official 126:549ba18ddd81 1683 * @}
mbed_official 126:549ba18ddd81 1684 */
mbed_official 126:549ba18ddd81 1685
mbed_official 126:549ba18ddd81 1686 /**
mbed_official 126:549ba18ddd81 1687 * @}
mbed_official 126:549ba18ddd81 1688 */
mbed_official 126:549ba18ddd81 1689
mbed_official 126:549ba18ddd81 1690 /**
mbed_official 126:549ba18ddd81 1691 * @}
mbed_official 126:549ba18ddd81 1692 */
mbed_official 126:549ba18ddd81 1693
mbed_official 126:549ba18ddd81 1694 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/