mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
Parent:
187:0387e8f68319
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 /**
<> 144:ef7eb2e8f9f7 2 ******************************************************************************
<> 144:ef7eb2e8f9f7 3 * @file stm32f1xx_hal.c
<> 144:ef7eb2e8f9f7 4 * @author MCD Application Team
<> 144:ef7eb2e8f9f7 5 * @brief HAL module driver.
<> 144:ef7eb2e8f9f7 6 * This is the common part of the HAL initialization
<> 144:ef7eb2e8f9f7 7 *
<> 144:ef7eb2e8f9f7 8 @verbatim
<> 144:ef7eb2e8f9f7 9 ==============================================================================
<> 144:ef7eb2e8f9f7 10 ##### How to use this driver #####
<> 144:ef7eb2e8f9f7 11 ==============================================================================
<> 144:ef7eb2e8f9f7 12 [..]
<> 144:ef7eb2e8f9f7 13 The common HAL driver contains a set of generic and common APIs that can be
AnnaBridge 187:0387e8f68319 14 used by the PPP peripheral drivers and the user to start using the HAL.
<> 144:ef7eb2e8f9f7 15 [..]
AnnaBridge 187:0387e8f68319 16 The HAL contains two APIs' categories:
<> 144:ef7eb2e8f9f7 17 (+) Common HAL APIs
<> 144:ef7eb2e8f9f7 18 (+) Services HAL APIs
<> 144:ef7eb2e8f9f7 19
<> 144:ef7eb2e8f9f7 20 @endverbatim
<> 144:ef7eb2e8f9f7 21 ******************************************************************************
<> 144:ef7eb2e8f9f7 22 * @attention
<> 144:ef7eb2e8f9f7 23 *
<> 144:ef7eb2e8f9f7 24 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
<> 144:ef7eb2e8f9f7 25 *
<> 144:ef7eb2e8f9f7 26 * Redistribution and use in source and binary forms, with or without modification,
<> 144:ef7eb2e8f9f7 27 * are permitted provided that the following conditions are met:
<> 144:ef7eb2e8f9f7 28 * 1. Redistributions of source code must retain the above copyright notice,
<> 144:ef7eb2e8f9f7 29 * this list of conditions and the following disclaimer.
<> 144:ef7eb2e8f9f7 30 * 2. Redistributions in binary form must reproduce the above copyright notice,
<> 144:ef7eb2e8f9f7 31 * this list of conditions and the following disclaimer in the documentation
<> 144:ef7eb2e8f9f7 32 * and/or other materials provided with the distribution.
<> 144:ef7eb2e8f9f7 33 * 3. Neither the name of STMicroelectronics nor the names of its contributors
<> 144:ef7eb2e8f9f7 34 * may be used to endorse or promote products derived from this software
<> 144:ef7eb2e8f9f7 35 * without specific prior written permission.
<> 144:ef7eb2e8f9f7 36 *
<> 144:ef7eb2e8f9f7 37 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
<> 144:ef7eb2e8f9f7 38 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
<> 144:ef7eb2e8f9f7 39 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
<> 144:ef7eb2e8f9f7 40 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
<> 144:ef7eb2e8f9f7 41 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
<> 144:ef7eb2e8f9f7 42 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
<> 144:ef7eb2e8f9f7 43 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
<> 144:ef7eb2e8f9f7 44 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
<> 144:ef7eb2e8f9f7 45 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
<> 144:ef7eb2e8f9f7 46 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<> 144:ef7eb2e8f9f7 47 *
<> 144:ef7eb2e8f9f7 48 ******************************************************************************
<> 144:ef7eb2e8f9f7 49 */
<> 144:ef7eb2e8f9f7 50
<> 144:ef7eb2e8f9f7 51 /* Includes ------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 52 #include "stm32f1xx_hal.h"
<> 144:ef7eb2e8f9f7 53
<> 144:ef7eb2e8f9f7 54 /** @addtogroup STM32F1xx_HAL_Driver
<> 144:ef7eb2e8f9f7 55 * @{
<> 144:ef7eb2e8f9f7 56 */
<> 144:ef7eb2e8f9f7 57
<> 144:ef7eb2e8f9f7 58 /** @defgroup HAL HAL
<> 144:ef7eb2e8f9f7 59 * @brief HAL module driver.
<> 144:ef7eb2e8f9f7 60 * @{
<> 144:ef7eb2e8f9f7 61 */
<> 144:ef7eb2e8f9f7 62
<> 144:ef7eb2e8f9f7 63 #ifdef HAL_MODULE_ENABLED
<> 144:ef7eb2e8f9f7 64
<> 144:ef7eb2e8f9f7 65 /* Private typedef -----------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 66 /* Private define ------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 67
<> 144:ef7eb2e8f9f7 68 /** @defgroup HAL_Private_Constants HAL Private Constants
<> 144:ef7eb2e8f9f7 69 * @{
<> 144:ef7eb2e8f9f7 70 */
<> 144:ef7eb2e8f9f7 71 /**
AnnaBridge 187:0387e8f68319 72 * @brief STM32F1xx HAL Driver version number V1.1.2
<> 144:ef7eb2e8f9f7 73 */
AnnaBridge 165:e614a9f1c9e2 74 #define __STM32F1xx_HAL_VERSION_MAIN (0x01U) /*!< [31:24] main version */
AnnaBridge 165:e614a9f1c9e2 75 #define __STM32F1xx_HAL_VERSION_SUB1 (0x01U) /*!< [23:16] sub1 version */
AnnaBridge 187:0387e8f68319 76 #define __STM32F1xx_HAL_VERSION_SUB2 (0x02U) /*!< [15:8] sub2 version */
AnnaBridge 165:e614a9f1c9e2 77 #define __STM32F1xx_HAL_VERSION_RC (0x00U) /*!< [7:0] release candidate */
<> 144:ef7eb2e8f9f7 78 #define __STM32F1xx_HAL_VERSION ((__STM32F1xx_HAL_VERSION_MAIN << 24)\
<> 144:ef7eb2e8f9f7 79 |(__STM32F1xx_HAL_VERSION_SUB1 << 16)\
<> 144:ef7eb2e8f9f7 80 |(__STM32F1xx_HAL_VERSION_SUB2 << 8 )\
<> 144:ef7eb2e8f9f7 81 |(__STM32F1xx_HAL_VERSION_RC))
<> 144:ef7eb2e8f9f7 82
AnnaBridge 165:e614a9f1c9e2 83 #define IDCODE_DEVID_MASK 0x00000FFFU
<> 144:ef7eb2e8f9f7 84
<> 144:ef7eb2e8f9f7 85 /**
<> 144:ef7eb2e8f9f7 86 * @}
<> 144:ef7eb2e8f9f7 87 */
<> 144:ef7eb2e8f9f7 88
<> 144:ef7eb2e8f9f7 89 /* Private macro -------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 90 /* Private variables ---------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 91
<> 144:ef7eb2e8f9f7 92 /** @defgroup HAL_Private_Variables HAL Private Variables
<> 144:ef7eb2e8f9f7 93 * @{
<> 144:ef7eb2e8f9f7 94 */
AnnaBridge 165:e614a9f1c9e2 95 __IO uint32_t uwTick;
AnnaBridge 187:0387e8f68319 96 uint32_t uwTickPrio = (1UL << __NVIC_PRIO_BITS); /* Invalid PRIO */
AnnaBridge 187:0387e8f68319 97 HAL_TickFreqTypeDef uwTickFreq = HAL_TICK_FREQ_DEFAULT; /* 1KHz */
<> 144:ef7eb2e8f9f7 98 /**
<> 144:ef7eb2e8f9f7 99 * @}
<> 144:ef7eb2e8f9f7 100 */
<> 144:ef7eb2e8f9f7 101 /* Private function prototypes -----------------------------------------------*/
<> 144:ef7eb2e8f9f7 102 /* Exported functions ---------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 103
<> 144:ef7eb2e8f9f7 104 /** @defgroup HAL_Exported_Functions HAL Exported Functions
<> 144:ef7eb2e8f9f7 105 * @{
<> 144:ef7eb2e8f9f7 106 */
<> 144:ef7eb2e8f9f7 107
AnnaBridge 187:0387e8f68319 108 /** @defgroup HAL_Exported_Functions_Group1 Initialization and de-initialization Functions
<> 144:ef7eb2e8f9f7 109 * @brief Initialization and de-initialization functions
<> 144:ef7eb2e8f9f7 110 *
<> 144:ef7eb2e8f9f7 111 @verbatim
<> 144:ef7eb2e8f9f7 112 ===============================================================================
<> 144:ef7eb2e8f9f7 113 ##### Initialization and de-initialization functions #####
<> 144:ef7eb2e8f9f7 114 ===============================================================================
<> 144:ef7eb2e8f9f7 115 [..] This section provides functions allowing to:
AnnaBridge 187:0387e8f68319 116 (+) Initializes the Flash interface, the NVIC allocation and initial clock
AnnaBridge 187:0387e8f68319 117 configuration. It initializes the systick also when timeout is needed
AnnaBridge 187:0387e8f68319 118 and the backup domain when enabled.
<> 144:ef7eb2e8f9f7 119 (+) de-Initializes common part of the HAL.
AnnaBridge 187:0387e8f68319 120 (+) Configure The time base source to have 1ms time base with a dedicated
AnnaBridge 187:0387e8f68319 121 Tick interrupt priority.
AnnaBridge 187:0387e8f68319 122 (++) SysTick timer is used by default as source of time base, but user
AnnaBridge 187:0387e8f68319 123 can eventually implement his proper time base source (a general purpose
AnnaBridge 187:0387e8f68319 124 timer for example or other time source), keeping in mind that Time base
AnnaBridge 187:0387e8f68319 125 duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and
<> 144:ef7eb2e8f9f7 126 handled in milliseconds basis.
AnnaBridge 187:0387e8f68319 127 (++) Time base configuration function (HAL_InitTick ()) is called automatically
AnnaBridge 187:0387e8f68319 128 at the beginning of the program after reset by HAL_Init() or at any time
AnnaBridge 187:0387e8f68319 129 when clock is configured, by HAL_RCC_ClockConfig().
AnnaBridge 187:0387e8f68319 130 (++) Source of time base is configured to generate interrupts at regular
AnnaBridge 187:0387e8f68319 131 time intervals. Care must be taken if HAL_Delay() is called from a
AnnaBridge 187:0387e8f68319 132 peripheral ISR process, the Tick interrupt line must have higher priority
AnnaBridge 187:0387e8f68319 133 (numerically lower) than the peripheral interrupt. Otherwise the caller
AnnaBridge 187:0387e8f68319 134 ISR process will be blocked.
AnnaBridge 187:0387e8f68319 135 (++) functions affecting time base configurations are declared as __weak
<> 144:ef7eb2e8f9f7 136 to make override possible in case of other implementations in user file.
<> 144:ef7eb2e8f9f7 137 @endverbatim
<> 144:ef7eb2e8f9f7 138 * @{
<> 144:ef7eb2e8f9f7 139 */
<> 144:ef7eb2e8f9f7 140
<> 144:ef7eb2e8f9f7 141 /**
AnnaBridge 187:0387e8f68319 142 * @brief This function is used to initialize the HAL Library; it must be the first
AnnaBridge 165:e614a9f1c9e2 143 * instruction to be executed in the main program (before to call any other
AnnaBridge 165:e614a9f1c9e2 144 * HAL function), it performs the following:
AnnaBridge 165:e614a9f1c9e2 145 * Configure the Flash prefetch.
AnnaBridge 165:e614a9f1c9e2 146 * Configures the SysTick to generate an interrupt each 1 millisecond,
AnnaBridge 165:e614a9f1c9e2 147 * which is clocked by the HSI (at this stage, the clock is not yet
AnnaBridge 165:e614a9f1c9e2 148 * configured and thus the system is running from the internal HSI at 16 MHz).
AnnaBridge 165:e614a9f1c9e2 149 * Set NVIC Group Priority to 4.
AnnaBridge 187:0387e8f68319 150 * Calls the HAL_MspInit() callback function defined in user file
AnnaBridge 187:0387e8f68319 151 * "stm32f1xx_hal_msp.c" to do the global low level hardware initialization
AnnaBridge 187:0387e8f68319 152 *
AnnaBridge 165:e614a9f1c9e2 153 * @note SysTick is used as time base for the HAL_Delay() function, the application
AnnaBridge 165:e614a9f1c9e2 154 * need to ensure that the SysTick time base is always set to 1 millisecond
AnnaBridge 165:e614a9f1c9e2 155 * to have correct HAL operation.
<> 144:ef7eb2e8f9f7 156 * @retval HAL status
<> 144:ef7eb2e8f9f7 157 */
<> 144:ef7eb2e8f9f7 158 HAL_StatusTypeDef HAL_Init(void)
<> 144:ef7eb2e8f9f7 159 {
<> 144:ef7eb2e8f9f7 160 /* Configure Flash prefetch */
<> 144:ef7eb2e8f9f7 161 #if (PREFETCH_ENABLE != 0)
<> 144:ef7eb2e8f9f7 162 #if defined(STM32F101x6) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || \
<> 144:ef7eb2e8f9f7 163 defined(STM32F102x6) || defined(STM32F102xB) || \
<> 144:ef7eb2e8f9f7 164 defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || \
<> 144:ef7eb2e8f9f7 165 defined(STM32F105xC) || defined(STM32F107xC)
<> 144:ef7eb2e8f9f7 166
<> 144:ef7eb2e8f9f7 167 /* Prefetch buffer is not available on value line devices */
<> 144:ef7eb2e8f9f7 168 __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
<> 144:ef7eb2e8f9f7 169 #endif
<> 144:ef7eb2e8f9f7 170 #endif /* PREFETCH_ENABLE */
<> 144:ef7eb2e8f9f7 171
<> 144:ef7eb2e8f9f7 172 /* Set Interrupt Group Priority */
<> 144:ef7eb2e8f9f7 173 HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
<> 144:ef7eb2e8f9f7 174
AnnaBridge 187:0387e8f68319 175 /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */
<> 144:ef7eb2e8f9f7 176 HAL_InitTick(TICK_INT_PRIORITY);
<> 144:ef7eb2e8f9f7 177
<> 144:ef7eb2e8f9f7 178 /* Init the low level hardware */
<> 144:ef7eb2e8f9f7 179 HAL_MspInit();
<> 144:ef7eb2e8f9f7 180
<> 144:ef7eb2e8f9f7 181 /* Return function status */
<> 144:ef7eb2e8f9f7 182 return HAL_OK;
<> 144:ef7eb2e8f9f7 183 }
<> 144:ef7eb2e8f9f7 184
<> 144:ef7eb2e8f9f7 185 /**
AnnaBridge 187:0387e8f68319 186 * @brief This function de-Initializes common part of the HAL and stops the systick.
<> 144:ef7eb2e8f9f7 187 * of time base.
<> 144:ef7eb2e8f9f7 188 * @note This function is optional.
<> 144:ef7eb2e8f9f7 189 * @retval HAL status
<> 144:ef7eb2e8f9f7 190 */
<> 144:ef7eb2e8f9f7 191 HAL_StatusTypeDef HAL_DeInit(void)
<> 144:ef7eb2e8f9f7 192 {
<> 144:ef7eb2e8f9f7 193 /* Reset of all peripherals */
<> 144:ef7eb2e8f9f7 194 __HAL_RCC_APB1_FORCE_RESET();
<> 144:ef7eb2e8f9f7 195 __HAL_RCC_APB1_RELEASE_RESET();
<> 144:ef7eb2e8f9f7 196
<> 144:ef7eb2e8f9f7 197 __HAL_RCC_APB2_FORCE_RESET();
<> 144:ef7eb2e8f9f7 198 __HAL_RCC_APB2_RELEASE_RESET();
<> 144:ef7eb2e8f9f7 199
<> 144:ef7eb2e8f9f7 200 #if defined(STM32F105xC) || defined(STM32F107xC)
<> 144:ef7eb2e8f9f7 201 __HAL_RCC_AHB_FORCE_RESET();
<> 144:ef7eb2e8f9f7 202 __HAL_RCC_AHB_RELEASE_RESET();
<> 144:ef7eb2e8f9f7 203 #endif
AnnaBridge 187:0387e8f68319 204
<> 144:ef7eb2e8f9f7 205 /* De-Init the low level hardware */
<> 144:ef7eb2e8f9f7 206 HAL_MspDeInit();
AnnaBridge 187:0387e8f68319 207
<> 144:ef7eb2e8f9f7 208 /* Return function status */
<> 144:ef7eb2e8f9f7 209 return HAL_OK;
<> 144:ef7eb2e8f9f7 210 }
<> 144:ef7eb2e8f9f7 211
<> 144:ef7eb2e8f9f7 212 /**
AnnaBridge 187:0387e8f68319 213 * @brief Initialize the MSP.
<> 144:ef7eb2e8f9f7 214 * @retval None
<> 144:ef7eb2e8f9f7 215 */
<> 144:ef7eb2e8f9f7 216 __weak void HAL_MspInit(void)
<> 144:ef7eb2e8f9f7 217 {
AnnaBridge 187:0387e8f68319 218 /* NOTE : This function should not be modified, when the callback is needed,
<> 144:ef7eb2e8f9f7 219 the HAL_MspInit could be implemented in the user file
<> 144:ef7eb2e8f9f7 220 */
<> 144:ef7eb2e8f9f7 221 }
<> 144:ef7eb2e8f9f7 222
<> 144:ef7eb2e8f9f7 223 /**
<> 144:ef7eb2e8f9f7 224 * @brief DeInitializes the MSP.
<> 144:ef7eb2e8f9f7 225 * @retval None
<> 144:ef7eb2e8f9f7 226 */
<> 144:ef7eb2e8f9f7 227 __weak void HAL_MspDeInit(void)
<> 144:ef7eb2e8f9f7 228 {
AnnaBridge 187:0387e8f68319 229 /* NOTE : This function should not be modified, when the callback is needed,
<> 144:ef7eb2e8f9f7 230 the HAL_MspDeInit could be implemented in the user file
<> 144:ef7eb2e8f9f7 231 */
<> 144:ef7eb2e8f9f7 232 }
<> 144:ef7eb2e8f9f7 233
<> 144:ef7eb2e8f9f7 234 /**
AnnaBridge 187:0387e8f68319 235 * @brief This function configures the source of the time base.
AnnaBridge 187:0387e8f68319 236 * The time source is configured to have 1ms time base with a dedicated
<> 144:ef7eb2e8f9f7 237 * Tick interrupt priority.
<> 144:ef7eb2e8f9f7 238 * @note This function is called automatically at the beginning of program after
AnnaBridge 187:0387e8f68319 239 * reset by HAL_Init() or at any time when clock is reconfigured by HAL_RCC_ClockConfig().
AnnaBridge 187:0387e8f68319 240 * @note In the default implementation, SysTick timer is the source of time base.
AnnaBridge 187:0387e8f68319 241 * It is used to generate interrupts at regular time intervals.
AnnaBridge 187:0387e8f68319 242 * Care must be taken if HAL_Delay() is called from a peripheral ISR process,
AnnaBridge 187:0387e8f68319 243 * The SysTick interrupt must have higher priority (numerically lower)
<> 144:ef7eb2e8f9f7 244 * than the peripheral interrupt. Otherwise the caller ISR process will be blocked.
AnnaBridge 165:e614a9f1c9e2 245 * The function is declared as __weak to be overwritten in case of other
<> 144:ef7eb2e8f9f7 246 * implementation in user file.
AnnaBridge 187:0387e8f68319 247 * @param TickPriority Tick interrupt priority.
<> 144:ef7eb2e8f9f7 248 * @retval HAL status
<> 144:ef7eb2e8f9f7 249 */
<> 144:ef7eb2e8f9f7 250 __weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
<> 144:ef7eb2e8f9f7 251 {
AnnaBridge 187:0387e8f68319 252 /* Configure the SysTick to have interrupt in 1ms time basis*/
AnnaBridge 187:0387e8f68319 253 if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U)
AnnaBridge 187:0387e8f68319 254 {
AnnaBridge 187:0387e8f68319 255 return HAL_ERROR;
AnnaBridge 187:0387e8f68319 256 }
<> 144:ef7eb2e8f9f7 257
AnnaBridge 187:0387e8f68319 258 /* Configure the SysTick IRQ priority */
AnnaBridge 187:0387e8f68319 259 if (TickPriority < (1UL << __NVIC_PRIO_BITS))
AnnaBridge 187:0387e8f68319 260 {
AnnaBridge 187:0387e8f68319 261 HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U);
AnnaBridge 187:0387e8f68319 262 uwTickPrio = TickPriority;
AnnaBridge 187:0387e8f68319 263 }
AnnaBridge 187:0387e8f68319 264 else
AnnaBridge 187:0387e8f68319 265 {
AnnaBridge 187:0387e8f68319 266 return HAL_ERROR;
AnnaBridge 187:0387e8f68319 267 }
<> 144:ef7eb2e8f9f7 268
AnnaBridge 165:e614a9f1c9e2 269 /* Return function status */
<> 144:ef7eb2e8f9f7 270 return HAL_OK;
<> 144:ef7eb2e8f9f7 271 }
<> 144:ef7eb2e8f9f7 272
<> 144:ef7eb2e8f9f7 273 /**
<> 144:ef7eb2e8f9f7 274 * @}
<> 144:ef7eb2e8f9f7 275 */
<> 144:ef7eb2e8f9f7 276
AnnaBridge 187:0387e8f68319 277 /** @defgroup HAL_Exported_Functions_Group2 HAL Control functions
AnnaBridge 165:e614a9f1c9e2 278 * @brief HAL Control functions
AnnaBridge 165:e614a9f1c9e2 279 *
<> 144:ef7eb2e8f9f7 280 @verbatim
<> 144:ef7eb2e8f9f7 281 ===============================================================================
<> 144:ef7eb2e8f9f7 282 ##### HAL Control functions #####
<> 144:ef7eb2e8f9f7 283 ===============================================================================
<> 144:ef7eb2e8f9f7 284 [..] This section provides functions allowing to:
<> 144:ef7eb2e8f9f7 285 (+) Provide a tick value in millisecond
<> 144:ef7eb2e8f9f7 286 (+) Provide a blocking delay in millisecond
<> 144:ef7eb2e8f9f7 287 (+) Suspend the time base source interrupt
<> 144:ef7eb2e8f9f7 288 (+) Resume the time base source interrupt
<> 144:ef7eb2e8f9f7 289 (+) Get the HAL API driver version
<> 144:ef7eb2e8f9f7 290 (+) Get the device identifier
<> 144:ef7eb2e8f9f7 291 (+) Get the device revision identifier
AnnaBridge 165:e614a9f1c9e2 292 (+) Enable/Disable Debug module during SLEEP mode
<> 144:ef7eb2e8f9f7 293 (+) Enable/Disable Debug module during STOP mode
<> 144:ef7eb2e8f9f7 294 (+) Enable/Disable Debug module during STANDBY mode
AnnaBridge 165:e614a9f1c9e2 295
<> 144:ef7eb2e8f9f7 296 @endverbatim
<> 144:ef7eb2e8f9f7 297 * @{
<> 144:ef7eb2e8f9f7 298 */
<> 144:ef7eb2e8f9f7 299
<> 144:ef7eb2e8f9f7 300 /**
<> 144:ef7eb2e8f9f7 301 * @brief This function is called to increment a global variable "uwTick"
<> 144:ef7eb2e8f9f7 302 * used as application time base.
<> 144:ef7eb2e8f9f7 303 * @note In the default implementation, this variable is incremented each 1ms
AnnaBridge 187:0387e8f68319 304 * in SysTick ISR.
AnnaBridge 187:0387e8f68319 305 * @note This function is declared as __weak to be overwritten in case of other
<> 144:ef7eb2e8f9f7 306 * implementations in user file.
<> 144:ef7eb2e8f9f7 307 * @retval None
<> 144:ef7eb2e8f9f7 308 */
<> 144:ef7eb2e8f9f7 309 __weak void HAL_IncTick(void)
<> 144:ef7eb2e8f9f7 310 {
AnnaBridge 187:0387e8f68319 311 uwTick += uwTickFreq;
<> 144:ef7eb2e8f9f7 312 }
<> 144:ef7eb2e8f9f7 313
<> 144:ef7eb2e8f9f7 314 /**
<> 144:ef7eb2e8f9f7 315 * @brief Provides a tick value in millisecond.
AnnaBridge 187:0387e8f68319 316 * @note This function is declared as __weak to be overwritten in case of other
<> 144:ef7eb2e8f9f7 317 * implementations in user file.
<> 144:ef7eb2e8f9f7 318 * @retval tick value
<> 144:ef7eb2e8f9f7 319 */
<> 144:ef7eb2e8f9f7 320 __weak uint32_t HAL_GetTick(void)
<> 144:ef7eb2e8f9f7 321 {
<> 144:ef7eb2e8f9f7 322 return uwTick;
<> 144:ef7eb2e8f9f7 323 }
<> 144:ef7eb2e8f9f7 324
<> 144:ef7eb2e8f9f7 325 /**
AnnaBridge 187:0387e8f68319 326 * @brief This function returns a tick priority.
AnnaBridge 187:0387e8f68319 327 * @retval tick priority
AnnaBridge 187:0387e8f68319 328 */
AnnaBridge 187:0387e8f68319 329 uint32_t HAL_GetTickPrio(void)
AnnaBridge 187:0387e8f68319 330 {
AnnaBridge 187:0387e8f68319 331 return uwTickPrio;
AnnaBridge 187:0387e8f68319 332 }
AnnaBridge 187:0387e8f68319 333
AnnaBridge 187:0387e8f68319 334 /**
AnnaBridge 187:0387e8f68319 335 * @brief Set new tick Freq.
AnnaBridge 187:0387e8f68319 336 * @retval Status
AnnaBridge 187:0387e8f68319 337 */
AnnaBridge 187:0387e8f68319 338 HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq)
AnnaBridge 187:0387e8f68319 339 {
AnnaBridge 187:0387e8f68319 340 HAL_StatusTypeDef status = HAL_OK;
AnnaBridge 187:0387e8f68319 341 assert_param(IS_TICKFREQ(Freq));
AnnaBridge 187:0387e8f68319 342
AnnaBridge 187:0387e8f68319 343 if (uwTickFreq != Freq)
AnnaBridge 187:0387e8f68319 344 {
AnnaBridge 187:0387e8f68319 345 uwTickFreq = Freq;
AnnaBridge 187:0387e8f68319 346
AnnaBridge 187:0387e8f68319 347 /* Apply the new tick Freq */
AnnaBridge 187:0387e8f68319 348 status = HAL_InitTick(uwTickPrio);
AnnaBridge 187:0387e8f68319 349 }
AnnaBridge 187:0387e8f68319 350
AnnaBridge 187:0387e8f68319 351 return status;
AnnaBridge 187:0387e8f68319 352 }
AnnaBridge 187:0387e8f68319 353
AnnaBridge 187:0387e8f68319 354 /**
AnnaBridge 187:0387e8f68319 355 * @brief Return tick frequency.
AnnaBridge 187:0387e8f68319 356 * @retval tick period in Hz
AnnaBridge 187:0387e8f68319 357 */
AnnaBridge 187:0387e8f68319 358 HAL_TickFreqTypeDef HAL_GetTickFreq(void)
AnnaBridge 187:0387e8f68319 359 {
AnnaBridge 187:0387e8f68319 360 return uwTickFreq;
AnnaBridge 187:0387e8f68319 361 }
AnnaBridge 187:0387e8f68319 362
AnnaBridge 187:0387e8f68319 363 /**
AnnaBridge 187:0387e8f68319 364 * @brief This function provides minimum delay (in milliseconds) based
<> 144:ef7eb2e8f9f7 365 * on variable incremented.
<> 144:ef7eb2e8f9f7 366 * @note In the default implementation , SysTick timer is the source of time base.
<> 144:ef7eb2e8f9f7 367 * It is used to generate interrupts at regular time intervals where uwTick
<> 144:ef7eb2e8f9f7 368 * is incremented.
AnnaBridge 165:e614a9f1c9e2 369 * @note This function is declared as __weak to be overwritten in case of other
<> 144:ef7eb2e8f9f7 370 * implementations in user file.
AnnaBridge 187:0387e8f68319 371 * @param Delay specifies the delay time length, in milliseconds.
<> 144:ef7eb2e8f9f7 372 * @retval None
<> 144:ef7eb2e8f9f7 373 */
AnnaBridge 187:0387e8f68319 374 __weak void HAL_Delay(uint32_t Delay)
<> 144:ef7eb2e8f9f7 375 {
AnnaBridge 165:e614a9f1c9e2 376 uint32_t tickstart = HAL_GetTick();
AnnaBridge 165:e614a9f1c9e2 377 uint32_t wait = Delay;
AnnaBridge 187:0387e8f68319 378
AnnaBridge 187:0387e8f68319 379 /* Add a freq to guarantee minimum wait */
AnnaBridge 165:e614a9f1c9e2 380 if (wait < HAL_MAX_DELAY)
AnnaBridge 165:e614a9f1c9e2 381 {
AnnaBridge 187:0387e8f68319 382 wait += (uint32_t)(uwTickFreq);
AnnaBridge 165:e614a9f1c9e2 383 }
AnnaBridge 187:0387e8f68319 384
AnnaBridge 187:0387e8f68319 385 while ((HAL_GetTick() - tickstart) < wait)
<> 144:ef7eb2e8f9f7 386 {
<> 144:ef7eb2e8f9f7 387 }
<> 144:ef7eb2e8f9f7 388 }
<> 144:ef7eb2e8f9f7 389
<> 144:ef7eb2e8f9f7 390 /**
<> 144:ef7eb2e8f9f7 391 * @brief Suspend Tick increment.
<> 144:ef7eb2e8f9f7 392 * @note In the default implementation , SysTick timer is the source of time base. It is
<> 144:ef7eb2e8f9f7 393 * used to generate interrupts at regular time intervals. Once HAL_SuspendTick()
AnnaBridge 187:0387e8f68319 394 * is called, the SysTick interrupt will be disabled and so Tick increment
<> 144:ef7eb2e8f9f7 395 * is suspended.
<> 144:ef7eb2e8f9f7 396 * @note This function is declared as __weak to be overwritten in case of other
<> 144:ef7eb2e8f9f7 397 * implementations in user file.
<> 144:ef7eb2e8f9f7 398 * @retval None
<> 144:ef7eb2e8f9f7 399 */
<> 144:ef7eb2e8f9f7 400 __weak void HAL_SuspendTick(void)
<> 144:ef7eb2e8f9f7 401 {
<> 144:ef7eb2e8f9f7 402 /* Disable SysTick Interrupt */
AnnaBridge 187:0387e8f68319 403 CLEAR_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);
<> 144:ef7eb2e8f9f7 404 }
<> 144:ef7eb2e8f9f7 405
<> 144:ef7eb2e8f9f7 406 /**
<> 144:ef7eb2e8f9f7 407 * @brief Resume Tick increment.
<> 144:ef7eb2e8f9f7 408 * @note In the default implementation , SysTick timer is the source of time base. It is
<> 144:ef7eb2e8f9f7 409 * used to generate interrupts at regular time intervals. Once HAL_ResumeTick()
AnnaBridge 187:0387e8f68319 410 * is called, the SysTick interrupt will be enabled and so Tick increment
<> 144:ef7eb2e8f9f7 411 * is resumed.
AnnaBridge 165:e614a9f1c9e2 412 * @note This function is declared as __weak to be overwritten in case of other
<> 144:ef7eb2e8f9f7 413 * implementations in user file.
<> 144:ef7eb2e8f9f7 414 * @retval None
<> 144:ef7eb2e8f9f7 415 */
<> 144:ef7eb2e8f9f7 416 __weak void HAL_ResumeTick(void)
<> 144:ef7eb2e8f9f7 417 {
<> 144:ef7eb2e8f9f7 418 /* Enable SysTick Interrupt */
AnnaBridge 187:0387e8f68319 419 SET_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);
<> 144:ef7eb2e8f9f7 420 }
<> 144:ef7eb2e8f9f7 421
<> 144:ef7eb2e8f9f7 422 /**
AnnaBridge 165:e614a9f1c9e2 423 * @brief Returns the HAL revision
AnnaBridge 187:0387e8f68319 424 * @retval version 0xXYZR (8bits for each decimal, R for RC)
<> 144:ef7eb2e8f9f7 425 */
<> 144:ef7eb2e8f9f7 426 uint32_t HAL_GetHalVersion(void)
<> 144:ef7eb2e8f9f7 427 {
AnnaBridge 187:0387e8f68319 428 return __STM32F1xx_HAL_VERSION;
<> 144:ef7eb2e8f9f7 429 }
<> 144:ef7eb2e8f9f7 430
<> 144:ef7eb2e8f9f7 431 /**
<> 144:ef7eb2e8f9f7 432 * @brief Returns the device revision identifier.
<> 144:ef7eb2e8f9f7 433 * Note: On devices STM32F10xx8 and STM32F10xxB,
<> 144:ef7eb2e8f9f7 434 * STM32F101xC/D/E and STM32F103xC/D/E,
<> 144:ef7eb2e8f9f7 435 * STM32F101xF/G and STM32F103xF/G
<> 144:ef7eb2e8f9f7 436 * STM32F10xx4 and STM32F10xx6
AnnaBridge 187:0387e8f68319 437 * Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in
<> 144:ef7eb2e8f9f7 438 * debug mode (not accessible by the user software in normal mode).
<> 144:ef7eb2e8f9f7 439 * Refer to errata sheet of these devices for more details.
<> 144:ef7eb2e8f9f7 440 * @retval Device revision identifier
<> 144:ef7eb2e8f9f7 441 */
<> 144:ef7eb2e8f9f7 442 uint32_t HAL_GetREVID(void)
<> 144:ef7eb2e8f9f7 443 {
AnnaBridge 187:0387e8f68319 444 return ((DBGMCU->IDCODE) >> DBGMCU_IDCODE_REV_ID_Pos);
<> 144:ef7eb2e8f9f7 445 }
<> 144:ef7eb2e8f9f7 446
<> 144:ef7eb2e8f9f7 447 /**
<> 144:ef7eb2e8f9f7 448 * @brief Returns the device identifier.
<> 144:ef7eb2e8f9f7 449 * Note: On devices STM32F10xx8 and STM32F10xxB,
<> 144:ef7eb2e8f9f7 450 * STM32F101xC/D/E and STM32F103xC/D/E,
<> 144:ef7eb2e8f9f7 451 * STM32F101xF/G and STM32F103xF/G
<> 144:ef7eb2e8f9f7 452 * STM32F10xx4 and STM32F10xx6
AnnaBridge 187:0387e8f68319 453 * Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in
<> 144:ef7eb2e8f9f7 454 * debug mode (not accessible by the user software in normal mode).
<> 144:ef7eb2e8f9f7 455 * Refer to errata sheet of these devices for more details.
<> 144:ef7eb2e8f9f7 456 * @retval Device identifier
<> 144:ef7eb2e8f9f7 457 */
<> 144:ef7eb2e8f9f7 458 uint32_t HAL_GetDEVID(void)
<> 144:ef7eb2e8f9f7 459 {
AnnaBridge 187:0387e8f68319 460 return ((DBGMCU->IDCODE) & IDCODE_DEVID_MASK);
<> 144:ef7eb2e8f9f7 461 }
<> 144:ef7eb2e8f9f7 462
<> 144:ef7eb2e8f9f7 463 /**
<> 144:ef7eb2e8f9f7 464 * @brief Enable the Debug Module during SLEEP mode
<> 144:ef7eb2e8f9f7 465 * @retval None
<> 144:ef7eb2e8f9f7 466 */
<> 144:ef7eb2e8f9f7 467 void HAL_DBGMCU_EnableDBGSleepMode(void)
<> 144:ef7eb2e8f9f7 468 {
<> 144:ef7eb2e8f9f7 469 SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP);
<> 144:ef7eb2e8f9f7 470 }
<> 144:ef7eb2e8f9f7 471
<> 144:ef7eb2e8f9f7 472 /**
<> 144:ef7eb2e8f9f7 473 * @brief Disable the Debug Module during SLEEP mode
<> 144:ef7eb2e8f9f7 474 * Note: On devices STM32F10xx8 and STM32F10xxB,
<> 144:ef7eb2e8f9f7 475 * STM32F101xC/D/E and STM32F103xC/D/E,
<> 144:ef7eb2e8f9f7 476 * STM32F101xF/G and STM32F103xF/G
<> 144:ef7eb2e8f9f7 477 * STM32F10xx4 and STM32F10xx6
AnnaBridge 187:0387e8f68319 478 * Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in
<> 144:ef7eb2e8f9f7 479 * debug mode (not accessible by the user software in normal mode).
<> 144:ef7eb2e8f9f7 480 * Refer to errata sheet of these devices for more details.
<> 144:ef7eb2e8f9f7 481 * @retval None
<> 144:ef7eb2e8f9f7 482 */
<> 144:ef7eb2e8f9f7 483 void HAL_DBGMCU_DisableDBGSleepMode(void)
<> 144:ef7eb2e8f9f7 484 {
<> 144:ef7eb2e8f9f7 485 CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP);
<> 144:ef7eb2e8f9f7 486 }
<> 144:ef7eb2e8f9f7 487
<> 144:ef7eb2e8f9f7 488 /**
<> 144:ef7eb2e8f9f7 489 * @brief Enable the Debug Module during STOP mode
<> 144:ef7eb2e8f9f7 490 * Note: On devices STM32F10xx8 and STM32F10xxB,
<> 144:ef7eb2e8f9f7 491 * STM32F101xC/D/E and STM32F103xC/D/E,
<> 144:ef7eb2e8f9f7 492 * STM32F101xF/G and STM32F103xF/G
<> 144:ef7eb2e8f9f7 493 * STM32F10xx4 and STM32F10xx6
AnnaBridge 187:0387e8f68319 494 * Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in
<> 144:ef7eb2e8f9f7 495 * debug mode (not accessible by the user software in normal mode).
<> 144:ef7eb2e8f9f7 496 * Refer to errata sheet of these devices for more details.
<> 144:ef7eb2e8f9f7 497 * Note: On all STM32F1 devices:
AnnaBridge 187:0387e8f68319 498 * If the system tick timer interrupt is enabled during the Stop mode
<> 144:ef7eb2e8f9f7 499 * debug (DBG_STOP bit set in the DBGMCU_CR register ), it will wakeup
<> 144:ef7eb2e8f9f7 500 * the system from Stop mode.
AnnaBridge 187:0387e8f68319 501 * Workaround: To debug the Stop mode, disable the system tick timer
<> 144:ef7eb2e8f9f7 502 * interrupt.
<> 144:ef7eb2e8f9f7 503 * Refer to errata sheet of these devices for more details.
<> 144:ef7eb2e8f9f7 504 * Note: On all STM32F1 devices:
AnnaBridge 187:0387e8f68319 505 * If the system tick timer interrupt is enabled during the Stop mode
<> 144:ef7eb2e8f9f7 506 * debug (DBG_STOP bit set in the DBGMCU_CR register ), it will wakeup
<> 144:ef7eb2e8f9f7 507 * the system from Stop mode.
<> 144:ef7eb2e8f9f7 508 * Workaround: To debug the Stop mode, disable the system tick timer
<> 144:ef7eb2e8f9f7 509 * interrupt.
<> 144:ef7eb2e8f9f7 510 * Refer to errata sheet of these devices for more details.
<> 144:ef7eb2e8f9f7 511 * @retval None
<> 144:ef7eb2e8f9f7 512 */
<> 144:ef7eb2e8f9f7 513 void HAL_DBGMCU_EnableDBGStopMode(void)
<> 144:ef7eb2e8f9f7 514 {
<> 144:ef7eb2e8f9f7 515 SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP);
<> 144:ef7eb2e8f9f7 516 }
<> 144:ef7eb2e8f9f7 517
<> 144:ef7eb2e8f9f7 518 /**
<> 144:ef7eb2e8f9f7 519 * @brief Disable the Debug Module during STOP mode
<> 144:ef7eb2e8f9f7 520 * Note: On devices STM32F10xx8 and STM32F10xxB,
<> 144:ef7eb2e8f9f7 521 * STM32F101xC/D/E and STM32F103xC/D/E,
<> 144:ef7eb2e8f9f7 522 * STM32F101xF/G and STM32F103xF/G
<> 144:ef7eb2e8f9f7 523 * STM32F10xx4 and STM32F10xx6
AnnaBridge 187:0387e8f68319 524 * Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in
<> 144:ef7eb2e8f9f7 525 * debug mode (not accessible by the user software in normal mode).
<> 144:ef7eb2e8f9f7 526 * Refer to errata sheet of these devices for more details.
<> 144:ef7eb2e8f9f7 527 * @retval None
<> 144:ef7eb2e8f9f7 528 */
<> 144:ef7eb2e8f9f7 529 void HAL_DBGMCU_DisableDBGStopMode(void)
<> 144:ef7eb2e8f9f7 530 {
<> 144:ef7eb2e8f9f7 531 CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP);
<> 144:ef7eb2e8f9f7 532 }
<> 144:ef7eb2e8f9f7 533
<> 144:ef7eb2e8f9f7 534 /**
<> 144:ef7eb2e8f9f7 535 * @brief Enable the Debug Module during STANDBY mode
<> 144:ef7eb2e8f9f7 536 * Note: On devices STM32F10xx8 and STM32F10xxB,
<> 144:ef7eb2e8f9f7 537 * STM32F101xC/D/E and STM32F103xC/D/E,
<> 144:ef7eb2e8f9f7 538 * STM32F101xF/G and STM32F103xF/G
<> 144:ef7eb2e8f9f7 539 * STM32F10xx4 and STM32F10xx6
AnnaBridge 187:0387e8f68319 540 * Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in
<> 144:ef7eb2e8f9f7 541 * debug mode (not accessible by the user software in normal mode).
<> 144:ef7eb2e8f9f7 542 * Refer to errata sheet of these devices for more details.
<> 144:ef7eb2e8f9f7 543 * @retval None
<> 144:ef7eb2e8f9f7 544 */
<> 144:ef7eb2e8f9f7 545 void HAL_DBGMCU_EnableDBGStandbyMode(void)
<> 144:ef7eb2e8f9f7 546 {
<> 144:ef7eb2e8f9f7 547 SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY);
<> 144:ef7eb2e8f9f7 548 }
<> 144:ef7eb2e8f9f7 549
<> 144:ef7eb2e8f9f7 550 /**
<> 144:ef7eb2e8f9f7 551 * @brief Disable the Debug Module during STANDBY mode
<> 144:ef7eb2e8f9f7 552 * Note: On devices STM32F10xx8 and STM32F10xxB,
<> 144:ef7eb2e8f9f7 553 * STM32F101xC/D/E and STM32F103xC/D/E,
<> 144:ef7eb2e8f9f7 554 * STM32F101xF/G and STM32F103xF/G
<> 144:ef7eb2e8f9f7 555 * STM32F10xx4 and STM32F10xx6
AnnaBridge 187:0387e8f68319 556 * Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in
<> 144:ef7eb2e8f9f7 557 * debug mode (not accessible by the user software in normal mode).
<> 144:ef7eb2e8f9f7 558 * Refer to errata sheet of these devices for more details.
<> 144:ef7eb2e8f9f7 559 * @retval None
<> 144:ef7eb2e8f9f7 560 */
<> 144:ef7eb2e8f9f7 561 void HAL_DBGMCU_DisableDBGStandbyMode(void)
<> 144:ef7eb2e8f9f7 562 {
<> 144:ef7eb2e8f9f7 563 CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY);
<> 144:ef7eb2e8f9f7 564 }
<> 144:ef7eb2e8f9f7 565
<> 144:ef7eb2e8f9f7 566 /**
AnnaBridge 165:e614a9f1c9e2 567 * @brief Return the unique device identifier (UID based on 96 bits)
AnnaBridge 187:0387e8f68319 568 * @param UID pointer to 3 words array.
AnnaBridge 165:e614a9f1c9e2 569 * @retval Device identifier
AnnaBridge 165:e614a9f1c9e2 570 */
AnnaBridge 165:e614a9f1c9e2 571 void HAL_GetUID(uint32_t *UID)
AnnaBridge 165:e614a9f1c9e2 572 {
AnnaBridge 165:e614a9f1c9e2 573 UID[0] = (uint32_t)(READ_REG(*((uint32_t *)UID_BASE)));
AnnaBridge 165:e614a9f1c9e2 574 UID[1] = (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE + 4U))));
AnnaBridge 165:e614a9f1c9e2 575 UID[2] = (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE + 8U))));
AnnaBridge 165:e614a9f1c9e2 576 }
AnnaBridge 165:e614a9f1c9e2 577
AnnaBridge 165:e614a9f1c9e2 578 /**
<> 144:ef7eb2e8f9f7 579 * @}
<> 144:ef7eb2e8f9f7 580 */
<> 144:ef7eb2e8f9f7 581
<> 144:ef7eb2e8f9f7 582 /**
<> 144:ef7eb2e8f9f7 583 * @}
<> 144:ef7eb2e8f9f7 584 */
<> 144:ef7eb2e8f9f7 585
<> 144:ef7eb2e8f9f7 586 #endif /* HAL_MODULE_ENABLED */
<> 144:ef7eb2e8f9f7 587 /**
<> 144:ef7eb2e8f9f7 588 * @}
<> 144:ef7eb2e8f9f7 589 */
<> 144:ef7eb2e8f9f7 590
<> 144:ef7eb2e8f9f7 591 /**
<> 144:ef7eb2e8f9f7 592 * @}
<> 144:ef7eb2e8f9f7 593 */
<> 144:ef7eb2e8f9f7 594
<> 144:ef7eb2e8f9f7 595 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/