mbed SDK library sources

Fork of mbed-src by mbed official

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Thu Jan 30 12:15:05 2014 +0000
Revision:
80:66393a7b209d
Parent:
76:aeb1df146756
Synchronized with git revision dba523f83fe09b7fce11fc1299dd1216e9776359

Full URL: https://github.com/mbedmicro/mbed/commit/dba523f83fe09b7fce11fc1299dd1216e9776359/

Update of I2C, SPI, SLEEP for NUCLEO_F103RB and L152RE

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 76:aeb1df146756 1 /**
mbed_official 76:aeb1df146756 2 ******************************************************************************
mbed_official 76:aeb1df146756 3 * @file stm32l1xx_flash.c
mbed_official 76:aeb1df146756 4 * @author MCD Application Team
mbed_official 80:66393a7b209d 5 * @version V1.3.0
mbed_official 80:66393a7b209d 6 * @date 31-January-2014
mbed_official 76:aeb1df146756 7 * @brief This file provides all the Flash firmware functions. These functions
mbed_official 76:aeb1df146756 8 * can be executed from Internal FLASH or Internal SRAM memories.
mbed_official 76:aeb1df146756 9 * The functions that should be called from SRAM are defined inside
mbed_official 76:aeb1df146756 10 * the "stm32l1xx_flash_ramfunc.c" file.
mbed_official 76:aeb1df146756 11 * This file provides firmware functions to manage the following
mbed_official 76:aeb1df146756 12 * functionalities of the FLASH peripheral:
mbed_official 76:aeb1df146756 13 * + FLASH Interface configuration
mbed_official 76:aeb1df146756 14 * + FLASH Memory Programming
mbed_official 76:aeb1df146756 15 * + DATA EEPROM Programming
mbed_official 76:aeb1df146756 16 * + Option Bytes Programming
mbed_official 76:aeb1df146756 17 * + Interrupts and flags management
mbed_official 76:aeb1df146756 18 *
mbed_official 76:aeb1df146756 19 * @verbatim
mbed_official 76:aeb1df146756 20
mbed_official 76:aeb1df146756 21 ==============================================================================
mbed_official 76:aeb1df146756 22 ##### How to use this driver #####
mbed_official 76:aeb1df146756 23 ==============================================================================
mbed_official 76:aeb1df146756 24 [..] This driver provides functions to configure and program the Flash
mbed_official 76:aeb1df146756 25 memory of all STM32L1xx devices.
mbed_official 76:aeb1df146756 26 [..] These functions are split in 5 groups:
mbed_official 76:aeb1df146756 27 (#) FLASH Interface configuration functions: this group includes
mbed_official 76:aeb1df146756 28 the management of following features:
mbed_official 76:aeb1df146756 29 (++) Set the latency.
mbed_official 76:aeb1df146756 30 (++) Enable/Disable the prefetch buffer.
mbed_official 76:aeb1df146756 31 (++) Enable/Disable the 64 bit Read Access.
mbed_official 76:aeb1df146756 32 (++) Enable/Disable the RUN PowerDown mode.
mbed_official 76:aeb1df146756 33 (++) Enable/Disable the SLEEP PowerDown mode.
mbed_official 76:aeb1df146756 34
mbed_official 76:aeb1df146756 35 (#) FLASH Memory Programming functions: this group includes all
mbed_official 76:aeb1df146756 36 needed functions to erase and program the main memory:
mbed_official 76:aeb1df146756 37 (++) Lock and Unlock the Flash interface.
mbed_official 76:aeb1df146756 38 (++) Erase function: Erase Page.
mbed_official 76:aeb1df146756 39 (++) Program functions: Fast Word and Half Page(should be
mbed_official 76:aeb1df146756 40 executed from internal SRAM).
mbed_official 76:aeb1df146756 41
mbed_official 76:aeb1df146756 42 (#) DATA EEPROM Programming functions: this group includes all
mbed_official 76:aeb1df146756 43 needed functions to erase and program the DATA EEPROM memory:
mbed_official 76:aeb1df146756 44 (++) Lock and Unlock the DATA EEPROM interface.
mbed_official 76:aeb1df146756 45 (++) Erase function: Erase Byte, erase HalfWord, erase Word, erase
mbed_official 76:aeb1df146756 46 (++) Double Word (should be executed from internal SRAM).
mbed_official 76:aeb1df146756 47 (++) Program functions: Fast Program Byte, Fast Program Half-Word,
mbed_official 76:aeb1df146756 48 FastProgramWord, Program Byte, Program Half-Word,
mbed_official 76:aeb1df146756 49 Program Word and Program Double-Word (should be executed
mbed_official 76:aeb1df146756 50 from internal SRAM).
mbed_official 76:aeb1df146756 51
mbed_official 76:aeb1df146756 52 (#) FLASH Option Bytes Programming functions: this group includes
mbed_official 76:aeb1df146756 53 all needed functions to:
mbed_official 76:aeb1df146756 54 (++) Lock and Unlock the Flash Option bytes.
mbed_official 76:aeb1df146756 55 (++) Set/Reset the write protection.
mbed_official 76:aeb1df146756 56 (++) Set the Read protection Level.
mbed_official 76:aeb1df146756 57 (++) Set the BOR level.
mbed_official 76:aeb1df146756 58 (++) rogram the user option Bytes.
mbed_official 76:aeb1df146756 59 (++) Launch the Option Bytes loader.
mbed_official 76:aeb1df146756 60 (++) Get the Write protection.
mbed_official 76:aeb1df146756 61 (++) Get the read protection status.
mbed_official 76:aeb1df146756 62 (++) Get the BOR level.
mbed_official 76:aeb1df146756 63 (++) Get the user option bytes.
mbed_official 76:aeb1df146756 64
mbed_official 76:aeb1df146756 65 (#) FLASH Interrupts and flag management functions: this group
mbed_official 76:aeb1df146756 66 includes all needed functions to:
mbed_official 76:aeb1df146756 67 (++) Enable/Disable the flash interrupt sources.
mbed_official 76:aeb1df146756 68 (++) Get flags status.
mbed_official 76:aeb1df146756 69 (++) Clear flags.
mbed_official 76:aeb1df146756 70 (++) Get Flash operation status.
mbed_official 76:aeb1df146756 71 (++) Wait for last flash operation.
mbed_official 76:aeb1df146756 72
mbed_official 76:aeb1df146756 73 * @endverbatim
mbed_official 76:aeb1df146756 74 *
mbed_official 76:aeb1df146756 75 ******************************************************************************
mbed_official 76:aeb1df146756 76 * @attention
mbed_official 76:aeb1df146756 77 *
mbed_official 80:66393a7b209d 78 * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
mbed_official 76:aeb1df146756 79 *
mbed_official 76:aeb1df146756 80 * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
mbed_official 76:aeb1df146756 81 * You may not use this file except in compliance with the License.
mbed_official 76:aeb1df146756 82 * You may obtain a copy of the License at:
mbed_official 76:aeb1df146756 83 *
mbed_official 76:aeb1df146756 84 * http://www.st.com/software_license_agreement_liberty_v2
mbed_official 76:aeb1df146756 85 *
mbed_official 76:aeb1df146756 86 * Unless required by applicable law or agreed to in writing, software
mbed_official 76:aeb1df146756 87 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 76:aeb1df146756 88 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 76:aeb1df146756 89 * See the License for the specific language governing permissions and
mbed_official 76:aeb1df146756 90 * limitations under the License.
mbed_official 76:aeb1df146756 91 *
mbed_official 76:aeb1df146756 92 ******************************************************************************
mbed_official 76:aeb1df146756 93 */
mbed_official 76:aeb1df146756 94
mbed_official 76:aeb1df146756 95 /* Includes ------------------------------------------------------------------*/
mbed_official 76:aeb1df146756 96 #include "stm32l1xx_flash.h"
mbed_official 76:aeb1df146756 97
mbed_official 76:aeb1df146756 98 /** @addtogroup STM32L1xx_StdPeriph_Driver
mbed_official 76:aeb1df146756 99 * @{
mbed_official 76:aeb1df146756 100 */
mbed_official 76:aeb1df146756 101
mbed_official 76:aeb1df146756 102 /** @defgroup FLASH
mbed_official 76:aeb1df146756 103 * @brief FLASH driver modules
mbed_official 76:aeb1df146756 104 * @{
mbed_official 76:aeb1df146756 105 */
mbed_official 76:aeb1df146756 106
mbed_official 76:aeb1df146756 107 /* Private typedef -----------------------------------------------------------*/
mbed_official 76:aeb1df146756 108 /* Private define ------------------------------------------------------------*/
mbed_official 76:aeb1df146756 109
mbed_official 76:aeb1df146756 110 /* FLASH Mask */
mbed_official 76:aeb1df146756 111 #define WRP01_MASK ((uint32_t)0x0000FFFF)
mbed_official 76:aeb1df146756 112 #define WRP23_MASK ((uint32_t)0xFFFF0000)
mbed_official 76:aeb1df146756 113 #define WRP45_MASK ((uint32_t)0x0000FFFF)
mbed_official 76:aeb1df146756 114 #define WRP67_MASK ((uint32_t)0xFFFF0000)
mbed_official 76:aeb1df146756 115 #define WRP89_MASK ((uint32_t)0x0000FFFF)
mbed_official 76:aeb1df146756 116 #define WRP1011_MASK ((uint32_t)0xFFFF0000)
mbed_official 76:aeb1df146756 117
mbed_official 76:aeb1df146756 118 /* Private macro -------------------------------------------------------------*/
mbed_official 76:aeb1df146756 119 /* Private variables ---------------------------------------------------------*/
mbed_official 76:aeb1df146756 120 /* Private function prototypes -----------------------------------------------*/
mbed_official 76:aeb1df146756 121 /* Private functions ---------------------------------------------------------*/
mbed_official 76:aeb1df146756 122
mbed_official 76:aeb1df146756 123 /** @defgroup FLASH_Private_Functions
mbed_official 76:aeb1df146756 124 * @{
mbed_official 76:aeb1df146756 125 */
mbed_official 76:aeb1df146756 126
mbed_official 76:aeb1df146756 127 /** @defgroup FLASH_Group1 FLASH Interface configuration functions
mbed_official 76:aeb1df146756 128 * @brief FLASH Interface configuration functions
mbed_official 76:aeb1df146756 129 *
mbed_official 76:aeb1df146756 130 @verbatim
mbed_official 76:aeb1df146756 131 ==============================================================================
mbed_official 76:aeb1df146756 132 ##### FLASH Interface configuration functions #####
mbed_official 76:aeb1df146756 133 ==============================================================================
mbed_official 76:aeb1df146756 134
mbed_official 76:aeb1df146756 135 [..] FLASH_Interface configuration_Functions, includes the following functions:
mbed_official 76:aeb1df146756 136 (+) void FLASH_SetLatency(uint32_t FLASH_Latency):
mbed_official 76:aeb1df146756 137 [..] To correctly read data from Flash memory, the number of wait states (LATENCY)
mbed_official 76:aeb1df146756 138 must be correctly programmed according to the frequency of the CPU clock
mbed_official 76:aeb1df146756 139 (HCLK) and the supply voltage of the device.
mbed_official 76:aeb1df146756 140 [..]
mbed_official 76:aeb1df146756 141 ----------------------------------------------------------------
mbed_official 76:aeb1df146756 142 | Wait states | HCLK clock frequency (MHz) |
mbed_official 76:aeb1df146756 143 | |------------------------------------------------|
mbed_official 76:aeb1df146756 144 | (Latency) | voltage range | voltage range |
mbed_official 76:aeb1df146756 145 | | 1.65 V - 3.6 V | 2.0 V - 3.6 V |
mbed_official 76:aeb1df146756 146 | |----------------|---------------|---------------|
mbed_official 76:aeb1df146756 147 | | VCORE = 1.2 V | VCORE = 1.5 V | VCORE = 1.8 V |
mbed_official 76:aeb1df146756 148 |-------------- |----------------|---------------|---------------|
mbed_official 76:aeb1df146756 149 |0WS(1CPU cycle)|0 < HCLK <= 2 |0 < HCLK <= 8 |0 < HCLK <= 16 |
mbed_official 76:aeb1df146756 150 |---------------|----------------|---------------|---------------|
mbed_official 76:aeb1df146756 151 |1WS(2CPU cycle)|2 < HCLK <= 4 |8 < HCLK <= 16 |16 < HCLK <= 32|
mbed_official 76:aeb1df146756 152 ----------------------------------------------------------------
mbed_official 76:aeb1df146756 153 [..]
mbed_official 76:aeb1df146756 154 (+) void FLASH_PrefetchBufferCmd(FunctionalState NewState);
mbed_official 76:aeb1df146756 155 (+) void FLASH_ReadAccess64Cmd(FunctionalState NewState);
mbed_official 76:aeb1df146756 156 (+) void FLASH_RUNPowerDownCmd(FunctionalState NewState);
mbed_official 76:aeb1df146756 157 (+) void FLASH_SLEEPPowerDownCmd(FunctionalState NewState);
mbed_official 76:aeb1df146756 158 (+) void FLASH_ITConfig(uint32_t FLASH_IT, FunctionalState NewState);
mbed_official 76:aeb1df146756 159 [..]
mbed_official 76:aeb1df146756 160 Here below the allowed configuration of Latency, 64Bit access and prefetch buffer
mbed_official 76:aeb1df146756 161 [..]
mbed_official 76:aeb1df146756 162 --------------------------------------------------------------------------------
mbed_official 76:aeb1df146756 163 | | ACC64 = 0 | ACC64 = 1 |
mbed_official 76:aeb1df146756 164 | Latency |----------------|---------------|---------------|---------------|
mbed_official 76:aeb1df146756 165 | | PRFTEN = 0 | PRFTEN = 1 | PRFTEN = 0 | PRFTEN = 1 |
mbed_official 76:aeb1df146756 166 |---------------|----------------|---------------|---------------|---------------|
mbed_official 76:aeb1df146756 167 |0WS(1CPU cycle)| YES | NO | YES | YES |
mbed_official 76:aeb1df146756 168 |---------------|----------------|---------------|---------------|---------------|
mbed_official 76:aeb1df146756 169 |1WS(2CPU cycle)| NO | NO | YES | YES |
mbed_official 76:aeb1df146756 170 --------------------------------------------------------------------------------
mbed_official 76:aeb1df146756 171 [..]
mbed_official 76:aeb1df146756 172 All these functions don't need the unlock sequence.
mbed_official 76:aeb1df146756 173
mbed_official 76:aeb1df146756 174 @endverbatim
mbed_official 76:aeb1df146756 175 * @{
mbed_official 76:aeb1df146756 176 */
mbed_official 76:aeb1df146756 177
mbed_official 76:aeb1df146756 178 /**
mbed_official 76:aeb1df146756 179 * @brief Sets the code latency value.
mbed_official 76:aeb1df146756 180 * @param FLASH_Latency: specifies the FLASH Latency value.
mbed_official 76:aeb1df146756 181 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 182 * @arg FLASH_Latency_0: FLASH Zero Latency cycle.
mbed_official 76:aeb1df146756 183 * @arg FLASH_Latency_1: FLASH One Latency cycle.
mbed_official 76:aeb1df146756 184 * @retval None
mbed_official 76:aeb1df146756 185 */
mbed_official 76:aeb1df146756 186 void FLASH_SetLatency(uint32_t FLASH_Latency)
mbed_official 76:aeb1df146756 187 {
mbed_official 76:aeb1df146756 188 uint32_t tmpreg = 0;
mbed_official 76:aeb1df146756 189
mbed_official 76:aeb1df146756 190 /* Check the parameters */
mbed_official 76:aeb1df146756 191 assert_param(IS_FLASH_LATENCY(FLASH_Latency));
mbed_official 76:aeb1df146756 192
mbed_official 76:aeb1df146756 193 /* Read the ACR register */
mbed_official 76:aeb1df146756 194 tmpreg = FLASH->ACR;
mbed_official 76:aeb1df146756 195
mbed_official 76:aeb1df146756 196 /* Sets the Latency value */
mbed_official 76:aeb1df146756 197 tmpreg &= (uint32_t) (~((uint32_t)FLASH_ACR_LATENCY));
mbed_official 76:aeb1df146756 198 tmpreg |= FLASH_Latency;
mbed_official 76:aeb1df146756 199
mbed_official 76:aeb1df146756 200 /* Write the ACR register */
mbed_official 76:aeb1df146756 201 FLASH->ACR = tmpreg;
mbed_official 76:aeb1df146756 202 }
mbed_official 76:aeb1df146756 203
mbed_official 76:aeb1df146756 204 /**
mbed_official 76:aeb1df146756 205 * @brief Enables or disables the Prefetch Buffer.
mbed_official 76:aeb1df146756 206 * @param NewState: new state of the FLASH prefetch buffer.
mbed_official 76:aeb1df146756 207 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 208 * @retval None
mbed_official 76:aeb1df146756 209 */
mbed_official 76:aeb1df146756 210 void FLASH_PrefetchBufferCmd(FunctionalState NewState)
mbed_official 76:aeb1df146756 211 {
mbed_official 76:aeb1df146756 212 /* Check the parameters */
mbed_official 76:aeb1df146756 213 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 214
mbed_official 76:aeb1df146756 215 if(NewState != DISABLE)
mbed_official 76:aeb1df146756 216 {
mbed_official 76:aeb1df146756 217 FLASH->ACR |= FLASH_ACR_PRFTEN;
mbed_official 76:aeb1df146756 218 }
mbed_official 76:aeb1df146756 219 else
mbed_official 76:aeb1df146756 220 {
mbed_official 76:aeb1df146756 221 FLASH->ACR &= (uint32_t)(~((uint32_t)FLASH_ACR_PRFTEN));
mbed_official 76:aeb1df146756 222 }
mbed_official 76:aeb1df146756 223 }
mbed_official 76:aeb1df146756 224
mbed_official 76:aeb1df146756 225 /**
mbed_official 76:aeb1df146756 226 * @brief Enables or disables read access to flash by 64 bits.
mbed_official 76:aeb1df146756 227 * @param NewState: new state of the FLASH read access mode.
mbed_official 76:aeb1df146756 228 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 229 * @note If this bit is set, the Read access 64 bit is used.
mbed_official 76:aeb1df146756 230 * If this bit is reset, the Read access 32 bit is used.
mbed_official 76:aeb1df146756 231 * @note This bit cannot be written at the same time as the LATENCY and
mbed_official 76:aeb1df146756 232 * PRFTEN bits.
mbed_official 76:aeb1df146756 233 * To reset this bit, the LATENCY should be zero wait state and the
mbed_official 76:aeb1df146756 234 * prefetch off.
mbed_official 76:aeb1df146756 235 * @retval None
mbed_official 76:aeb1df146756 236 */
mbed_official 76:aeb1df146756 237 void FLASH_ReadAccess64Cmd(FunctionalState NewState)
mbed_official 76:aeb1df146756 238 {
mbed_official 76:aeb1df146756 239 /* Check the parameters */
mbed_official 76:aeb1df146756 240 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 241
mbed_official 76:aeb1df146756 242 if(NewState != DISABLE)
mbed_official 76:aeb1df146756 243 {
mbed_official 76:aeb1df146756 244 FLASH->ACR |= FLASH_ACR_ACC64;
mbed_official 76:aeb1df146756 245 }
mbed_official 76:aeb1df146756 246 else
mbed_official 76:aeb1df146756 247 {
mbed_official 76:aeb1df146756 248 FLASH->ACR &= (uint32_t)(~((uint32_t)FLASH_ACR_ACC64));
mbed_official 76:aeb1df146756 249 }
mbed_official 76:aeb1df146756 250 }
mbed_official 76:aeb1df146756 251
mbed_official 76:aeb1df146756 252 /**
mbed_official 76:aeb1df146756 253 * @brief Enable or disable the power down mode during Sleep mode.
mbed_official 76:aeb1df146756 254 * @note This function is used to power down the FLASH when the system is in SLEEP LP mode.
mbed_official 76:aeb1df146756 255 * @param NewState: new state of the power down mode during sleep mode.
mbed_official 76:aeb1df146756 256 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 257 * @retval None
mbed_official 76:aeb1df146756 258 */
mbed_official 76:aeb1df146756 259 void FLASH_SLEEPPowerDownCmd(FunctionalState NewState)
mbed_official 76:aeb1df146756 260 {
mbed_official 76:aeb1df146756 261 /* Check the parameters */
mbed_official 76:aeb1df146756 262 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 263
mbed_official 76:aeb1df146756 264 if (NewState != DISABLE)
mbed_official 76:aeb1df146756 265 {
mbed_official 76:aeb1df146756 266 /* Set the SLEEP_PD bit to put Flash in power down mode during sleep mode */
mbed_official 76:aeb1df146756 267 FLASH->ACR |= FLASH_ACR_SLEEP_PD;
mbed_official 76:aeb1df146756 268 }
mbed_official 76:aeb1df146756 269 else
mbed_official 76:aeb1df146756 270 {
mbed_official 76:aeb1df146756 271 /* Clear the SLEEP_PD bit in to put Flash in idle mode during sleep mode */
mbed_official 76:aeb1df146756 272 FLASH->ACR &= (uint32_t)(~((uint32_t)FLASH_ACR_SLEEP_PD));
mbed_official 76:aeb1df146756 273 }
mbed_official 76:aeb1df146756 274 }
mbed_official 76:aeb1df146756 275
mbed_official 76:aeb1df146756 276 /**
mbed_official 76:aeb1df146756 277 * @}
mbed_official 76:aeb1df146756 278 */
mbed_official 76:aeb1df146756 279
mbed_official 76:aeb1df146756 280 /** @defgroup FLASH_Group2 FLASH Memory Programming functions
mbed_official 76:aeb1df146756 281 * @brief FLASH Memory Programming functions
mbed_official 76:aeb1df146756 282 *
mbed_official 76:aeb1df146756 283 @verbatim
mbed_official 76:aeb1df146756 284 ==============================================================================
mbed_official 76:aeb1df146756 285 ##### FLASH Memory Programming functions #####
mbed_official 76:aeb1df146756 286 ==============================================================================
mbed_official 76:aeb1df146756 287
mbed_official 76:aeb1df146756 288 [..] The FLASH Memory Programming functions, includes the following functions:
mbed_official 76:aeb1df146756 289 (+) void FLASH_Unlock(void);
mbed_official 76:aeb1df146756 290 (+) void FLASH_Lock(void);
mbed_official 76:aeb1df146756 291 (+) FLASH_Status FLASH_ErasePage(uint32_t Page_Address);
mbed_official 76:aeb1df146756 292 (+) FLASH_Status FLASH_FastProgramWord(uint32_t Address, uint32_t Data);
mbed_official 76:aeb1df146756 293
mbed_official 76:aeb1df146756 294 [..] Any operation of erase or program should follow these steps:
mbed_official 76:aeb1df146756 295 (#) Call the FLASH_Unlock() function to enable the flash control register and
mbed_official 76:aeb1df146756 296 program memory access.
mbed_official 76:aeb1df146756 297 (#) Call the desired function to erase page or program data.
mbed_official 76:aeb1df146756 298 (#) Call the FLASH_Lock() to disable the flash program memory access
mbed_official 76:aeb1df146756 299 (recommended to protect the FLASH memory against possible unwanted operation).
mbed_official 76:aeb1df146756 300
mbed_official 76:aeb1df146756 301 @endverbatim
mbed_official 76:aeb1df146756 302 * @{
mbed_official 76:aeb1df146756 303 */
mbed_official 76:aeb1df146756 304
mbed_official 76:aeb1df146756 305 /**
mbed_official 76:aeb1df146756 306 * @brief Unlocks the FLASH control register and program memory access.
mbed_official 76:aeb1df146756 307 * @param None
mbed_official 76:aeb1df146756 308 * @retval None
mbed_official 76:aeb1df146756 309 */
mbed_official 76:aeb1df146756 310 void FLASH_Unlock(void)
mbed_official 76:aeb1df146756 311 {
mbed_official 76:aeb1df146756 312 if((FLASH->PECR & FLASH_PECR_PRGLOCK) != RESET)
mbed_official 76:aeb1df146756 313 {
mbed_official 76:aeb1df146756 314 /* Unlocking the data memory and FLASH_PECR register access */
mbed_official 76:aeb1df146756 315 DATA_EEPROM_Unlock();
mbed_official 76:aeb1df146756 316
mbed_official 76:aeb1df146756 317 /* Unlocking the program memory access */
mbed_official 76:aeb1df146756 318 FLASH->PRGKEYR = FLASH_PRGKEY1;
mbed_official 76:aeb1df146756 319 FLASH->PRGKEYR = FLASH_PRGKEY2;
mbed_official 76:aeb1df146756 320 }
mbed_official 76:aeb1df146756 321 }
mbed_official 76:aeb1df146756 322
mbed_official 76:aeb1df146756 323 /**
mbed_official 76:aeb1df146756 324 * @brief Locks the Program memory access.
mbed_official 76:aeb1df146756 325 * @param None
mbed_official 76:aeb1df146756 326 * @retval None
mbed_official 76:aeb1df146756 327 */
mbed_official 76:aeb1df146756 328 void FLASH_Lock(void)
mbed_official 76:aeb1df146756 329 {
mbed_official 76:aeb1df146756 330 /* Set the PRGLOCK Bit to lock the program memory access */
mbed_official 76:aeb1df146756 331 FLASH->PECR |= FLASH_PECR_PRGLOCK;
mbed_official 76:aeb1df146756 332 }
mbed_official 76:aeb1df146756 333
mbed_official 76:aeb1df146756 334 /**
mbed_official 76:aeb1df146756 335 * @brief Erases a specified page in program memory.
mbed_official 76:aeb1df146756 336 * @note To correctly run this function, the FLASH_Unlock() function
mbed_official 76:aeb1df146756 337 * must be called before.
mbed_official 76:aeb1df146756 338 * Call the FLASH_Lock() to disable the flash memory access
mbed_official 76:aeb1df146756 339 * (recommended to protect the FLASH memory against possible unwanted operation)
mbed_official 76:aeb1df146756 340 * @param Page_Address: The page address in program memory to be erased.
mbed_official 76:aeb1df146756 341 * @note A Page is erased in the Program memory only if the address to load
mbed_official 76:aeb1df146756 342 * is the start address of a page (multiple of 256 bytes).
mbed_official 76:aeb1df146756 343 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 344 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 345 */
mbed_official 76:aeb1df146756 346 FLASH_Status FLASH_ErasePage(uint32_t Page_Address)
mbed_official 76:aeb1df146756 347 {
mbed_official 76:aeb1df146756 348 FLASH_Status status = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 349
mbed_official 76:aeb1df146756 350 /* Check the parameters */
mbed_official 76:aeb1df146756 351 assert_param(IS_FLASH_PROGRAM_ADDRESS(Page_Address));
mbed_official 76:aeb1df146756 352
mbed_official 76:aeb1df146756 353 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 354 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 355
mbed_official 76:aeb1df146756 356 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 357 {
mbed_official 76:aeb1df146756 358 /* If the previous operation is completed, proceed to erase the page */
mbed_official 76:aeb1df146756 359
mbed_official 76:aeb1df146756 360 /* Set the ERASE bit */
mbed_official 76:aeb1df146756 361 FLASH->PECR |= FLASH_PECR_ERASE;
mbed_official 76:aeb1df146756 362
mbed_official 76:aeb1df146756 363 /* Set PROG bit */
mbed_official 76:aeb1df146756 364 FLASH->PECR |= FLASH_PECR_PROG;
mbed_official 76:aeb1df146756 365
mbed_official 76:aeb1df146756 366 /* Write 00000000h to the first word of the program page to erase */
mbed_official 76:aeb1df146756 367 *(__IO uint32_t *)Page_Address = 0x00000000;
mbed_official 76:aeb1df146756 368
mbed_official 76:aeb1df146756 369 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 370 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 371
mbed_official 76:aeb1df146756 372 /* If the erase operation is completed, disable the ERASE and PROG bits */
mbed_official 76:aeb1df146756 373 FLASH->PECR &= (uint32_t)(~FLASH_PECR_PROG);
mbed_official 76:aeb1df146756 374 FLASH->PECR &= (uint32_t)(~FLASH_PECR_ERASE);
mbed_official 76:aeb1df146756 375 }
mbed_official 76:aeb1df146756 376 /* Return the Erase Status */
mbed_official 76:aeb1df146756 377 return status;
mbed_official 76:aeb1df146756 378 }
mbed_official 76:aeb1df146756 379
mbed_official 76:aeb1df146756 380 /**
mbed_official 76:aeb1df146756 381 * @brief Programs a word at a specified address in program memory.
mbed_official 76:aeb1df146756 382 * @note To correctly run this function, the FLASH_Unlock() function
mbed_official 76:aeb1df146756 383 * must be called before.
mbed_official 76:aeb1df146756 384 * Call the FLASH_Lock() to disable the flash memory access
mbed_official 76:aeb1df146756 385 * (recommended to protect the FLASH memory against possible unwanted operation).
mbed_official 76:aeb1df146756 386 * @param Address: specifies the address to be written.
mbed_official 76:aeb1df146756 387 * @param Data: specifies the data to be written.
mbed_official 76:aeb1df146756 388 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 389 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 390 */
mbed_official 76:aeb1df146756 391 FLASH_Status FLASH_FastProgramWord(uint32_t Address, uint32_t Data)
mbed_official 76:aeb1df146756 392 {
mbed_official 76:aeb1df146756 393 FLASH_Status status = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 394
mbed_official 76:aeb1df146756 395 /* Check the parameters */
mbed_official 76:aeb1df146756 396 assert_param(IS_FLASH_PROGRAM_ADDRESS(Address));
mbed_official 76:aeb1df146756 397
mbed_official 76:aeb1df146756 398 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 399 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 400
mbed_official 76:aeb1df146756 401 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 402 {
mbed_official 76:aeb1df146756 403 /* If the previous operation is completed, proceed to program the new word */
mbed_official 76:aeb1df146756 404 *(__IO uint32_t *)Address = Data;
mbed_official 76:aeb1df146756 405
mbed_official 76:aeb1df146756 406 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 407 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 408 }
mbed_official 76:aeb1df146756 409 /* Return the Write Status */
mbed_official 76:aeb1df146756 410 return status;
mbed_official 76:aeb1df146756 411 }
mbed_official 76:aeb1df146756 412
mbed_official 76:aeb1df146756 413 /**
mbed_official 76:aeb1df146756 414 * @}
mbed_official 76:aeb1df146756 415 */
mbed_official 76:aeb1df146756 416
mbed_official 76:aeb1df146756 417 /** @defgroup FLASH_Group3 DATA EEPROM Programming functions
mbed_official 76:aeb1df146756 418 * @brief DATA EEPROM Programming functions
mbed_official 76:aeb1df146756 419 *
mbed_official 76:aeb1df146756 420 @verbatim
mbed_official 76:aeb1df146756 421 ===============================================================================
mbed_official 76:aeb1df146756 422 ##### DATA EEPROM Programming functions #####
mbed_official 76:aeb1df146756 423 ===============================================================================
mbed_official 76:aeb1df146756 424
mbed_official 76:aeb1df146756 425 [..] The DATA_EEPROM Programming_Functions, includes the following functions:
mbed_official 76:aeb1df146756 426 (+) void DATA_EEPROM_Unlock(void);
mbed_official 76:aeb1df146756 427 (+) void DATA_EEPROM_Lock(void);
mbed_official 76:aeb1df146756 428 (+) FLASH_Status DATA_EEPROM_EraseByte(uint32_t Address);
mbed_official 76:aeb1df146756 429 (+) FLASH_Status DATA_EEPROM_EraseHalfWord(uint32_t Address);
mbed_official 76:aeb1df146756 430 (+) FLASH_Status DATA_EEPROM_EraseWord(uint32_t Address);
mbed_official 76:aeb1df146756 431 (+) FLASH_Status DATA_EEPROM_FastProgramByte(uint32_t Address, uint8_t Data);
mbed_official 76:aeb1df146756 432 (+) FLASH_Status DATA_EEPROM_FastProgramHalfWord(uint32_t Address, uint16_t Data);
mbed_official 76:aeb1df146756 433 (+) FLASH_Status DATA_EEPROM_FastProgramWord(uint32_t Address, uint32_t Data);
mbed_official 76:aeb1df146756 434 (+) FLASH_Status DATA_EEPROM_ProgramByte(uint32_t Address, uint8_t Data);
mbed_official 76:aeb1df146756 435 (+) FLASH_Status DATA_EEPROM_ProgramHalfWord(uint32_t Address, uint16_t Data);
mbed_official 76:aeb1df146756 436 (+) FLASH_Status DATA_EEPROM_ProgramWord(uint32_t Address, uint32_t Data);
mbed_official 76:aeb1df146756 437
mbed_official 76:aeb1df146756 438 [..] Any operation of erase or program should follow these steps:
mbed_official 76:aeb1df146756 439 (#) Call the DATA_EEPROM_Unlock() function to enable the data EEPROM access
mbed_official 76:aeb1df146756 440 and Flash program erase control register access.
mbed_official 76:aeb1df146756 441 (#) Call the desired function to erase or program data.
mbed_official 76:aeb1df146756 442 (#) Call the DATA_EEPROM_Lock() to disable the data EEPROM access
mbed_official 76:aeb1df146756 443 and Flash program erase control register access(recommended
mbed_official 76:aeb1df146756 444 to protect the DATA_EEPROM against possible unwanted operation).
mbed_official 76:aeb1df146756 445
mbed_official 76:aeb1df146756 446 @endverbatim
mbed_official 76:aeb1df146756 447 * @{
mbed_official 76:aeb1df146756 448 */
mbed_official 76:aeb1df146756 449
mbed_official 76:aeb1df146756 450 /**
mbed_official 76:aeb1df146756 451 * @brief Unlocks the data memory and FLASH_PECR register access.
mbed_official 76:aeb1df146756 452 * @param None
mbed_official 76:aeb1df146756 453 * @retval None
mbed_official 76:aeb1df146756 454 */
mbed_official 76:aeb1df146756 455 void DATA_EEPROM_Unlock(void)
mbed_official 76:aeb1df146756 456 {
mbed_official 76:aeb1df146756 457 if((FLASH->PECR & FLASH_PECR_PELOCK) != RESET)
mbed_official 76:aeb1df146756 458 {
mbed_official 76:aeb1df146756 459 /* Unlocking the Data memory and FLASH_PECR register access*/
mbed_official 76:aeb1df146756 460 FLASH->PEKEYR = FLASH_PEKEY1;
mbed_official 76:aeb1df146756 461 FLASH->PEKEYR = FLASH_PEKEY2;
mbed_official 76:aeb1df146756 462 }
mbed_official 76:aeb1df146756 463 }
mbed_official 76:aeb1df146756 464
mbed_official 76:aeb1df146756 465 /**
mbed_official 76:aeb1df146756 466 * @brief Locks the Data memory and FLASH_PECR register access.
mbed_official 76:aeb1df146756 467 * @param None
mbed_official 76:aeb1df146756 468 * @retval None
mbed_official 76:aeb1df146756 469 */
mbed_official 76:aeb1df146756 470 void DATA_EEPROM_Lock(void)
mbed_official 76:aeb1df146756 471 {
mbed_official 76:aeb1df146756 472 /* Set the PELOCK Bit to lock the data memory and FLASH_PECR register access */
mbed_official 76:aeb1df146756 473 FLASH->PECR |= FLASH_PECR_PELOCK;
mbed_official 76:aeb1df146756 474 }
mbed_official 76:aeb1df146756 475
mbed_official 76:aeb1df146756 476 /**
mbed_official 76:aeb1df146756 477 * @brief Enables or disables DATA EEPROM fixed Time programming (2*Tprog).
mbed_official 76:aeb1df146756 478 * @param NewState: new state of the DATA EEPROM fixed Time programming mode.
mbed_official 76:aeb1df146756 479 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 480 * @retval None
mbed_official 76:aeb1df146756 481 */
mbed_official 76:aeb1df146756 482 void DATA_EEPROM_FixedTimeProgramCmd(FunctionalState NewState)
mbed_official 76:aeb1df146756 483 {
mbed_official 76:aeb1df146756 484 /* Check the parameters */
mbed_official 76:aeb1df146756 485 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 486
mbed_official 76:aeb1df146756 487 if(NewState != DISABLE)
mbed_official 76:aeb1df146756 488 {
mbed_official 76:aeb1df146756 489 FLASH->PECR |= (uint32_t)FLASH_PECR_FTDW;
mbed_official 76:aeb1df146756 490 }
mbed_official 76:aeb1df146756 491 else
mbed_official 76:aeb1df146756 492 {
mbed_official 76:aeb1df146756 493 FLASH->PECR &= (uint32_t)(~((uint32_t)FLASH_PECR_FTDW));
mbed_official 76:aeb1df146756 494 }
mbed_official 76:aeb1df146756 495 }
mbed_official 76:aeb1df146756 496
mbed_official 76:aeb1df146756 497 /**
mbed_official 76:aeb1df146756 498 * @brief Erase a byte in data memory.
mbed_official 76:aeb1df146756 499 * @param Address: specifies the address to be erased.
mbed_official 80:66393a7b209d 500 * @note This function can be used only for STM32L1XX_HD, STM32L1XX_MDP and
mbed_official 80:66393a7b209d 501 * STM32L1XX_XL devices.
mbed_official 76:aeb1df146756 502 * @note To correctly run this function, the DATA_EEPROM_Unlock() function
mbed_official 76:aeb1df146756 503 * must be called before.
mbed_official 80:66393a7b209d 504 * Call the DATA_EEPROM_Lock() to disable the data EEPROM access
mbed_official 76:aeb1df146756 505 * and Flash program erase control register access(recommended to protect
mbed_official 76:aeb1df146756 506 * the DATA_EEPROM against possible unwanted operation).
mbed_official 76:aeb1df146756 507 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 508 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 509 */
mbed_official 76:aeb1df146756 510 FLASH_Status DATA_EEPROM_EraseByte(uint32_t Address)
mbed_official 76:aeb1df146756 511 {
mbed_official 76:aeb1df146756 512 FLASH_Status status = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 513
mbed_official 76:aeb1df146756 514 /* Check the parameters */
mbed_official 76:aeb1df146756 515 assert_param(IS_FLASH_DATA_ADDRESS(Address));
mbed_official 76:aeb1df146756 516
mbed_official 76:aeb1df146756 517 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 518 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 519
mbed_official 76:aeb1df146756 520 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 521 {
mbed_official 76:aeb1df146756 522 /* Write "00h" to valid address in the data memory" */
mbed_official 76:aeb1df146756 523 *(__IO uint8_t *) Address = (uint8_t)0x00;
mbed_official 76:aeb1df146756 524 }
mbed_official 76:aeb1df146756 525
mbed_official 76:aeb1df146756 526 /* Return the erase status */
mbed_official 76:aeb1df146756 527 return status;
mbed_official 76:aeb1df146756 528 }
mbed_official 76:aeb1df146756 529
mbed_official 76:aeb1df146756 530 /**
mbed_official 76:aeb1df146756 531 * @brief Erase a halfword in data memory.
mbed_official 76:aeb1df146756 532 * @param Address: specifies the address to be erased.
mbed_official 80:66393a7b209d 533 * @note This function can be used only for STM32L1XX_HD, STM32L1XX_MDP and
mbed_official 80:66393a7b209d 534 * STM32L1XX_XL devices.
mbed_official 76:aeb1df146756 535 * @note To correctly run this function, the DATA_EEPROM_Unlock() function
mbed_official 76:aeb1df146756 536 * must be called before.
mbed_official 80:66393a7b209d 537 * Call the DATA_EEPROM_Lock() to disable the data EEPROM access
mbed_official 76:aeb1df146756 538 * and Flash program erase control register access(recommended to protect
mbed_official 76:aeb1df146756 539 * the DATA_EEPROM against possible unwanted operation).
mbed_official 76:aeb1df146756 540 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 541 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 542 */
mbed_official 76:aeb1df146756 543 FLASH_Status DATA_EEPROM_EraseHalfWord(uint32_t Address)
mbed_official 76:aeb1df146756 544 {
mbed_official 76:aeb1df146756 545 FLASH_Status status = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 546
mbed_official 76:aeb1df146756 547 /* Check the parameters */
mbed_official 76:aeb1df146756 548 assert_param(IS_FLASH_DATA_ADDRESS(Address));
mbed_official 76:aeb1df146756 549
mbed_official 76:aeb1df146756 550 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 551 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 552
mbed_official 76:aeb1df146756 553 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 554 {
mbed_official 76:aeb1df146756 555 /* Write "0000h" to valid address in the data memory" */
mbed_official 76:aeb1df146756 556 *(__IO uint16_t *) Address = (uint16_t)0x0000;
mbed_official 76:aeb1df146756 557 }
mbed_official 76:aeb1df146756 558
mbed_official 76:aeb1df146756 559 /* Return the erase status */
mbed_official 76:aeb1df146756 560 return status;
mbed_official 76:aeb1df146756 561 }
mbed_official 76:aeb1df146756 562
mbed_official 76:aeb1df146756 563 /**
mbed_official 76:aeb1df146756 564 * @brief Erase a word in data memory.
mbed_official 76:aeb1df146756 565 * @param Address: specifies the address to be erased.
mbed_official 76:aeb1df146756 566 * @note For STM32L1XX_MD, A data memory word is erased in the data memory only
mbed_official 76:aeb1df146756 567 * if the address to load is the start address of a word (multiple of a word).
mbed_official 76:aeb1df146756 568 * @note To correctly run this function, the DATA_EEPROM_Unlock() function
mbed_official 76:aeb1df146756 569 * must be called before.
mbed_official 80:66393a7b209d 570 * Call the DATA_EEPROM_Lock() to disable the data EEPROM access
mbed_official 76:aeb1df146756 571 * and Flash program erase control register access(recommended to protect
mbed_official 76:aeb1df146756 572 * the DATA_EEPROM against possible unwanted operation).
mbed_official 76:aeb1df146756 573 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 574 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 575 */
mbed_official 76:aeb1df146756 576 FLASH_Status DATA_EEPROM_EraseWord(uint32_t Address)
mbed_official 76:aeb1df146756 577 {
mbed_official 76:aeb1df146756 578 FLASH_Status status = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 579
mbed_official 76:aeb1df146756 580 /* Check the parameters */
mbed_official 76:aeb1df146756 581 assert_param(IS_FLASH_DATA_ADDRESS(Address));
mbed_official 76:aeb1df146756 582
mbed_official 76:aeb1df146756 583 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 584 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 585
mbed_official 76:aeb1df146756 586 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 587 {
mbed_official 76:aeb1df146756 588 /* Write "00000000h" to valid address in the data memory" */
mbed_official 76:aeb1df146756 589 *(__IO uint32_t *) Address = 0x00000000;
mbed_official 76:aeb1df146756 590 }
mbed_official 76:aeb1df146756 591
mbed_official 76:aeb1df146756 592 /* Return the erase status */
mbed_official 76:aeb1df146756 593 return status;
mbed_official 76:aeb1df146756 594 }
mbed_official 76:aeb1df146756 595
mbed_official 76:aeb1df146756 596 /**
mbed_official 76:aeb1df146756 597 * @brief Write a Byte at a specified address in data memory.
mbed_official 76:aeb1df146756 598 * @note To correctly run this function, the DATA_EEPROM_Unlock() function
mbed_official 76:aeb1df146756 599 * must be called before.
mbed_official 80:66393a7b209d 600 * Call the DATA_EEPROM_Lock() to disable the data EEPROM access
mbed_official 76:aeb1df146756 601 * and Flash program erase control register access(recommended to protect
mbed_official 76:aeb1df146756 602 * the DATA_EEPROM against possible unwanted operation).
mbed_official 76:aeb1df146756 603 * @param Address: specifies the address to be written.
mbed_official 76:aeb1df146756 604 * @param Data: specifies the data to be written.
mbed_official 76:aeb1df146756 605 * @note This function assumes that the is data word is already erased.
mbed_official 76:aeb1df146756 606 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 607 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 608 */
mbed_official 76:aeb1df146756 609 FLASH_Status DATA_EEPROM_FastProgramByte(uint32_t Address, uint8_t Data)
mbed_official 76:aeb1df146756 610 {
mbed_official 76:aeb1df146756 611 FLASH_Status status = FLASH_COMPLETE;
mbed_official 80:66393a7b209d 612 #if !defined (STM32L1XX_HD) && !defined (STM32L1XX_MDP) && !defined (STM32L1XX_XL)
mbed_official 76:aeb1df146756 613 uint32_t tmp = 0, tmpaddr = 0;
mbed_official 76:aeb1df146756 614 #endif
mbed_official 76:aeb1df146756 615
mbed_official 76:aeb1df146756 616 /* Check the parameters */
mbed_official 76:aeb1df146756 617 assert_param(IS_FLASH_DATA_ADDRESS(Address));
mbed_official 76:aeb1df146756 618
mbed_official 76:aeb1df146756 619 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 620 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 621
mbed_official 76:aeb1df146756 622 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 623 {
mbed_official 76:aeb1df146756 624 /* Clear the FTDW bit */
mbed_official 76:aeb1df146756 625 FLASH->PECR &= (uint32_t)(~((uint32_t)FLASH_PECR_FTDW));
mbed_official 76:aeb1df146756 626
mbed_official 80:66393a7b209d 627 #if !defined (STM32L1XX_HD) && !defined (STM32L1XX_MDP) && !defined (STM32L1XX_XL)
mbed_official 76:aeb1df146756 628 if(Data != (uint8_t)0x00)
mbed_official 76:aeb1df146756 629 {
mbed_official 76:aeb1df146756 630 /* If the previous operation is completed, proceed to write the new Data */
mbed_official 76:aeb1df146756 631 *(__IO uint8_t *)Address = Data;
mbed_official 76:aeb1df146756 632
mbed_official 76:aeb1df146756 633 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 634 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 635 }
mbed_official 76:aeb1df146756 636 else
mbed_official 76:aeb1df146756 637 {
mbed_official 76:aeb1df146756 638 tmpaddr = Address & 0xFFFFFFFC;
mbed_official 76:aeb1df146756 639 tmp = * (__IO uint32_t *) tmpaddr;
mbed_official 76:aeb1df146756 640 tmpaddr = 0xFF << ((uint32_t) (0x8 * (Address & 0x3)));
mbed_official 76:aeb1df146756 641 tmp &= ~tmpaddr;
mbed_official 76:aeb1df146756 642 status = DATA_EEPROM_EraseWord(Address & 0xFFFFFFFC);
mbed_official 76:aeb1df146756 643 status = DATA_EEPROM_FastProgramWord((Address & 0xFFFFFFFC), tmp);
mbed_official 76:aeb1df146756 644 }
mbed_official 80:66393a7b209d 645 #elif defined (STM32L1XX_HD) || defined (STM32L1XX_MDP) || defined (STM32L1XX_XL)
mbed_official 76:aeb1df146756 646 /* If the previous operation is completed, proceed to write the new Data */
mbed_official 76:aeb1df146756 647 *(__IO uint8_t *)Address = Data;
mbed_official 76:aeb1df146756 648
mbed_official 76:aeb1df146756 649 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 650 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 651 #endif
mbed_official 76:aeb1df146756 652 }
mbed_official 76:aeb1df146756 653 /* Return the Write Status */
mbed_official 76:aeb1df146756 654 return status;
mbed_official 76:aeb1df146756 655 }
mbed_official 76:aeb1df146756 656
mbed_official 76:aeb1df146756 657 /**
mbed_official 76:aeb1df146756 658 * @brief Writes a half word at a specified address in data memory.
mbed_official 76:aeb1df146756 659 * @note To correctly run this function, the DATA_EEPROM_Unlock() function
mbed_official 76:aeb1df146756 660 * must be called before.
mbed_official 80:66393a7b209d 661 * Call the DATA_EEPROM_Lock() to disable the data EEPROM access
mbed_official 76:aeb1df146756 662 * and Flash program erase control register access(recommended to protect
mbed_official 76:aeb1df146756 663 * the DATA_EEPROM against possible unwanted operation).
mbed_official 76:aeb1df146756 664 * @param Address: specifies the address to be written.
mbed_official 76:aeb1df146756 665 * @param Data: specifies the data to be written.
mbed_official 76:aeb1df146756 666 * @note This function assumes that the is data word is already erased.
mbed_official 76:aeb1df146756 667 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 668 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 669 */
mbed_official 76:aeb1df146756 670 FLASH_Status DATA_EEPROM_FastProgramHalfWord(uint32_t Address, uint16_t Data)
mbed_official 76:aeb1df146756 671 {
mbed_official 76:aeb1df146756 672 FLASH_Status status = FLASH_COMPLETE;
mbed_official 80:66393a7b209d 673 #if !defined (STM32L1XX_HD) && !defined (STM32L1XX_MDP) && !defined (STM32L1XX_XL)
mbed_official 76:aeb1df146756 674 uint32_t tmp = 0, tmpaddr = 0;
mbed_official 76:aeb1df146756 675 #endif
mbed_official 76:aeb1df146756 676
mbed_official 76:aeb1df146756 677 /* Check the parameters */
mbed_official 76:aeb1df146756 678 assert_param(IS_FLASH_DATA_ADDRESS(Address));
mbed_official 76:aeb1df146756 679
mbed_official 76:aeb1df146756 680 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 681 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 682
mbed_official 76:aeb1df146756 683 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 684 {
mbed_official 76:aeb1df146756 685 /* Clear the FTDW bit */
mbed_official 76:aeb1df146756 686 FLASH->PECR &= (uint32_t)(~((uint32_t)FLASH_PECR_FTDW));
mbed_official 76:aeb1df146756 687
mbed_official 80:66393a7b209d 688 #if !defined (STM32L1XX_HD) && !defined (STM32L1XX_MDP) && !defined (STM32L1XX_XL)
mbed_official 76:aeb1df146756 689 if(Data != (uint16_t)0x0000)
mbed_official 76:aeb1df146756 690 {
mbed_official 76:aeb1df146756 691 /* If the previous operation is completed, proceed to write the new data */
mbed_official 76:aeb1df146756 692 *(__IO uint16_t *)Address = Data;
mbed_official 76:aeb1df146756 693
mbed_official 76:aeb1df146756 694 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 695 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 696 }
mbed_official 76:aeb1df146756 697 else
mbed_official 76:aeb1df146756 698 {
mbed_official 76:aeb1df146756 699 if((Address & 0x3) != 0x3)
mbed_official 76:aeb1df146756 700 {
mbed_official 76:aeb1df146756 701 tmpaddr = Address & 0xFFFFFFFC;
mbed_official 76:aeb1df146756 702 tmp = * (__IO uint32_t *) tmpaddr;
mbed_official 76:aeb1df146756 703 tmpaddr = 0xFFFF << ((uint32_t) (0x8 * (Address & 0x3)));
mbed_official 76:aeb1df146756 704 tmp &= ~tmpaddr;
mbed_official 76:aeb1df146756 705 status = DATA_EEPROM_EraseWord(Address & 0xFFFFFFFC);
mbed_official 76:aeb1df146756 706 status = DATA_EEPROM_FastProgramWord((Address & 0xFFFFFFFC), tmp);
mbed_official 76:aeb1df146756 707 }
mbed_official 76:aeb1df146756 708 else
mbed_official 76:aeb1df146756 709 {
mbed_official 76:aeb1df146756 710 DATA_EEPROM_FastProgramByte(Address, 0x00);
mbed_official 76:aeb1df146756 711 DATA_EEPROM_FastProgramByte(Address + 1, 0x00);
mbed_official 76:aeb1df146756 712 }
mbed_official 76:aeb1df146756 713 }
mbed_official 80:66393a7b209d 714 #elif defined (STM32L1XX_HD) || defined (STM32L1XX_MDP) || defined (STM32L1XX_XL)
mbed_official 76:aeb1df146756 715 /* If the previous operation is completed, proceed to write the new data */
mbed_official 76:aeb1df146756 716 *(__IO uint16_t *)Address = Data;
mbed_official 76:aeb1df146756 717
mbed_official 76:aeb1df146756 718 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 719 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 720 #endif
mbed_official 76:aeb1df146756 721 }
mbed_official 76:aeb1df146756 722 /* Return the Write Status */
mbed_official 76:aeb1df146756 723 return status;
mbed_official 76:aeb1df146756 724 }
mbed_official 76:aeb1df146756 725
mbed_official 76:aeb1df146756 726 /**
mbed_official 76:aeb1df146756 727 * @brief Programs a word at a specified address in data memory.
mbed_official 76:aeb1df146756 728 * @note To correctly run this function, the DATA_EEPROM_Unlock() function
mbed_official 76:aeb1df146756 729 * must be called before.
mbed_official 80:66393a7b209d 730 * Call the DATA_EEPROM_Lock() to disable the data EEPROM access
mbed_official 76:aeb1df146756 731 * and Flash program erase control register access(recommended to protect
mbed_official 76:aeb1df146756 732 * the DATA_EEPROM against possible unwanted operation).
mbed_official 76:aeb1df146756 733 * @param Address: specifies the address to be written.
mbed_official 76:aeb1df146756 734 * @param Data: specifies the data to be written.
mbed_official 76:aeb1df146756 735 * @note This function assumes that the is data word is already erased.
mbed_official 76:aeb1df146756 736 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 737 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 738 */
mbed_official 76:aeb1df146756 739 FLASH_Status DATA_EEPROM_FastProgramWord(uint32_t Address, uint32_t Data)
mbed_official 76:aeb1df146756 740 {
mbed_official 76:aeb1df146756 741 FLASH_Status status = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 742
mbed_official 76:aeb1df146756 743 /* Check the parameters */
mbed_official 76:aeb1df146756 744 assert_param(IS_FLASH_DATA_ADDRESS(Address));
mbed_official 76:aeb1df146756 745
mbed_official 76:aeb1df146756 746 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 747 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 748
mbed_official 76:aeb1df146756 749 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 750 {
mbed_official 76:aeb1df146756 751 /* Clear the FTDW bit */
mbed_official 76:aeb1df146756 752 FLASH->PECR &= (uint32_t)(~((uint32_t)FLASH_PECR_FTDW));
mbed_official 76:aeb1df146756 753
mbed_official 76:aeb1df146756 754 /* If the previous operation is completed, proceed to program the new data */
mbed_official 76:aeb1df146756 755 *(__IO uint32_t *)Address = Data;
mbed_official 76:aeb1df146756 756
mbed_official 76:aeb1df146756 757 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 758 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 759 }
mbed_official 76:aeb1df146756 760 /* Return the Write Status */
mbed_official 76:aeb1df146756 761 return status;
mbed_official 76:aeb1df146756 762 }
mbed_official 76:aeb1df146756 763
mbed_official 76:aeb1df146756 764 /**
mbed_official 76:aeb1df146756 765 * @brief Write a Byte at a specified address in data memory without erase.
mbed_official 76:aeb1df146756 766 * @note To correctly run this function, the DATA_EEPROM_Unlock() function
mbed_official 76:aeb1df146756 767 * must be called before.
mbed_official 80:66393a7b209d 768 * Call the DATA_EEPROM_Lock() to disable the data EEPROM access
mbed_official 76:aeb1df146756 769 * and Flash program erase control register access(recommended to protect
mbed_official 76:aeb1df146756 770 * the DATA_EEPROM against possible unwanted operation).
mbed_official 76:aeb1df146756 771 * @note The function DATA_EEPROM_FixedTimeProgramCmd() can be called before
mbed_official 76:aeb1df146756 772 * this function to configure the Fixed Time Programming.
mbed_official 76:aeb1df146756 773 * @param Address: specifies the address to be written.
mbed_official 76:aeb1df146756 774 * @param Data: specifies the data to be written.
mbed_official 76:aeb1df146756 775 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 776 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 777 */
mbed_official 76:aeb1df146756 778 FLASH_Status DATA_EEPROM_ProgramByte(uint32_t Address, uint8_t Data)
mbed_official 76:aeb1df146756 779 {
mbed_official 76:aeb1df146756 780 FLASH_Status status = FLASH_COMPLETE;
mbed_official 80:66393a7b209d 781 #if !defined (STM32L1XX_HD) && !defined (STM32L1XX_MDP) && !defined (STM32L1XX_XL)
mbed_official 76:aeb1df146756 782 uint32_t tmp = 0, tmpaddr = 0;
mbed_official 76:aeb1df146756 783 #endif
mbed_official 76:aeb1df146756 784
mbed_official 76:aeb1df146756 785 /* Check the parameters */
mbed_official 76:aeb1df146756 786 assert_param(IS_FLASH_DATA_ADDRESS(Address));
mbed_official 76:aeb1df146756 787
mbed_official 76:aeb1df146756 788 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 789 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 790
mbed_official 76:aeb1df146756 791 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 792 {
mbed_official 80:66393a7b209d 793 #if !defined (STM32L1XX_HD) && !defined (STM32L1XX_MDP) && !defined (STM32L1XX_XL)
mbed_official 76:aeb1df146756 794 if(Data != (uint8_t) 0x00)
mbed_official 76:aeb1df146756 795 {
mbed_official 76:aeb1df146756 796 *(__IO uint8_t *)Address = Data;
mbed_official 76:aeb1df146756 797
mbed_official 76:aeb1df146756 798 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 799 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 800
mbed_official 76:aeb1df146756 801 }
mbed_official 76:aeb1df146756 802 else
mbed_official 76:aeb1df146756 803 {
mbed_official 76:aeb1df146756 804 tmpaddr = Address & 0xFFFFFFFC;
mbed_official 76:aeb1df146756 805 tmp = * (__IO uint32_t *) tmpaddr;
mbed_official 76:aeb1df146756 806 tmpaddr = 0xFF << ((uint32_t) (0x8 * (Address & 0x3)));
mbed_official 76:aeb1df146756 807 tmp &= ~tmpaddr;
mbed_official 76:aeb1df146756 808 status = DATA_EEPROM_EraseWord(Address & 0xFFFFFFFC);
mbed_official 76:aeb1df146756 809 status = DATA_EEPROM_FastProgramWord((Address & 0xFFFFFFFC), tmp);
mbed_official 76:aeb1df146756 810 }
mbed_official 80:66393a7b209d 811 #elif defined (STM32L1XX_HD) || defined (STM32L1XX_MDP) || defined (STM32L1XX_XL)
mbed_official 76:aeb1df146756 812 *(__IO uint8_t *)Address = Data;
mbed_official 76:aeb1df146756 813
mbed_official 76:aeb1df146756 814 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 815 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 816 #endif
mbed_official 76:aeb1df146756 817 }
mbed_official 76:aeb1df146756 818 /* Return the Write Status */
mbed_official 76:aeb1df146756 819 return status;
mbed_official 76:aeb1df146756 820 }
mbed_official 76:aeb1df146756 821
mbed_official 76:aeb1df146756 822 /**
mbed_official 76:aeb1df146756 823 * @brief Writes a half word at a specified address in data memory without erase.
mbed_official 76:aeb1df146756 824 * @note To correctly run this function, the DATA_EEPROM_Unlock() function
mbed_official 76:aeb1df146756 825 * must be called before.
mbed_official 80:66393a7b209d 826 * Call the DATA_EEPROM_Lock() to disable the data EEPROM access
mbed_official 76:aeb1df146756 827 * and Flash program erase control register access(recommended to protect
mbed_official 76:aeb1df146756 828 * the DATA_EEPROM against possible unwanted operation).
mbed_official 76:aeb1df146756 829 * @note The function DATA_EEPROM_FixedTimeProgramCmd() can be called before
mbed_official 76:aeb1df146756 830 * this function to configure the Fixed Time Programming
mbed_official 76:aeb1df146756 831 * @param Address: specifies the address to be written.
mbed_official 76:aeb1df146756 832 * @param Data: specifies the data to be written.
mbed_official 76:aeb1df146756 833 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 834 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 835 */
mbed_official 76:aeb1df146756 836 FLASH_Status DATA_EEPROM_ProgramHalfWord(uint32_t Address, uint16_t Data)
mbed_official 76:aeb1df146756 837 {
mbed_official 76:aeb1df146756 838 FLASH_Status status = FLASH_COMPLETE;
mbed_official 80:66393a7b209d 839 #if !defined (STM32L1XX_HD) && !defined (STM32L1XX_MDP) && !defined (STM32L1XX_XL)
mbed_official 76:aeb1df146756 840 uint32_t tmp = 0, tmpaddr = 0;
mbed_official 76:aeb1df146756 841 #endif
mbed_official 76:aeb1df146756 842
mbed_official 76:aeb1df146756 843 /* Check the parameters */
mbed_official 76:aeb1df146756 844 assert_param(IS_FLASH_DATA_ADDRESS(Address));
mbed_official 76:aeb1df146756 845
mbed_official 76:aeb1df146756 846 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 847 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 848
mbed_official 76:aeb1df146756 849 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 850 {
mbed_official 80:66393a7b209d 851 #if !defined (STM32L1XX_HD) && !defined (STM32L1XX_MDP) && !defined (STM32L1XX_XL)
mbed_official 76:aeb1df146756 852 if(Data != (uint16_t)0x0000)
mbed_official 76:aeb1df146756 853 {
mbed_official 76:aeb1df146756 854 *(__IO uint16_t *)Address = Data;
mbed_official 76:aeb1df146756 855
mbed_official 76:aeb1df146756 856 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 857 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 858 }
mbed_official 76:aeb1df146756 859 else
mbed_official 76:aeb1df146756 860 {
mbed_official 76:aeb1df146756 861 if((Address & 0x3) != 0x3)
mbed_official 76:aeb1df146756 862 {
mbed_official 76:aeb1df146756 863 tmpaddr = Address & 0xFFFFFFFC;
mbed_official 76:aeb1df146756 864 tmp = * (__IO uint32_t *) tmpaddr;
mbed_official 76:aeb1df146756 865 tmpaddr = 0xFFFF << ((uint32_t) (0x8 * (Address & 0x3)));
mbed_official 76:aeb1df146756 866 tmp &= ~tmpaddr;
mbed_official 76:aeb1df146756 867 status = DATA_EEPROM_EraseWord(Address & 0xFFFFFFFC);
mbed_official 76:aeb1df146756 868 status = DATA_EEPROM_FastProgramWord((Address & 0xFFFFFFFC), tmp);
mbed_official 76:aeb1df146756 869 }
mbed_official 76:aeb1df146756 870 else
mbed_official 76:aeb1df146756 871 {
mbed_official 76:aeb1df146756 872 DATA_EEPROM_FastProgramByte(Address, 0x00);
mbed_official 76:aeb1df146756 873 DATA_EEPROM_FastProgramByte(Address + 1, 0x00);
mbed_official 76:aeb1df146756 874 }
mbed_official 76:aeb1df146756 875 }
mbed_official 80:66393a7b209d 876 #elif defined (STM32L1XX_HD) || defined (STM32L1XX_MDP) || defined (STM32L1XX_XL)
mbed_official 76:aeb1df146756 877 *(__IO uint16_t *)Address = Data;
mbed_official 76:aeb1df146756 878
mbed_official 76:aeb1df146756 879 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 880 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 881 #endif
mbed_official 76:aeb1df146756 882 }
mbed_official 76:aeb1df146756 883 /* Return the Write Status */
mbed_official 76:aeb1df146756 884 return status;
mbed_official 76:aeb1df146756 885 }
mbed_official 76:aeb1df146756 886
mbed_official 76:aeb1df146756 887 /**
mbed_official 76:aeb1df146756 888 * @brief Programs a word at a specified address in data memory without erase.
mbed_official 76:aeb1df146756 889 * @note To correctly run this function, the DATA_EEPROM_Unlock() function
mbed_official 76:aeb1df146756 890 * must be called before.
mbed_official 80:66393a7b209d 891 * Call the DATA_EEPROM_Lock() to disable the data EEPROM access
mbed_official 76:aeb1df146756 892 * and Flash program erase control register access(recommended to protect
mbed_official 76:aeb1df146756 893 * the DATA_EEPROM against possible unwanted operation).
mbed_official 76:aeb1df146756 894 * @note The function DATA_EEPROM_FixedTimeProgramCmd() can be called before
mbed_official 76:aeb1df146756 895 * this function to configure the Fixed Time Programming.
mbed_official 76:aeb1df146756 896 * @param Address: specifies the address to be written.
mbed_official 76:aeb1df146756 897 * @param Data: specifies the data to be written.
mbed_official 76:aeb1df146756 898 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 899 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 900 */
mbed_official 76:aeb1df146756 901 FLASH_Status DATA_EEPROM_ProgramWord(uint32_t Address, uint32_t Data)
mbed_official 76:aeb1df146756 902 {
mbed_official 76:aeb1df146756 903 FLASH_Status status = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 904
mbed_official 76:aeb1df146756 905 /* Check the parameters */
mbed_official 76:aeb1df146756 906 assert_param(IS_FLASH_DATA_ADDRESS(Address));
mbed_official 76:aeb1df146756 907
mbed_official 76:aeb1df146756 908 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 909 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 910
mbed_official 76:aeb1df146756 911 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 912 {
mbed_official 76:aeb1df146756 913 *(__IO uint32_t *)Address = Data;
mbed_official 76:aeb1df146756 914
mbed_official 76:aeb1df146756 915 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 916 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 917 }
mbed_official 76:aeb1df146756 918 /* Return the Write Status */
mbed_official 76:aeb1df146756 919 return status;
mbed_official 76:aeb1df146756 920 }
mbed_official 76:aeb1df146756 921
mbed_official 76:aeb1df146756 922 /**
mbed_official 76:aeb1df146756 923 * @}
mbed_official 76:aeb1df146756 924 */
mbed_official 76:aeb1df146756 925
mbed_official 76:aeb1df146756 926 /** @defgroup FLASH_Group4 Option Bytes Programming functions
mbed_official 76:aeb1df146756 927 * @brief Option Bytes Programming functions
mbed_official 76:aeb1df146756 928 *
mbed_official 76:aeb1df146756 929 @verbatim
mbed_official 76:aeb1df146756 930 ==============================================================================
mbed_official 76:aeb1df146756 931 ##### Option Bytes Programming functions #####
mbed_official 76:aeb1df146756 932 ==============================================================================
mbed_official 76:aeb1df146756 933
mbed_official 76:aeb1df146756 934 [..] The FLASH_Option Bytes Programming_functions, includes the following functions:
mbed_official 76:aeb1df146756 935 (+) void FLASH_OB_Unlock(void);
mbed_official 76:aeb1df146756 936 (+) void FLASH_OB_Lock(void);
mbed_official 76:aeb1df146756 937 (+) void FLASH_OB_Launch(void);
mbed_official 76:aeb1df146756 938 (+) FLASH_Status FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState);
mbed_official 76:aeb1df146756 939 (+) FLASH_Status FLASH_OB_WRP1Config(uint32_t OB_WRP1, FunctionalState NewState);
mbed_official 76:aeb1df146756 940 (+) FLASH_Status FLASH_OB_WRP2Config(uint32_t OB_WRP2, FunctionalState NewState);
mbed_official 76:aeb1df146756 941 (+) FLASH_Status FLASH_OB_RDPConfig(uint8_t OB_RDP);
mbed_official 76:aeb1df146756 942 (+) FLASH_Status FLASH_OB_PCROPConfig(uint32_t OB_WRP, FunctionalState NewState);
mbed_official 76:aeb1df146756 943 (+) FLASH_Status FLASH_OB_PCROP1Config(uint32_t OB_WRP1, FunctionalState NewState);
mbed_official 76:aeb1df146756 944 (+) FLASH_Status FLASH_OB_PCROPSelectionConfig(uint16_t OB_PcROP);
mbed_official 76:aeb1df146756 945 (+) FLASH_Status FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY);
mbed_official 76:aeb1df146756 946 (+) FLASH_Status FLASH_OB_BORConfig(uint8_t OB_BOR);
mbed_official 76:aeb1df146756 947 (+) uint8_t FLASH_OB_GetUser(void);
mbed_official 76:aeb1df146756 948 (+) uint32_t FLASH_OB_GetWRP(void);
mbed_official 76:aeb1df146756 949 (+) uint32_t FLASH_OB_GetWRP1(void);
mbed_official 76:aeb1df146756 950 (+) uint32_t FLASH_OB_GetWRP2(void);
mbed_official 76:aeb1df146756 951 (+) FlagStatus FLASH_OB_GetRDP(void);
mbed_official 76:aeb1df146756 952 (+) FlagStatus FLASH_OB_GetSPRMOD(void);
mbed_official 76:aeb1df146756 953 (+) uint8_t FLASH_OB_GetBOR(void);
mbed_official 76:aeb1df146756 954 (+) FLASH_Status FLASH_OB_BootConfig(uint16_t OB_BOOT);
mbed_official 76:aeb1df146756 955
mbed_official 76:aeb1df146756 956 [..] Any operation of erase or program should follow these steps:
mbed_official 76:aeb1df146756 957 (#) Call the FLASH_OB_Unlock() function to enable the Flash option control
mbed_official 76:aeb1df146756 958 register access.
mbed_official 76:aeb1df146756 959 (#) Call one or several functions to program the desired option bytes.
mbed_official 76:aeb1df146756 960 (++) void FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState) => to Enable/Disable
mbed_official 76:aeb1df146756 961 the desired sector write protection.
mbed_official 76:aeb1df146756 962 (++) void FLASH_OB_RDPConfig(uint8_t OB_RDP) => to set the desired read Protection Level.
mbed_official 76:aeb1df146756 963 (++) void FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY) => to configure
mbed_official 76:aeb1df146756 964 the user option Bytes: IWDG, STOP and the Standby.
mbed_official 76:aeb1df146756 965 (++) void FLASH_OB_BORConfig(uint8_t OB_BOR) => to Set the BOR level.
mbed_official 76:aeb1df146756 966 (#) Once all needed option bytes to be programmed are correctly written, call the
mbed_official 76:aeb1df146756 967 FLASH_OB_Launch(void) function to launch the Option Bytes programming process.
mbed_official 76:aeb1df146756 968 (#) Call the FLASH_OB_Lock() to disable the Flash option control register access (recommended
mbed_official 76:aeb1df146756 969 to protect the option Bytes against possible unwanted operations).
mbed_official 76:aeb1df146756 970
mbed_official 76:aeb1df146756 971 [..] Proprietary code Read Out Protection (PcROP):
mbed_official 76:aeb1df146756 972 (#) The PcROP sector is selected by using the same option bytes as the Write
mbed_official 76:aeb1df146756 973 protection (nWRPi bits). As a result, these 2 options are exclusive each other.
mbed_official 76:aeb1df146756 974 (#) In order to activate the PcROP (change the function of the nWRPi option bits),
mbed_official 76:aeb1df146756 975 the SPRMOD option bit must be activated.
mbed_official 76:aeb1df146756 976 (#) The active value of nWRPi bits is inverted when PCROP mode is active, this
mbed_official 76:aeb1df146756 977 means: if SPRMOD = 1 and nWRPi = 1 (default value), then the user sector "i"
mbed_official 76:aeb1df146756 978 is read/write protected.
mbed_official 76:aeb1df146756 979 (#) To activate PCROP mode for Flash sector(s), you need to follow the sequence below:
mbed_official 76:aeb1df146756 980 (++) For sector(s) within the first 128KB of the Flash, use this function
mbed_official 76:aeb1df146756 981 FLASH_OB_PCROPConfig(OB_WRP_Pagesxxx, ENABLE)
mbed_official 76:aeb1df146756 982 (++) For sector(s) within the second 128KB of the Flash, use this function
mbed_official 76:aeb1df146756 983 FLASH_OB_PCROP1Config(OB_WRP_Pagesxxx, ENABLE)
mbed_official 76:aeb1df146756 984 (++) Activate the PCROP mode using FLASH_OB_PCROPSelectionConfig(OB_PcROP_Enable) function
mbed_official 76:aeb1df146756 985 (#) PcROP is available only in STM32L1XX_MDP devices
mbed_official 76:aeb1df146756 986
mbed_official 76:aeb1df146756 987 @endverbatim
mbed_official 76:aeb1df146756 988 * @{
mbed_official 76:aeb1df146756 989 */
mbed_official 76:aeb1df146756 990
mbed_official 76:aeb1df146756 991 /**
mbed_official 76:aeb1df146756 992 * @brief Unlocks the option bytes block access.
mbed_official 76:aeb1df146756 993 * @param None
mbed_official 76:aeb1df146756 994 * @retval None
mbed_official 76:aeb1df146756 995 */
mbed_official 76:aeb1df146756 996 void FLASH_OB_Unlock(void)
mbed_official 76:aeb1df146756 997 {
mbed_official 76:aeb1df146756 998 if((FLASH->PECR & FLASH_PECR_OPTLOCK) != RESET)
mbed_official 76:aeb1df146756 999 {
mbed_official 76:aeb1df146756 1000 /* Unlocking the data memory and FLASH_PECR register access */
mbed_official 76:aeb1df146756 1001 DATA_EEPROM_Unlock();
mbed_official 76:aeb1df146756 1002
mbed_official 76:aeb1df146756 1003 /* Unlocking the option bytes block access */
mbed_official 76:aeb1df146756 1004 FLASH->OPTKEYR = FLASH_OPTKEY1;
mbed_official 76:aeb1df146756 1005 FLASH->OPTKEYR = FLASH_OPTKEY2;
mbed_official 76:aeb1df146756 1006 }
mbed_official 76:aeb1df146756 1007 }
mbed_official 76:aeb1df146756 1008
mbed_official 76:aeb1df146756 1009 /**
mbed_official 76:aeb1df146756 1010 * @brief Locks the option bytes block access.
mbed_official 76:aeb1df146756 1011 * @param None
mbed_official 76:aeb1df146756 1012 * @retval None
mbed_official 76:aeb1df146756 1013 */
mbed_official 76:aeb1df146756 1014 void FLASH_OB_Lock(void)
mbed_official 76:aeb1df146756 1015 {
mbed_official 76:aeb1df146756 1016 /* Set the OPTLOCK Bit to lock the option bytes block access */
mbed_official 76:aeb1df146756 1017 FLASH->PECR |= FLASH_PECR_OPTLOCK;
mbed_official 76:aeb1df146756 1018 }
mbed_official 76:aeb1df146756 1019
mbed_official 76:aeb1df146756 1020 /**
mbed_official 76:aeb1df146756 1021 * @brief Launch the option byte loading.
mbed_official 76:aeb1df146756 1022 * @param None
mbed_official 76:aeb1df146756 1023 * @retval None
mbed_official 76:aeb1df146756 1024 */
mbed_official 76:aeb1df146756 1025 void FLASH_OB_Launch(void)
mbed_official 76:aeb1df146756 1026 {
mbed_official 76:aeb1df146756 1027 /* Set the OBL_Launch bit to lauch the option byte loading */
mbed_official 76:aeb1df146756 1028 FLASH->PECR |= FLASH_PECR_OBL_LAUNCH;
mbed_official 76:aeb1df146756 1029 }
mbed_official 76:aeb1df146756 1030
mbed_official 76:aeb1df146756 1031 /**
mbed_official 76:aeb1df146756 1032 * @brief Write protects the desired pages of the first 128KB of the Flash.
mbed_official 76:aeb1df146756 1033 * @param OB_WRP: specifies the address of the pages to be write protected.
mbed_official 76:aeb1df146756 1034 * This parameter can be:
mbed_official 76:aeb1df146756 1035 * @arg value between OB_WRP_Pages0to15 and OB_WRP_Pages496to511
mbed_official 76:aeb1df146756 1036 * @arg OB_WRP_AllPages
mbed_official 76:aeb1df146756 1037 * @param NewState: new state of the specified FLASH Pages Wtite protection.
mbed_official 76:aeb1df146756 1038 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 1039 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 1040 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 1041 */
mbed_official 76:aeb1df146756 1042 FLASH_Status FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState)
mbed_official 76:aeb1df146756 1043 {
mbed_official 76:aeb1df146756 1044 uint32_t WRP01_Data = 0, WRP23_Data = 0;
mbed_official 76:aeb1df146756 1045
mbed_official 76:aeb1df146756 1046 FLASH_Status status = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 1047 uint32_t tmp1 = 0, tmp2 = 0;
mbed_official 76:aeb1df146756 1048
mbed_official 76:aeb1df146756 1049 /* Check the parameters */
mbed_official 76:aeb1df146756 1050 assert_param(IS_OB_WRP(OB_WRP));
mbed_official 76:aeb1df146756 1051 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 1052
mbed_official 76:aeb1df146756 1053 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 1054 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1055
mbed_official 76:aeb1df146756 1056 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 1057 {
mbed_official 76:aeb1df146756 1058 if (NewState != DISABLE)
mbed_official 76:aeb1df146756 1059 {
mbed_official 76:aeb1df146756 1060 WRP01_Data = (uint16_t)(((OB_WRP & WRP01_MASK) | OB->WRP01));
mbed_official 76:aeb1df146756 1061 WRP23_Data = (uint16_t)((((OB_WRP & WRP23_MASK)>>16 | OB->WRP23)));
mbed_official 76:aeb1df146756 1062 tmp1 = (uint32_t)(~(WRP01_Data) << 16)|(WRP01_Data);
mbed_official 76:aeb1df146756 1063 OB->WRP01 = tmp1;
mbed_official 76:aeb1df146756 1064
mbed_official 76:aeb1df146756 1065 tmp2 = (uint32_t)(~(WRP23_Data) << 16)|(WRP23_Data);
mbed_official 76:aeb1df146756 1066 OB->WRP23 = tmp2;
mbed_official 76:aeb1df146756 1067 }
mbed_official 76:aeb1df146756 1068
mbed_official 76:aeb1df146756 1069 else
mbed_official 76:aeb1df146756 1070 {
mbed_official 76:aeb1df146756 1071 WRP01_Data = (uint16_t)(~OB_WRP & (WRP01_MASK & OB->WRP01));
mbed_official 76:aeb1df146756 1072 WRP23_Data = (uint16_t)((((~OB_WRP & WRP23_MASK)>>16 & OB->WRP23)));
mbed_official 76:aeb1df146756 1073
mbed_official 76:aeb1df146756 1074 tmp1 = (uint32_t)((~WRP01_Data) << 16)|(WRP01_Data);
mbed_official 76:aeb1df146756 1075 OB->WRP01 = tmp1;
mbed_official 76:aeb1df146756 1076
mbed_official 76:aeb1df146756 1077 tmp2 = (uint32_t)((~WRP23_Data) << 16)|(WRP23_Data);
mbed_official 76:aeb1df146756 1078 OB->WRP23 = tmp2;
mbed_official 76:aeb1df146756 1079 }
mbed_official 76:aeb1df146756 1080 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 1081 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1082 }
mbed_official 76:aeb1df146756 1083
mbed_official 76:aeb1df146756 1084 /* Return the write protection operation Status */
mbed_official 76:aeb1df146756 1085 return status;
mbed_official 76:aeb1df146756 1086 }
mbed_official 76:aeb1df146756 1087
mbed_official 76:aeb1df146756 1088 /**
mbed_official 76:aeb1df146756 1089 * @brief Write protects the desired pages of the second 128KB of the Flash.
mbed_official 80:66393a7b209d 1090 * @note This function can be used only for STM32L1XX_HD, STM32L1XX_MDP and
mbed_official 80:66393a7b209d 1091 * STM32L1XX_XL devices.
mbed_official 76:aeb1df146756 1092 * @param OB_WRP1: specifies the address of the pages to be write protected.
mbed_official 76:aeb1df146756 1093 * This parameter can be:
mbed_official 76:aeb1df146756 1094 * @arg value between OB_WRP_Pages512to527 and OB_WRP_Pages1008to1023
mbed_official 76:aeb1df146756 1095 * @arg OB_WRP_AllPages
mbed_official 76:aeb1df146756 1096 * @param NewState: new state of the specified FLASH Pages Wtite protection.
mbed_official 76:aeb1df146756 1097 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 1098 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 1099 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 1100 */
mbed_official 76:aeb1df146756 1101 FLASH_Status FLASH_OB_WRP1Config(uint32_t OB_WRP1, FunctionalState NewState)
mbed_official 76:aeb1df146756 1102 {
mbed_official 76:aeb1df146756 1103 uint32_t WRP45_Data = 0, WRP67_Data = 0;
mbed_official 76:aeb1df146756 1104
mbed_official 76:aeb1df146756 1105 FLASH_Status status = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 1106 uint32_t tmp1 = 0, tmp2 = 0;
mbed_official 76:aeb1df146756 1107
mbed_official 76:aeb1df146756 1108 /* Check the parameters */
mbed_official 76:aeb1df146756 1109 assert_param(IS_OB_WRP(OB_WRP1));
mbed_official 76:aeb1df146756 1110 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 1111
mbed_official 76:aeb1df146756 1112 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 1113 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1114
mbed_official 76:aeb1df146756 1115 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 1116 {
mbed_official 76:aeb1df146756 1117 if (NewState != DISABLE)
mbed_official 76:aeb1df146756 1118 {
mbed_official 76:aeb1df146756 1119 WRP45_Data = (uint16_t)(((OB_WRP1 & WRP45_MASK) | OB->WRP45));
mbed_official 76:aeb1df146756 1120 WRP67_Data = (uint16_t)((((OB_WRP1 & WRP67_MASK)>>16 | OB->WRP67)));
mbed_official 76:aeb1df146756 1121 tmp1 = (uint32_t)(~(WRP45_Data) << 16)|(WRP45_Data);
mbed_official 76:aeb1df146756 1122 OB->WRP45 = tmp1;
mbed_official 76:aeb1df146756 1123
mbed_official 76:aeb1df146756 1124 tmp2 = (uint32_t)(~(WRP67_Data) << 16)|(WRP67_Data);
mbed_official 76:aeb1df146756 1125 OB->WRP67 = tmp2;
mbed_official 76:aeb1df146756 1126 }
mbed_official 76:aeb1df146756 1127
mbed_official 76:aeb1df146756 1128 else
mbed_official 76:aeb1df146756 1129 {
mbed_official 76:aeb1df146756 1130 WRP45_Data = (uint16_t)(~OB_WRP1 & (WRP45_MASK & OB->WRP45));
mbed_official 76:aeb1df146756 1131 WRP67_Data = (uint16_t)((((~OB_WRP1 & WRP67_MASK)>>16 & OB->WRP67)));
mbed_official 76:aeb1df146756 1132
mbed_official 76:aeb1df146756 1133 tmp1 = (uint32_t)((~WRP45_Data) << 16)|(WRP45_Data);
mbed_official 76:aeb1df146756 1134 OB->WRP45 = tmp1;
mbed_official 76:aeb1df146756 1135
mbed_official 76:aeb1df146756 1136 tmp2 = (uint32_t)((~WRP67_Data) << 16)|(WRP67_Data);
mbed_official 76:aeb1df146756 1137 OB->WRP67 = tmp2;
mbed_official 76:aeb1df146756 1138 }
mbed_official 76:aeb1df146756 1139 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 1140 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1141 }
mbed_official 76:aeb1df146756 1142
mbed_official 76:aeb1df146756 1143 /* Return the write protection operation Status */
mbed_official 76:aeb1df146756 1144 return status;
mbed_official 76:aeb1df146756 1145 }
mbed_official 76:aeb1df146756 1146
mbed_official 76:aeb1df146756 1147 /**
mbed_official 76:aeb1df146756 1148 * @brief Write protects the desired pages of the third 128KB of the Flash.
mbed_official 80:66393a7b209d 1149 * @note This function can be used only for STM32L1XX_HD and STM32L1XX_XL devices.
mbed_official 76:aeb1df146756 1150 * @param OB_WRP2: specifies the address of the pages to be write protected.
mbed_official 76:aeb1df146756 1151 * This parameter can be:
mbed_official 76:aeb1df146756 1152 * @arg value between OB_WRP_Pages1024to1039 and OB_WRP_Pages1520to1535
mbed_official 76:aeb1df146756 1153 * @arg OB_WRP_AllPages
mbed_official 76:aeb1df146756 1154 * @param NewState: new state of the specified FLASH Pages Wtite protection.
mbed_official 76:aeb1df146756 1155 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 1156 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 1157 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 1158 */
mbed_official 76:aeb1df146756 1159 FLASH_Status FLASH_OB_WRP2Config(uint32_t OB_WRP2, FunctionalState NewState)
mbed_official 76:aeb1df146756 1160 {
mbed_official 76:aeb1df146756 1161 uint32_t WRP89_Data = 0, WRP1011_Data = 0;
mbed_official 76:aeb1df146756 1162
mbed_official 76:aeb1df146756 1163 FLASH_Status status = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 1164 uint32_t tmp1 = 0, tmp2 = 0;
mbed_official 76:aeb1df146756 1165
mbed_official 76:aeb1df146756 1166 /* Check the parameters */
mbed_official 76:aeb1df146756 1167 assert_param(IS_OB_WRP(OB_WRP2));
mbed_official 76:aeb1df146756 1168 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 1169
mbed_official 76:aeb1df146756 1170 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 1171 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1172
mbed_official 76:aeb1df146756 1173 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 1174 {
mbed_official 76:aeb1df146756 1175 if (NewState != DISABLE)
mbed_official 76:aeb1df146756 1176 {
mbed_official 76:aeb1df146756 1177 WRP89_Data = (uint16_t)(((OB_WRP2 & WRP89_MASK) | OB->WRP89));
mbed_official 76:aeb1df146756 1178 WRP1011_Data = (uint16_t)((((OB_WRP2 & WRP1011_MASK)>>16 | OB->WRP1011)));
mbed_official 76:aeb1df146756 1179 tmp1 = (uint32_t)(~(WRP89_Data) << 16)|(WRP89_Data);
mbed_official 76:aeb1df146756 1180 OB->WRP89 = tmp1;
mbed_official 76:aeb1df146756 1181
mbed_official 76:aeb1df146756 1182 tmp2 = (uint32_t)(~(WRP1011_Data) << 16)|(WRP1011_Data);
mbed_official 76:aeb1df146756 1183 OB->WRP1011 = tmp2;
mbed_official 76:aeb1df146756 1184 }
mbed_official 76:aeb1df146756 1185
mbed_official 76:aeb1df146756 1186 else
mbed_official 76:aeb1df146756 1187 {
mbed_official 76:aeb1df146756 1188 WRP89_Data = (uint16_t)(~OB_WRP2 & (WRP89_MASK & OB->WRP89));
mbed_official 76:aeb1df146756 1189 WRP1011_Data = (uint16_t)((((~OB_WRP2 & WRP1011_MASK)>>16 & OB->WRP1011)));
mbed_official 76:aeb1df146756 1190
mbed_official 76:aeb1df146756 1191 tmp1 = (uint32_t)((~WRP89_Data) << 16)|(WRP89_Data);
mbed_official 76:aeb1df146756 1192 OB->WRP89 = tmp1;
mbed_official 76:aeb1df146756 1193
mbed_official 76:aeb1df146756 1194 tmp2 = (uint32_t)((~WRP1011_Data) << 16)|(WRP1011_Data);
mbed_official 76:aeb1df146756 1195 OB->WRP1011 = tmp2;
mbed_official 76:aeb1df146756 1196 }
mbed_official 76:aeb1df146756 1197 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 1198 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1199 }
mbed_official 76:aeb1df146756 1200
mbed_official 76:aeb1df146756 1201 /* Return the write protection operation Status */
mbed_official 76:aeb1df146756 1202 return status;
mbed_official 76:aeb1df146756 1203 }
mbed_official 76:aeb1df146756 1204
mbed_official 76:aeb1df146756 1205 /**
mbed_official 76:aeb1df146756 1206 * @brief Enables or disables the read out protection.
mbed_official 76:aeb1df146756 1207 * @note To correctly run this function, the FLASH_OB_Unlock() function
mbed_official 76:aeb1df146756 1208 * must be called before.
mbed_official 76:aeb1df146756 1209 * @param FLASH_ReadProtection_Level: specifies the read protection level.
mbed_official 76:aeb1df146756 1210 * This parameter can be:
mbed_official 76:aeb1df146756 1211 * @arg OB_RDP_Level_0: No protection
mbed_official 76:aeb1df146756 1212 * @arg OB_RDP_Level_1: Read protection of the memory
mbed_official 76:aeb1df146756 1213 * @arg OB_RDP_Level_2: Chip protection
mbed_official 76:aeb1df146756 1214 *
mbed_official 76:aeb1df146756 1215 * !!!Warning!!! When enabling OB_RDP_Level_2 it's no more possible to go back to level 1 or 0
mbed_official 76:aeb1df146756 1216 *
mbed_official 76:aeb1df146756 1217 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 1218 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 1219 */
mbed_official 76:aeb1df146756 1220 FLASH_Status FLASH_OB_RDPConfig(uint8_t OB_RDP)
mbed_official 76:aeb1df146756 1221 {
mbed_official 76:aeb1df146756 1222 FLASH_Status status = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 1223 uint8_t tmp1 = 0;
mbed_official 76:aeb1df146756 1224 uint32_t tmp2 = 0;
mbed_official 76:aeb1df146756 1225
mbed_official 76:aeb1df146756 1226 /* Check the parameters */
mbed_official 76:aeb1df146756 1227 assert_param(IS_OB_RDP(OB_RDP));
mbed_official 76:aeb1df146756 1228 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1229
mbed_official 76:aeb1df146756 1230 /* calculate the option byte to write */
mbed_official 76:aeb1df146756 1231 tmp1 = (uint8_t)(~(OB_RDP ));
mbed_official 76:aeb1df146756 1232 tmp2 = (uint32_t)(((uint32_t)((uint32_t)(tmp1) << 16)) | ((uint32_t)OB_RDP));
mbed_official 76:aeb1df146756 1233
mbed_official 76:aeb1df146756 1234 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 1235 {
mbed_official 76:aeb1df146756 1236 /* program read protection level */
mbed_official 76:aeb1df146756 1237 OB->RDP = tmp2;
mbed_official 76:aeb1df146756 1238 }
mbed_official 76:aeb1df146756 1239
mbed_official 76:aeb1df146756 1240 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 1241 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1242
mbed_official 76:aeb1df146756 1243 /* Return the Read protection operation Status */
mbed_official 76:aeb1df146756 1244 return status;
mbed_official 76:aeb1df146756 1245 }
mbed_official 76:aeb1df146756 1246
mbed_official 76:aeb1df146756 1247 /**
mbed_official 76:aeb1df146756 1248 * @brief Enables or disables the read/write protection (PCROP) of the desired
mbed_official 76:aeb1df146756 1249 * sectors, for the first 128KB of the Flash.
mbed_official 76:aeb1df146756 1250 * @note This function can be used only for STM32L1XX_MDP devices
mbed_official 76:aeb1df146756 1251 * @param OB_WRP: specifies the address of the pages to be write protected.
mbed_official 76:aeb1df146756 1252 * This parameter can be:
mbed_official 76:aeb1df146756 1253 * @arg value between OB_WRP_Pages0to15 and OB_WRP_Pages496to511
mbed_official 76:aeb1df146756 1254 * @arg OB_WRP_AllPages
mbed_official 76:aeb1df146756 1255 * @param NewState: new state of the specified FLASH Pages Write protection.
mbed_official 76:aeb1df146756 1256 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 1257 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 1258 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 1259 */
mbed_official 76:aeb1df146756 1260 FLASH_Status FLASH_OB_PCROPConfig(uint32_t OB_WRP, FunctionalState NewState)
mbed_official 76:aeb1df146756 1261 {
mbed_official 76:aeb1df146756 1262 uint32_t WRP01_Data = 0, WRP23_Data = 0;
mbed_official 76:aeb1df146756 1263
mbed_official 76:aeb1df146756 1264 FLASH_Status status = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 1265 uint32_t tmp1 = 0, tmp2 = 0;
mbed_official 76:aeb1df146756 1266
mbed_official 76:aeb1df146756 1267 /* Check the parameters */
mbed_official 76:aeb1df146756 1268 assert_param(IS_OB_WRP(OB_WRP));
mbed_official 76:aeb1df146756 1269 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 1270
mbed_official 76:aeb1df146756 1271 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 1272 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1273
mbed_official 76:aeb1df146756 1274 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 1275 {
mbed_official 76:aeb1df146756 1276 if (NewState != DISABLE)
mbed_official 76:aeb1df146756 1277 {
mbed_official 76:aeb1df146756 1278 WRP01_Data = (uint16_t)(~OB_WRP & (WRP01_MASK & OB->WRP01));
mbed_official 76:aeb1df146756 1279 WRP23_Data = (uint16_t)((((~OB_WRP & WRP23_MASK)>>16 & OB->WRP23)));
mbed_official 76:aeb1df146756 1280
mbed_official 76:aeb1df146756 1281 tmp1 = (uint32_t)((~WRP01_Data) << 16)|(WRP01_Data);
mbed_official 76:aeb1df146756 1282 OB->WRP01 = tmp1;
mbed_official 76:aeb1df146756 1283
mbed_official 76:aeb1df146756 1284 tmp2 = (uint32_t)((~WRP23_Data) << 16)|(WRP23_Data);
mbed_official 76:aeb1df146756 1285 OB->WRP23 = tmp2;
mbed_official 76:aeb1df146756 1286
mbed_official 76:aeb1df146756 1287 }
mbed_official 76:aeb1df146756 1288
mbed_official 76:aeb1df146756 1289 else
mbed_official 76:aeb1df146756 1290 {
mbed_official 76:aeb1df146756 1291 WRP01_Data = (uint16_t)((OB_WRP & WRP01_MASK) | OB->WRP01);
mbed_official 76:aeb1df146756 1292 WRP23_Data = (uint16_t)(((OB_WRP & WRP23_MASK) >> 16) | OB->WRP23);
mbed_official 76:aeb1df146756 1293
mbed_official 76:aeb1df146756 1294 tmp1 = (uint32_t)(~(WRP01_Data) << 16)|(WRP01_Data);
mbed_official 76:aeb1df146756 1295 OB->WRP01 = tmp1;
mbed_official 76:aeb1df146756 1296
mbed_official 76:aeb1df146756 1297 tmp2 = (uint32_t)(~(WRP23_Data) << 16)|(WRP23_Data);
mbed_official 76:aeb1df146756 1298 OB->WRP23 = tmp2;
mbed_official 76:aeb1df146756 1299
mbed_official 76:aeb1df146756 1300 }
mbed_official 76:aeb1df146756 1301 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 1302 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1303 }
mbed_official 76:aeb1df146756 1304
mbed_official 76:aeb1df146756 1305 /* Return the write protection operation Status */
mbed_official 76:aeb1df146756 1306 return status;
mbed_official 76:aeb1df146756 1307 }
mbed_official 76:aeb1df146756 1308
mbed_official 76:aeb1df146756 1309 /**
mbed_official 76:aeb1df146756 1310 * @brief Enables or disables the read/write protection (PCROP) of the desired
mbed_official 76:aeb1df146756 1311 * sectors, for the second 128KB of the Flash.
mbed_official 76:aeb1df146756 1312 * @note This function can be used only for STM32L1XX_MDP devices
mbed_official 76:aeb1df146756 1313 * @param OB_WRP1: specifies the address of the pages to be write protected.
mbed_official 76:aeb1df146756 1314 * This parameter can be:
mbed_official 76:aeb1df146756 1315 * @arg value between OB_WRP_Pages512to527 and OB_WRP_Pages1008to1023
mbed_official 76:aeb1df146756 1316 * @arg OB_WRP_AllPages
mbed_official 76:aeb1df146756 1317 * @param NewState: new state of the specified FLASH Pages Write protection.
mbed_official 76:aeb1df146756 1318 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 1319 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 1320 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 1321 */
mbed_official 76:aeb1df146756 1322 FLASH_Status FLASH_OB_PCROP1Config(uint32_t OB_WRP1, FunctionalState NewState)
mbed_official 76:aeb1df146756 1323 {
mbed_official 76:aeb1df146756 1324 uint32_t WRP45_Data = 0, WRP67_Data = 0;
mbed_official 76:aeb1df146756 1325
mbed_official 76:aeb1df146756 1326 FLASH_Status status = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 1327 uint32_t tmp1 = 0, tmp2 = 0;
mbed_official 76:aeb1df146756 1328
mbed_official 76:aeb1df146756 1329 /* Check the parameters */
mbed_official 76:aeb1df146756 1330 assert_param(IS_OB_WRP(OB_WRP1));
mbed_official 76:aeb1df146756 1331 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 1332
mbed_official 76:aeb1df146756 1333 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 1334 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1335
mbed_official 76:aeb1df146756 1336 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 1337 {
mbed_official 76:aeb1df146756 1338 if (NewState != DISABLE)
mbed_official 76:aeb1df146756 1339 {
mbed_official 76:aeb1df146756 1340 WRP45_Data = (uint16_t)(~OB_WRP1 & (WRP45_MASK & OB->WRP45));
mbed_official 76:aeb1df146756 1341 WRP67_Data = (uint16_t)((((~OB_WRP1 & WRP67_MASK)>>16 & OB->WRP67)));
mbed_official 76:aeb1df146756 1342
mbed_official 76:aeb1df146756 1343 tmp1 = (uint32_t)((~WRP45_Data) << 16)|(WRP45_Data);
mbed_official 76:aeb1df146756 1344 OB->WRP45 = tmp1;
mbed_official 76:aeb1df146756 1345
mbed_official 76:aeb1df146756 1346 tmp2 = (uint32_t)((~WRP67_Data) << 16)|(WRP67_Data);
mbed_official 76:aeb1df146756 1347 OB->WRP67 = tmp2;
mbed_official 76:aeb1df146756 1348 }
mbed_official 76:aeb1df146756 1349 else
mbed_official 76:aeb1df146756 1350 {
mbed_official 76:aeb1df146756 1351 WRP45_Data = (uint16_t)((OB_WRP1 & WRP45_MASK) | OB->WRP45);
mbed_official 76:aeb1df146756 1352 WRP67_Data = (uint16_t)(((OB_WRP1 & WRP67_MASK)>>16) | OB->WRP67);
mbed_official 76:aeb1df146756 1353 tmp1 = (uint32_t)(~(WRP45_Data) << 16)|(WRP45_Data);
mbed_official 76:aeb1df146756 1354 OB->WRP45 = tmp1;
mbed_official 76:aeb1df146756 1355
mbed_official 76:aeb1df146756 1356 tmp2 = (uint32_t)(~(WRP67_Data) << 16)|(WRP67_Data);
mbed_official 76:aeb1df146756 1357 OB->WRP67 = tmp2;
mbed_official 76:aeb1df146756 1358 }
mbed_official 76:aeb1df146756 1359 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 1360 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1361 }
mbed_official 76:aeb1df146756 1362
mbed_official 76:aeb1df146756 1363 /* Return the write protection operation Status */
mbed_official 76:aeb1df146756 1364 return status;
mbed_official 76:aeb1df146756 1365 }
mbed_official 76:aeb1df146756 1366
mbed_official 76:aeb1df146756 1367 /**
mbed_official 76:aeb1df146756 1368 * @brief Select the Protection Mode (SPRMOD).
mbed_official 76:aeb1df146756 1369 * @note This function can be used only for STM32L1XX_MDP devices
mbed_official 76:aeb1df146756 1370 * @note Once SPRMOD bit is active, unprotection of a protected sector is not possible
mbed_official 76:aeb1df146756 1371 * @note Read a protected sector will set RDERR Flag and write a protected sector will set WRPERR Flag
mbed_official 76:aeb1df146756 1372 * @param OB_PcROP: Select the Protection Mode of nWPRi bits.
mbed_official 76:aeb1df146756 1373 * This parameter can be:
mbed_official 76:aeb1df146756 1374 * @arg OB_PcROP_Enable: nWRPi control the read&write protection (PcROP) of respective user sectors.
mbed_official 76:aeb1df146756 1375 * @arg OB_PcROP_Disable: nWRPi control the write protection of respective user sectors.
mbed_official 76:aeb1df146756 1376 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 1377 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 1378 */
mbed_official 76:aeb1df146756 1379 FLASH_Status FLASH_OB_PCROPSelectionConfig(uint16_t OB_PcROP)
mbed_official 76:aeb1df146756 1380 {
mbed_official 76:aeb1df146756 1381 FLASH_Status status = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 1382 uint16_t tmp1 = 0;
mbed_official 76:aeb1df146756 1383 uint32_t tmp2 = 0;
mbed_official 76:aeb1df146756 1384 uint8_t optiontmp = 0;
mbed_official 76:aeb1df146756 1385 uint16_t optiontmp2 = 0;
mbed_official 76:aeb1df146756 1386
mbed_official 76:aeb1df146756 1387 /* Check the parameters */
mbed_official 76:aeb1df146756 1388 assert_param(IS_OB_PCROP_SELECT(OB_PcROP));
mbed_official 76:aeb1df146756 1389 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1390
mbed_official 76:aeb1df146756 1391 /* Mask RDP Byte */
mbed_official 76:aeb1df146756 1392 optiontmp = (uint8_t)(*(__IO uint8_t *)(OB_BASE));
mbed_official 76:aeb1df146756 1393
mbed_official 76:aeb1df146756 1394 /* Update Option Byte */
mbed_official 76:aeb1df146756 1395 optiontmp2 = (uint16_t)(OB_PcROP | optiontmp);
mbed_official 76:aeb1df146756 1396
mbed_official 76:aeb1df146756 1397
mbed_official 76:aeb1df146756 1398 /* calculate the option byte to write */
mbed_official 76:aeb1df146756 1399 tmp1 = (uint16_t)(~(optiontmp2 ));
mbed_official 76:aeb1df146756 1400 tmp2 = (uint32_t)(((uint32_t)((uint32_t)(tmp1) << 16)) | ((uint32_t)optiontmp2));
mbed_official 76:aeb1df146756 1401
mbed_official 76:aeb1df146756 1402 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 1403 {
mbed_official 76:aeb1df146756 1404 /* program PCRop */
mbed_official 76:aeb1df146756 1405 OB->RDP = tmp2;
mbed_official 76:aeb1df146756 1406 }
mbed_official 76:aeb1df146756 1407
mbed_official 76:aeb1df146756 1408 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 1409 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1410
mbed_official 76:aeb1df146756 1411 /* Return the Read protection operation Status */
mbed_official 76:aeb1df146756 1412 return status;
mbed_official 76:aeb1df146756 1413 }
mbed_official 76:aeb1df146756 1414
mbed_official 76:aeb1df146756 1415 /**
mbed_official 76:aeb1df146756 1416 * @brief Programs the FLASH User Option Byte: IWDG_SW / RST_STOP / RST_STDBY.
mbed_official 76:aeb1df146756 1417 * @param OB_IWDG: Selects the WDG mode.
mbed_official 76:aeb1df146756 1418 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1419 * @arg OB_IWDG_SW: Software WDG selected
mbed_official 76:aeb1df146756 1420 * @arg OB_IWDG_HW: Hardware WDG selected
mbed_official 76:aeb1df146756 1421 * @param OB_STOP: Reset event when entering STOP mode.
mbed_official 76:aeb1df146756 1422 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1423 * @arg OB_STOP_NoRST: No reset generated when entering in STOP
mbed_official 76:aeb1df146756 1424 * @arg OB_STOP_RST: Reset generated when entering in STOP
mbed_official 76:aeb1df146756 1425 * @param OB_STDBY: Reset event when entering Standby mode.
mbed_official 76:aeb1df146756 1426 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1427 * @arg OB_STDBY_NoRST: No reset generated when entering in STANDBY
mbed_official 76:aeb1df146756 1428 * @arg OB_STDBY_RST: Reset generated when entering in STANDBY
mbed_official 76:aeb1df146756 1429 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 1430 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 1431 */
mbed_official 76:aeb1df146756 1432 FLASH_Status FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY)
mbed_official 76:aeb1df146756 1433 {
mbed_official 76:aeb1df146756 1434 FLASH_Status status = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 1435 uint32_t tmp = 0, tmp1 = 0;
mbed_official 76:aeb1df146756 1436
mbed_official 76:aeb1df146756 1437 /* Check the parameters */
mbed_official 76:aeb1df146756 1438 assert_param(IS_OB_IWDG_SOURCE(OB_IWDG));
mbed_official 76:aeb1df146756 1439 assert_param(IS_OB_STOP_SOURCE(OB_STOP));
mbed_official 76:aeb1df146756 1440 assert_param(IS_OB_STDBY_SOURCE(OB_STDBY));
mbed_official 76:aeb1df146756 1441
mbed_official 76:aeb1df146756 1442 /* Get the User Option byte register */
mbed_official 76:aeb1df146756 1443 tmp1 = (FLASH->OBR & 0x000F0000) >> 16;
mbed_official 76:aeb1df146756 1444
mbed_official 76:aeb1df146756 1445 /* Calculate the user option byte to write */
mbed_official 76:aeb1df146756 1446 tmp = (uint32_t)(((uint32_t)~((uint32_t)((uint32_t)(OB_IWDG) | (uint32_t)(OB_STOP) | (uint32_t)(OB_STDBY) | tmp1))) << ((uint32_t)0x10));
mbed_official 76:aeb1df146756 1447 tmp |= ((uint32_t)(OB_IWDG) | ((uint32_t)OB_STOP) | (uint32_t)(OB_STDBY) | tmp1);
mbed_official 76:aeb1df146756 1448
mbed_official 76:aeb1df146756 1449 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 1450 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1451
mbed_official 76:aeb1df146756 1452 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 1453 {
mbed_official 76:aeb1df146756 1454 /* Write the User Option Byte */
mbed_official 76:aeb1df146756 1455 OB->USER = tmp;
mbed_official 76:aeb1df146756 1456 }
mbed_official 76:aeb1df146756 1457
mbed_official 76:aeb1df146756 1458 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 1459 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1460
mbed_official 76:aeb1df146756 1461 /* Return the Option Byte program Status */
mbed_official 76:aeb1df146756 1462 return status;
mbed_official 76:aeb1df146756 1463 }
mbed_official 76:aeb1df146756 1464
mbed_official 76:aeb1df146756 1465 /**
mbed_official 76:aeb1df146756 1466 * @brief Programs the FLASH brownout reset threshold level Option Byte.
mbed_official 76:aeb1df146756 1467 * @param OB_BOR: Selects the brownout reset threshold level.
mbed_official 76:aeb1df146756 1468 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1469 * @arg OB_BOR_OFF: BOR is disabled at power down, the reset is asserted when the VDD
mbed_official 76:aeb1df146756 1470 * power supply reaches the PDR(Power Down Reset) threshold (1.5V)
mbed_official 76:aeb1df146756 1471 * @arg OB_BOR_LEVEL1: BOR Reset threshold levels for 1.7V - 1.8V VDD power supply
mbed_official 76:aeb1df146756 1472 * @arg OB_BOR_LEVEL2: BOR Reset threshold levels for 1.9V - 2.0V VDD power supply
mbed_official 76:aeb1df146756 1473 * @arg OB_BOR_LEVEL3: BOR Reset threshold levels for 2.3V - 2.4V VDD power supply
mbed_official 76:aeb1df146756 1474 * @arg OB_BOR_LEVEL4: BOR Reset threshold levels for 2.55V - 2.65V VDD power supply
mbed_official 76:aeb1df146756 1475 * @arg OB_BOR_LEVEL5: BOR Reset threshold levels for 2.8V - 2.9V VDD power supply
mbed_official 76:aeb1df146756 1476 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 1477 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 1478 */
mbed_official 76:aeb1df146756 1479 FLASH_Status FLASH_OB_BORConfig(uint8_t OB_BOR)
mbed_official 76:aeb1df146756 1480 {
mbed_official 76:aeb1df146756 1481 FLASH_Status status = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 1482 uint32_t tmp = 0, tmp1 = 0;
mbed_official 76:aeb1df146756 1483
mbed_official 76:aeb1df146756 1484 /* Check the parameters */
mbed_official 76:aeb1df146756 1485 assert_param(IS_OB_BOR_LEVEL(OB_BOR));
mbed_official 76:aeb1df146756 1486
mbed_official 76:aeb1df146756 1487 /* Get the User Option byte register */
mbed_official 76:aeb1df146756 1488 tmp1 = (FLASH->OBR & 0x00F00000) >> 16;
mbed_official 76:aeb1df146756 1489
mbed_official 76:aeb1df146756 1490 /* Calculate the option byte to write */
mbed_official 76:aeb1df146756 1491 tmp = (uint32_t)~(OB_BOR | tmp1)<<16;
mbed_official 76:aeb1df146756 1492 tmp |= (OB_BOR | tmp1);
mbed_official 76:aeb1df146756 1493
mbed_official 76:aeb1df146756 1494 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 1495 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1496
mbed_official 76:aeb1df146756 1497 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 1498 {
mbed_official 76:aeb1df146756 1499 /* Write the BOR Option Byte */
mbed_official 76:aeb1df146756 1500 OB->USER = tmp;
mbed_official 76:aeb1df146756 1501 }
mbed_official 76:aeb1df146756 1502
mbed_official 76:aeb1df146756 1503 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 1504 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1505
mbed_official 76:aeb1df146756 1506 /* Return the Option Byte program Status */
mbed_official 76:aeb1df146756 1507 return status;
mbed_official 76:aeb1df146756 1508 }
mbed_official 76:aeb1df146756 1509
mbed_official 76:aeb1df146756 1510 /**
mbed_official 76:aeb1df146756 1511 * @brief Configures to boot from Bank1 or Bank2.
mbed_official 80:66393a7b209d 1512 * @note This function can be used only for STM32L1XX_HD and STM32L1XX_XL devices.
mbed_official 76:aeb1df146756 1513 * @param OB_BOOT: select the FLASH Bank to boot from.
mbed_official 76:aeb1df146756 1514 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1515 * @arg OB_BOOT_BANK2: At startup, if boot pins are set in boot from user Flash
mbed_official 76:aeb1df146756 1516 * position and this parameter is selected the device will boot from Bank2 or Bank1,
mbed_official 76:aeb1df146756 1517 * depending on the activation of the bank. The active banks are checked in
mbed_official 76:aeb1df146756 1518 * the following order: Bank2, followed by Bank1.
mbed_official 76:aeb1df146756 1519 * The active bank is recognized by the value programmed at the base address
mbed_official 76:aeb1df146756 1520 * of the respective bank (corresponding to the initial stack pointer value
mbed_official 76:aeb1df146756 1521 * in the interrupt vector table).
mbed_official 76:aeb1df146756 1522 * @arg OB_BOOT_BANK1: At startup, if boot pins are set in boot from user Flash
mbed_official 76:aeb1df146756 1523 * position and this parameter is selected the device will boot from Bank1(Default).
mbed_official 76:aeb1df146756 1524 * For more information, please refer to AN2606 from www.st.com.
mbed_official 76:aeb1df146756 1525 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 1526 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 1527 */
mbed_official 76:aeb1df146756 1528 FLASH_Status FLASH_OB_BootConfig(uint8_t OB_BOOT)
mbed_official 76:aeb1df146756 1529 {
mbed_official 76:aeb1df146756 1530 FLASH_Status status = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 1531 uint32_t tmp = 0, tmp1 = 0;
mbed_official 76:aeb1df146756 1532
mbed_official 76:aeb1df146756 1533 /* Check the parameters */
mbed_official 76:aeb1df146756 1534 assert_param(IS_OB_BOOT_BANK(OB_BOOT));
mbed_official 76:aeb1df146756 1535
mbed_official 76:aeb1df146756 1536 /* Get the User Option byte register */
mbed_official 76:aeb1df146756 1537 tmp1 = (FLASH->OBR & 0x007F0000) >> 16;
mbed_official 76:aeb1df146756 1538
mbed_official 76:aeb1df146756 1539 /* Calculate the option byte to write */
mbed_official 76:aeb1df146756 1540 tmp = (uint32_t)~(OB_BOOT | tmp1)<<16;
mbed_official 76:aeb1df146756 1541 tmp |= (OB_BOOT | tmp1);
mbed_official 76:aeb1df146756 1542
mbed_official 76:aeb1df146756 1543 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 1544 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1545
mbed_official 76:aeb1df146756 1546 if(status == FLASH_COMPLETE)
mbed_official 76:aeb1df146756 1547 {
mbed_official 76:aeb1df146756 1548 /* Write the BOOT Option Byte */
mbed_official 76:aeb1df146756 1549 OB->USER = tmp;
mbed_official 76:aeb1df146756 1550 }
mbed_official 76:aeb1df146756 1551
mbed_official 76:aeb1df146756 1552 /* Wait for last operation to be completed */
mbed_official 76:aeb1df146756 1553 status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
mbed_official 76:aeb1df146756 1554
mbed_official 76:aeb1df146756 1555 /* Return the Option Byte program Status */
mbed_official 76:aeb1df146756 1556 return status;
mbed_official 76:aeb1df146756 1557 }
mbed_official 76:aeb1df146756 1558
mbed_official 76:aeb1df146756 1559 /**
mbed_official 76:aeb1df146756 1560 * @brief Returns the FLASH User Option Bytes values.
mbed_official 76:aeb1df146756 1561 * @param None
mbed_official 76:aeb1df146756 1562 * @retval The FLASH User Option Bytes.
mbed_official 76:aeb1df146756 1563 */
mbed_official 76:aeb1df146756 1564 uint8_t FLASH_OB_GetUser(void)
mbed_official 76:aeb1df146756 1565 {
mbed_official 76:aeb1df146756 1566 /* Return the User Option Byte */
mbed_official 76:aeb1df146756 1567 return (uint8_t)(FLASH->OBR >> 20);
mbed_official 76:aeb1df146756 1568 }
mbed_official 76:aeb1df146756 1569
mbed_official 76:aeb1df146756 1570 /**
mbed_official 76:aeb1df146756 1571 * @brief Returns the FLASH Write Protection Option Bytes value.
mbed_official 76:aeb1df146756 1572 * @param None
mbed_official 76:aeb1df146756 1573 * @retval The FLASH Write Protection Option Bytes value.
mbed_official 76:aeb1df146756 1574 */
mbed_official 76:aeb1df146756 1575 uint32_t FLASH_OB_GetWRP(void)
mbed_official 76:aeb1df146756 1576 {
mbed_official 76:aeb1df146756 1577 /* Return the FLASH write protection Register value */
mbed_official 76:aeb1df146756 1578 return (uint32_t)(FLASH->WRPR);
mbed_official 76:aeb1df146756 1579 }
mbed_official 76:aeb1df146756 1580
mbed_official 76:aeb1df146756 1581 /**
mbed_official 76:aeb1df146756 1582 * @brief Returns the FLASH Write Protection Option Bytes value.
mbed_official 80:66393a7b209d 1583 * @note This function can be used only for STM32L1XX_HD, STM32L1XX_MDP and
mbed_official 80:66393a7b209d 1584 * STM32L1XX_XL devices.
mbed_official 76:aeb1df146756 1585 * @param None
mbed_official 76:aeb1df146756 1586 * @retval The FLASH Write Protection Option Bytes value.
mbed_official 76:aeb1df146756 1587 */
mbed_official 76:aeb1df146756 1588 uint32_t FLASH_OB_GetWRP1(void)
mbed_official 76:aeb1df146756 1589 {
mbed_official 76:aeb1df146756 1590 /* Return the FLASH write protection Register value */
mbed_official 76:aeb1df146756 1591 return (uint32_t)(FLASH->WRPR1);
mbed_official 76:aeb1df146756 1592 }
mbed_official 76:aeb1df146756 1593
mbed_official 76:aeb1df146756 1594 /**
mbed_official 76:aeb1df146756 1595 * @brief Returns the FLASH Write Protection Option Bytes value.
mbed_official 80:66393a7b209d 1596 * @note This function can be used only for STM32L1XX_HD and STM32L1XX_XL devices.
mbed_official 76:aeb1df146756 1597 * @param None
mbed_official 76:aeb1df146756 1598 * @retval The FLASH Write Protection Option Bytes value.
mbed_official 76:aeb1df146756 1599 */
mbed_official 76:aeb1df146756 1600 uint32_t FLASH_OB_GetWRP2(void)
mbed_official 76:aeb1df146756 1601 {
mbed_official 76:aeb1df146756 1602 /* Return the FLASH write protection Register value */
mbed_official 76:aeb1df146756 1603 return (uint32_t)(FLASH->WRPR2);
mbed_official 76:aeb1df146756 1604 }
mbed_official 76:aeb1df146756 1605
mbed_official 76:aeb1df146756 1606 /**
mbed_official 76:aeb1df146756 1607 * @brief Checks whether the FLASH Read out Protection Status is set or not.
mbed_official 76:aeb1df146756 1608 * @param None
mbed_official 76:aeb1df146756 1609 * @retval FLASH ReadOut Protection Status(SET or RESET).
mbed_official 76:aeb1df146756 1610 */
mbed_official 76:aeb1df146756 1611 FlagStatus FLASH_OB_GetRDP(void)
mbed_official 76:aeb1df146756 1612 {
mbed_official 76:aeb1df146756 1613 FlagStatus readstatus = RESET;
mbed_official 76:aeb1df146756 1614
mbed_official 76:aeb1df146756 1615 if ((uint8_t)(FLASH->OBR) != (uint8_t)OB_RDP_Level_0)
mbed_official 76:aeb1df146756 1616 {
mbed_official 76:aeb1df146756 1617 readstatus = SET;
mbed_official 76:aeb1df146756 1618 }
mbed_official 76:aeb1df146756 1619 else
mbed_official 76:aeb1df146756 1620 {
mbed_official 76:aeb1df146756 1621 readstatus = RESET;
mbed_official 76:aeb1df146756 1622 }
mbed_official 76:aeb1df146756 1623 return readstatus;
mbed_official 76:aeb1df146756 1624 }
mbed_official 76:aeb1df146756 1625
mbed_official 76:aeb1df146756 1626 /**
mbed_official 76:aeb1df146756 1627 * @brief Returns the SPRMOD Status.
mbed_official 76:aeb1df146756 1628 * @note This function can be used only for STM32L1XX_MDP devices
mbed_official 76:aeb1df146756 1629 * @param None
mbed_official 76:aeb1df146756 1630 * @retval The SPRMOD Status.
mbed_official 76:aeb1df146756 1631 */
mbed_official 76:aeb1df146756 1632 FlagStatus FLASH_OB_GetSPRMOD(void)
mbed_official 76:aeb1df146756 1633 {
mbed_official 76:aeb1df146756 1634 FlagStatus readstatus = RESET;
mbed_official 76:aeb1df146756 1635 uint16_t tmp = 0;
mbed_official 76:aeb1df146756 1636
mbed_official 76:aeb1df146756 1637 /* Return the SPRMOD value */
mbed_official 76:aeb1df146756 1638 tmp = (uint16_t)(FLASH->OBR & (uint16_t)(0x0100));
mbed_official 76:aeb1df146756 1639
mbed_official 76:aeb1df146756 1640 if (tmp != (uint16_t)0x0000)
mbed_official 76:aeb1df146756 1641 {
mbed_official 76:aeb1df146756 1642 readstatus = SET;
mbed_official 76:aeb1df146756 1643 }
mbed_official 76:aeb1df146756 1644 else
mbed_official 76:aeb1df146756 1645 {
mbed_official 76:aeb1df146756 1646 readstatus = RESET;
mbed_official 76:aeb1df146756 1647 }
mbed_official 76:aeb1df146756 1648 return readstatus;
mbed_official 76:aeb1df146756 1649 }
mbed_official 76:aeb1df146756 1650
mbed_official 76:aeb1df146756 1651 /**
mbed_official 76:aeb1df146756 1652 * @brief Returns the FLASH BOR level.
mbed_official 76:aeb1df146756 1653 * @param None
mbed_official 76:aeb1df146756 1654 * @retval The FLASH User Option Bytes.
mbed_official 76:aeb1df146756 1655 */
mbed_official 76:aeb1df146756 1656 uint8_t FLASH_OB_GetBOR(void)
mbed_official 76:aeb1df146756 1657 {
mbed_official 76:aeb1df146756 1658 /* Return the BOR level */
mbed_official 76:aeb1df146756 1659 return (uint8_t)((FLASH->OBR & (uint32_t)0x000F0000) >> 16);
mbed_official 76:aeb1df146756 1660 }
mbed_official 76:aeb1df146756 1661
mbed_official 76:aeb1df146756 1662 /**
mbed_official 76:aeb1df146756 1663 * @}
mbed_official 76:aeb1df146756 1664 */
mbed_official 76:aeb1df146756 1665
mbed_official 76:aeb1df146756 1666 /** @defgroup FLASH_Group5 Interrupts and flags management functions
mbed_official 76:aeb1df146756 1667 * @brief Interrupts and flags management functions
mbed_official 76:aeb1df146756 1668 *
mbed_official 76:aeb1df146756 1669 @verbatim
mbed_official 76:aeb1df146756 1670 ==============================================================================
mbed_official 76:aeb1df146756 1671 ##### Interrupts and flags management functions #####
mbed_official 76:aeb1df146756 1672 ==============================================================================
mbed_official 76:aeb1df146756 1673
mbed_official 76:aeb1df146756 1674 @endverbatim
mbed_official 76:aeb1df146756 1675 * @{
mbed_official 76:aeb1df146756 1676 */
mbed_official 76:aeb1df146756 1677
mbed_official 76:aeb1df146756 1678 /**
mbed_official 76:aeb1df146756 1679 * @brief Enables or disables the specified FLASH interrupts.
mbed_official 76:aeb1df146756 1680 * @param FLASH_IT: specifies the FLASH interrupt sources to be enabled or
mbed_official 76:aeb1df146756 1681 * disabled.
mbed_official 76:aeb1df146756 1682 * This parameter can be any combination of the following values:
mbed_official 76:aeb1df146756 1683 * @arg FLASH_IT_EOP: FLASH end of programming Interrupt
mbed_official 76:aeb1df146756 1684 * @arg FLASH_IT_ERR: FLASH Error Interrupt
mbed_official 76:aeb1df146756 1685 * @retval None
mbed_official 76:aeb1df146756 1686 */
mbed_official 76:aeb1df146756 1687 void FLASH_ITConfig(uint32_t FLASH_IT, FunctionalState NewState)
mbed_official 76:aeb1df146756 1688 {
mbed_official 76:aeb1df146756 1689 /* Check the parameters */
mbed_official 76:aeb1df146756 1690 assert_param(IS_FLASH_IT(FLASH_IT));
mbed_official 76:aeb1df146756 1691 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 1692
mbed_official 76:aeb1df146756 1693 if(NewState != DISABLE)
mbed_official 76:aeb1df146756 1694 {
mbed_official 76:aeb1df146756 1695 /* Enable the interrupt sources */
mbed_official 76:aeb1df146756 1696 FLASH->PECR |= FLASH_IT;
mbed_official 76:aeb1df146756 1697 }
mbed_official 76:aeb1df146756 1698 else
mbed_official 76:aeb1df146756 1699 {
mbed_official 76:aeb1df146756 1700 /* Disable the interrupt sources */
mbed_official 76:aeb1df146756 1701 FLASH->PECR &= ~(uint32_t)FLASH_IT;
mbed_official 76:aeb1df146756 1702 }
mbed_official 76:aeb1df146756 1703 }
mbed_official 76:aeb1df146756 1704
mbed_official 76:aeb1df146756 1705 /**
mbed_official 76:aeb1df146756 1706 * @brief Checks whether the specified FLASH flag is set or not.
mbed_official 76:aeb1df146756 1707 * @param FLASH_FLAG: specifies the FLASH flag to check.
mbed_official 76:aeb1df146756 1708 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1709 * @arg FLASH_FLAG_BSY: FLASH write/erase operations in progress flag
mbed_official 76:aeb1df146756 1710 * @arg FLASH_FLAG_EOP: FLASH End of Operation flag
mbed_official 76:aeb1df146756 1711 * @arg FLASH_FLAG_READY: FLASH Ready flag after low power mode
mbed_official 76:aeb1df146756 1712 * @arg FLASH_FLAG_ENDHV: FLASH End of high voltage flag
mbed_official 76:aeb1df146756 1713 * @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag
mbed_official 76:aeb1df146756 1714 * @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag
mbed_official 76:aeb1df146756 1715 * @arg FLASH_FLAG_SIZERR: FLASH size error flag
mbed_official 76:aeb1df146756 1716 * @arg FLASH_FLAG_OPTVERR: FLASH Option validity error flag
mbed_official 76:aeb1df146756 1717 * @arg FLASH_FLAG_OPTVERRUSR: FLASH Option User validity error flag
mbed_official 76:aeb1df146756 1718 * @arg FLASH_FLAG_RDERR: FLASH Read protected error flag (available only in STM32L1XX_MDP devices)
mbed_official 76:aeb1df146756 1719 * @retval The new state of FLASH_FLAG (SET or RESET).
mbed_official 76:aeb1df146756 1720 */
mbed_official 76:aeb1df146756 1721 FlagStatus FLASH_GetFlagStatus(uint32_t FLASH_FLAG)
mbed_official 76:aeb1df146756 1722 {
mbed_official 76:aeb1df146756 1723 FlagStatus bitstatus = RESET;
mbed_official 76:aeb1df146756 1724
mbed_official 76:aeb1df146756 1725 /* Check the parameters */
mbed_official 76:aeb1df146756 1726 assert_param(IS_FLASH_GET_FLAG(FLASH_FLAG));
mbed_official 76:aeb1df146756 1727
mbed_official 76:aeb1df146756 1728 if((FLASH->SR & FLASH_FLAG) != (uint32_t)RESET)
mbed_official 76:aeb1df146756 1729 {
mbed_official 76:aeb1df146756 1730 bitstatus = SET;
mbed_official 76:aeb1df146756 1731 }
mbed_official 76:aeb1df146756 1732 else
mbed_official 76:aeb1df146756 1733 {
mbed_official 76:aeb1df146756 1734 bitstatus = RESET;
mbed_official 76:aeb1df146756 1735 }
mbed_official 76:aeb1df146756 1736 /* Return the new state of FLASH_FLAG (SET or RESET) */
mbed_official 76:aeb1df146756 1737 return bitstatus;
mbed_official 76:aeb1df146756 1738 }
mbed_official 76:aeb1df146756 1739
mbed_official 76:aeb1df146756 1740 /**
mbed_official 76:aeb1df146756 1741 * @brief Clears the FLASH's pending flags.
mbed_official 76:aeb1df146756 1742 * @param FLASH_FLAG: specifies the FLASH flags to clear.
mbed_official 76:aeb1df146756 1743 * This parameter can be any combination of the following values:
mbed_official 76:aeb1df146756 1744 * @arg FLASH_FLAG_EOP: FLASH End of Operation flag
mbed_official 76:aeb1df146756 1745 * @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag
mbed_official 76:aeb1df146756 1746 * @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag
mbed_official 76:aeb1df146756 1747 * @arg FLASH_FLAG_SIZERR: FLASH size error flag
mbed_official 76:aeb1df146756 1748 * @arg FLASH_FLAG_OPTVERR: FLASH Option validity error flag
mbed_official 76:aeb1df146756 1749 * @arg FLASH_FLAG_OPTVERRUSR: FLASH Option User validity error flag
mbed_official 76:aeb1df146756 1750 * @arg FLASH_FLAG_RDERR: FLASH Read protected error flag (available only in STM32L1XX_MDP devices)
mbed_official 76:aeb1df146756 1751 * @retval None
mbed_official 76:aeb1df146756 1752 */
mbed_official 76:aeb1df146756 1753 void FLASH_ClearFlag(uint32_t FLASH_FLAG)
mbed_official 76:aeb1df146756 1754 {
mbed_official 76:aeb1df146756 1755 /* Check the parameters */
mbed_official 76:aeb1df146756 1756 assert_param(IS_FLASH_CLEAR_FLAG(FLASH_FLAG));
mbed_official 76:aeb1df146756 1757
mbed_official 76:aeb1df146756 1758 /* Clear the flags */
mbed_official 76:aeb1df146756 1759 FLASH->SR = FLASH_FLAG;
mbed_official 76:aeb1df146756 1760 }
mbed_official 76:aeb1df146756 1761
mbed_official 76:aeb1df146756 1762 /**
mbed_official 76:aeb1df146756 1763 * @brief Returns the FLASH Status.
mbed_official 76:aeb1df146756 1764 * @param None
mbed_official 76:aeb1df146756 1765 * @retval FLASH Status: The returned value can be:
mbed_official 76:aeb1df146756 1766 * FLASH_BUSY, FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP or FLASH_COMPLETE.
mbed_official 76:aeb1df146756 1767 */
mbed_official 76:aeb1df146756 1768 FLASH_Status FLASH_GetStatus(void)
mbed_official 76:aeb1df146756 1769 {
mbed_official 76:aeb1df146756 1770 FLASH_Status FLASHstatus = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 1771
mbed_official 76:aeb1df146756 1772 if((FLASH->SR & FLASH_FLAG_BSY) == FLASH_FLAG_BSY)
mbed_official 76:aeb1df146756 1773 {
mbed_official 76:aeb1df146756 1774 FLASHstatus = FLASH_BUSY;
mbed_official 76:aeb1df146756 1775 }
mbed_official 76:aeb1df146756 1776 else
mbed_official 76:aeb1df146756 1777 {
mbed_official 76:aeb1df146756 1778 if((FLASH->SR & (uint32_t)FLASH_FLAG_WRPERR)!= (uint32_t)0x00)
mbed_official 76:aeb1df146756 1779 {
mbed_official 76:aeb1df146756 1780 FLASHstatus = FLASH_ERROR_WRP;
mbed_official 76:aeb1df146756 1781 }
mbed_official 76:aeb1df146756 1782 else
mbed_official 76:aeb1df146756 1783 {
mbed_official 76:aeb1df146756 1784 if((FLASH->SR & (uint32_t)0x1E00) != (uint32_t)0x00)
mbed_official 76:aeb1df146756 1785 {
mbed_official 76:aeb1df146756 1786 FLASHstatus = FLASH_ERROR_PROGRAM;
mbed_official 76:aeb1df146756 1787 }
mbed_official 76:aeb1df146756 1788 else
mbed_official 76:aeb1df146756 1789 {
mbed_official 76:aeb1df146756 1790 FLASHstatus = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 1791 }
mbed_official 76:aeb1df146756 1792 }
mbed_official 76:aeb1df146756 1793 }
mbed_official 76:aeb1df146756 1794 /* Return the FLASH Status */
mbed_official 76:aeb1df146756 1795 return FLASHstatus;
mbed_official 76:aeb1df146756 1796 }
mbed_official 76:aeb1df146756 1797
mbed_official 76:aeb1df146756 1798
mbed_official 76:aeb1df146756 1799 /**
mbed_official 76:aeb1df146756 1800 * @brief Waits for a FLASH operation to complete or a TIMEOUT to occur.
mbed_official 76:aeb1df146756 1801 * @param Timeout: FLASH programming Timeout.
mbed_official 76:aeb1df146756 1802 * @retval FLASH Status: The returned value can be: FLASH_BUSY,
mbed_official 76:aeb1df146756 1803 * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
mbed_official 76:aeb1df146756 1804 */
mbed_official 76:aeb1df146756 1805 FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout)
mbed_official 76:aeb1df146756 1806 {
mbed_official 76:aeb1df146756 1807 __IO FLASH_Status status = FLASH_COMPLETE;
mbed_official 76:aeb1df146756 1808
mbed_official 76:aeb1df146756 1809 /* Check for the FLASH Status */
mbed_official 76:aeb1df146756 1810 status = FLASH_GetStatus();
mbed_official 76:aeb1df146756 1811
mbed_official 76:aeb1df146756 1812 /* Wait for a FLASH operation to complete or a TIMEOUT to occur */
mbed_official 76:aeb1df146756 1813 while((status == FLASH_BUSY) && (Timeout != 0x00))
mbed_official 76:aeb1df146756 1814 {
mbed_official 76:aeb1df146756 1815 status = FLASH_GetStatus();
mbed_official 76:aeb1df146756 1816 Timeout--;
mbed_official 76:aeb1df146756 1817 }
mbed_official 76:aeb1df146756 1818
mbed_official 76:aeb1df146756 1819 if(Timeout == 0x00 )
mbed_official 76:aeb1df146756 1820 {
mbed_official 76:aeb1df146756 1821 status = FLASH_TIMEOUT;
mbed_official 76:aeb1df146756 1822 }
mbed_official 76:aeb1df146756 1823 /* Return the operation status */
mbed_official 76:aeb1df146756 1824 return status;
mbed_official 76:aeb1df146756 1825 }
mbed_official 76:aeb1df146756 1826
mbed_official 76:aeb1df146756 1827 /**
mbed_official 76:aeb1df146756 1828 * @}
mbed_official 76:aeb1df146756 1829 */
mbed_official 76:aeb1df146756 1830
mbed_official 76:aeb1df146756 1831 /**
mbed_official 76:aeb1df146756 1832 * @}
mbed_official 76:aeb1df146756 1833 */
mbed_official 76:aeb1df146756 1834
mbed_official 76:aeb1df146756 1835 /**
mbed_official 76:aeb1df146756 1836 * @}
mbed_official 76:aeb1df146756 1837 */
mbed_official 76:aeb1df146756 1838
mbed_official 76:aeb1df146756 1839 /**
mbed_official 76:aeb1df146756 1840 * @}
mbed_official 76:aeb1df146756 1841 */
mbed_official 76:aeb1df146756 1842
mbed_official 76:aeb1df146756 1843 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/