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:
167:e84263d55307
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 167:e84263d55307 1 /**
AnnaBridge 167:e84263d55307 2 ******************************************************************************
AnnaBridge 167:e84263d55307 3 * @file stm32f2xx_ll_utils.h
AnnaBridge 167:e84263d55307 4 * @author MCD Application Team
AnnaBridge 167:e84263d55307 5 * @version V1.2.1
AnnaBridge 167:e84263d55307 6 * @date 14-April-2017
AnnaBridge 167:e84263d55307 7 * @brief Header file of UTILS LL module.
AnnaBridge 167:e84263d55307 8 @verbatim
AnnaBridge 167:e84263d55307 9 ==============================================================================
AnnaBridge 167:e84263d55307 10 ##### How to use this driver #####
AnnaBridge 167:e84263d55307 11 ==============================================================================
AnnaBridge 167:e84263d55307 12 [..]
AnnaBridge 167:e84263d55307 13 The LL UTILS driver contains a set of generic APIs that can be
AnnaBridge 167:e84263d55307 14 used by user:
AnnaBridge 167:e84263d55307 15 (+) Device electronic signature
AnnaBridge 167:e84263d55307 16 (+) Timing functions
AnnaBridge 167:e84263d55307 17 (+) PLL configuration functions
AnnaBridge 167:e84263d55307 18
AnnaBridge 167:e84263d55307 19 @endverbatim
AnnaBridge 167:e84263d55307 20 ******************************************************************************
AnnaBridge 167:e84263d55307 21 * @attention
AnnaBridge 167:e84263d55307 22 *
AnnaBridge 167:e84263d55307 23 * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
AnnaBridge 167:e84263d55307 24 *
AnnaBridge 167:e84263d55307 25 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 167:e84263d55307 26 * are permitted provided that the following conditions are met:
AnnaBridge 167:e84263d55307 27 * 1. Redistributions of source code must retain the above copyright notice,
AnnaBridge 167:e84263d55307 28 * this list of conditions and the following disclaimer.
AnnaBridge 167:e84263d55307 29 * 2. Redistributions in binary form must reproduce the above copyright notice,
AnnaBridge 167:e84263d55307 30 * this list of conditions and the following disclaimer in the documentation
AnnaBridge 167:e84263d55307 31 * and/or other materials provided with the distribution.
AnnaBridge 167:e84263d55307 32 * 3. Neither the name of STMicroelectronics nor the names of its contributors
AnnaBridge 167:e84263d55307 33 * may be used to endorse or promote products derived from this software
AnnaBridge 167:e84263d55307 34 * without specific prior written permission.
AnnaBridge 167:e84263d55307 35 *
AnnaBridge 167:e84263d55307 36 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AnnaBridge 167:e84263d55307 37 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
AnnaBridge 167:e84263d55307 38 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 167:e84263d55307 39 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
AnnaBridge 167:e84263d55307 40 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
AnnaBridge 167:e84263d55307 41 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
AnnaBridge 167:e84263d55307 42 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
AnnaBridge 167:e84263d55307 43 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
AnnaBridge 167:e84263d55307 44 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
AnnaBridge 167:e84263d55307 45 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 167:e84263d55307 46 *
AnnaBridge 167:e84263d55307 47 ******************************************************************************
AnnaBridge 167:e84263d55307 48 */
AnnaBridge 167:e84263d55307 49
AnnaBridge 167:e84263d55307 50 /* Define to prevent recursive inclusion -------------------------------------*/
AnnaBridge 167:e84263d55307 51 #ifndef __STM32F2xx_LL_UTILS_H
AnnaBridge 167:e84263d55307 52 #define __STM32F2xx_LL_UTILS_H
AnnaBridge 167:e84263d55307 53
AnnaBridge 167:e84263d55307 54 #ifdef __cplusplus
AnnaBridge 167:e84263d55307 55 extern "C" {
AnnaBridge 167:e84263d55307 56 #endif
AnnaBridge 167:e84263d55307 57
AnnaBridge 167:e84263d55307 58 /* Includes ------------------------------------------------------------------*/
AnnaBridge 167:e84263d55307 59 #include "stm32f2xx.h"
AnnaBridge 167:e84263d55307 60
AnnaBridge 167:e84263d55307 61 /** @addtogroup STM32F2xx_LL_Driver
AnnaBridge 167:e84263d55307 62 * @{
AnnaBridge 167:e84263d55307 63 */
AnnaBridge 167:e84263d55307 64
AnnaBridge 167:e84263d55307 65 /** @defgroup UTILS_LL UTILS
AnnaBridge 167:e84263d55307 66 * @{
AnnaBridge 167:e84263d55307 67 */
AnnaBridge 167:e84263d55307 68
AnnaBridge 167:e84263d55307 69 /* Private types -------------------------------------------------------------*/
AnnaBridge 167:e84263d55307 70 /* Private variables ---------------------------------------------------------*/
AnnaBridge 167:e84263d55307 71
AnnaBridge 167:e84263d55307 72 /* Private constants ---------------------------------------------------------*/
AnnaBridge 167:e84263d55307 73 /** @defgroup UTILS_LL_Private_Constants UTILS Private Constants
AnnaBridge 167:e84263d55307 74 * @{
AnnaBridge 167:e84263d55307 75 */
AnnaBridge 167:e84263d55307 76
AnnaBridge 167:e84263d55307 77 /* Max delay can be used in LL_mDelay */
AnnaBridge 167:e84263d55307 78 #define LL_MAX_DELAY 0xFFFFFFFFU
AnnaBridge 167:e84263d55307 79
AnnaBridge 167:e84263d55307 80 /**
AnnaBridge 167:e84263d55307 81 * @brief Unique device ID register base address
AnnaBridge 167:e84263d55307 82 */
AnnaBridge 167:e84263d55307 83 #define UID_BASE_ADDRESS UID_BASE
AnnaBridge 167:e84263d55307 84
AnnaBridge 167:e84263d55307 85 /**
AnnaBridge 167:e84263d55307 86 * @brief Flash size data register base address
AnnaBridge 167:e84263d55307 87 */
AnnaBridge 167:e84263d55307 88 #define FLASHSIZE_BASE_ADDRESS FLASHSIZE_BASE
AnnaBridge 167:e84263d55307 89
AnnaBridge 167:e84263d55307 90 /**
AnnaBridge 167:e84263d55307 91 * @}
AnnaBridge 167:e84263d55307 92 */
AnnaBridge 167:e84263d55307 93
AnnaBridge 167:e84263d55307 94 /* Private macros ------------------------------------------------------------*/
AnnaBridge 167:e84263d55307 95 /** @defgroup UTILS_LL_Private_Macros UTILS Private Macros
AnnaBridge 167:e84263d55307 96 * @{
AnnaBridge 167:e84263d55307 97 */
AnnaBridge 167:e84263d55307 98 /**
AnnaBridge 167:e84263d55307 99 * @}
AnnaBridge 167:e84263d55307 100 */
AnnaBridge 167:e84263d55307 101 /* Exported types ------------------------------------------------------------*/
AnnaBridge 167:e84263d55307 102 /** @defgroup UTILS_LL_ES_INIT UTILS Exported structures
AnnaBridge 167:e84263d55307 103 * @{
AnnaBridge 167:e84263d55307 104 */
AnnaBridge 167:e84263d55307 105 /**
AnnaBridge 167:e84263d55307 106 * @brief UTILS PLL structure definition
AnnaBridge 167:e84263d55307 107 */
AnnaBridge 167:e84263d55307 108 typedef struct
AnnaBridge 167:e84263d55307 109 {
AnnaBridge 167:e84263d55307 110 uint32_t PLLM; /*!< Division factor for PLL VCO input clock.
AnnaBridge 167:e84263d55307 111 This parameter can be a value of @ref RCC_LL_EC_PLLM_DIV
AnnaBridge 167:e84263d55307 112
AnnaBridge 167:e84263d55307 113 This feature can be modified afterwards using unitary function
AnnaBridge 167:e84263d55307 114 @ref LL_RCC_PLL_ConfigDomain_SYS(). */
AnnaBridge 167:e84263d55307 115
AnnaBridge 167:e84263d55307 116 uint32_t PLLN; /*!< Multiplication factor for PLL VCO output clock.
AnnaBridge 167:e84263d55307 117 This parameter must be a number between Min_Data = 8 and Max_Data = 86
AnnaBridge 167:e84263d55307 118
AnnaBridge 167:e84263d55307 119 This feature can be modified afterwards using unitary function
AnnaBridge 167:e84263d55307 120 @ref LL_RCC_PLL_ConfigDomain_SYS(). */
AnnaBridge 167:e84263d55307 121
AnnaBridge 167:e84263d55307 122 uint32_t PLLP; /*!< Division for the main system clock.
AnnaBridge 167:e84263d55307 123 This parameter can be a value of @ref RCC_LL_EC_PLLP_DIV
AnnaBridge 167:e84263d55307 124
AnnaBridge 167:e84263d55307 125 This feature can be modified afterwards using unitary function
AnnaBridge 167:e84263d55307 126 @ref LL_RCC_PLL_ConfigDomain_SYS(). */
AnnaBridge 167:e84263d55307 127 } LL_UTILS_PLLInitTypeDef;
AnnaBridge 167:e84263d55307 128
AnnaBridge 167:e84263d55307 129 /**
AnnaBridge 167:e84263d55307 130 * @brief UTILS System, AHB and APB buses clock configuration structure definition
AnnaBridge 167:e84263d55307 131 */
AnnaBridge 167:e84263d55307 132 typedef struct
AnnaBridge 167:e84263d55307 133 {
AnnaBridge 167:e84263d55307 134 uint32_t AHBCLKDivider; /*!< The AHB clock (HCLK) divider. This clock is derived from the system clock (SYSCLK).
AnnaBridge 167:e84263d55307 135 This parameter can be a value of @ref RCC_LL_EC_SYSCLK_DIV
AnnaBridge 167:e84263d55307 136
AnnaBridge 167:e84263d55307 137 This feature can be modified afterwards using unitary function
AnnaBridge 167:e84263d55307 138 @ref LL_RCC_SetAHBPrescaler(). */
AnnaBridge 167:e84263d55307 139
AnnaBridge 167:e84263d55307 140 uint32_t APB1CLKDivider; /*!< The APB1 clock (PCLK1) divider. This clock is derived from the AHB clock (HCLK).
AnnaBridge 167:e84263d55307 141 This parameter can be a value of @ref RCC_LL_EC_APB1_DIV
AnnaBridge 167:e84263d55307 142
AnnaBridge 167:e84263d55307 143 This feature can be modified afterwards using unitary function
AnnaBridge 167:e84263d55307 144 @ref LL_RCC_SetAPB1Prescaler(). */
AnnaBridge 167:e84263d55307 145
AnnaBridge 167:e84263d55307 146 uint32_t APB2CLKDivider; /*!< The APB2 clock (PCLK2) divider. This clock is derived from the AHB clock (HCLK).
AnnaBridge 167:e84263d55307 147 This parameter can be a value of @ref RCC_LL_EC_APB2_DIV
AnnaBridge 167:e84263d55307 148
AnnaBridge 167:e84263d55307 149 This feature can be modified afterwards using unitary function
AnnaBridge 167:e84263d55307 150 @ref LL_RCC_SetAPB2Prescaler(). */
AnnaBridge 167:e84263d55307 151
AnnaBridge 167:e84263d55307 152 } LL_UTILS_ClkInitTypeDef;
AnnaBridge 167:e84263d55307 153
AnnaBridge 167:e84263d55307 154 /**
AnnaBridge 167:e84263d55307 155 * @}
AnnaBridge 167:e84263d55307 156 */
AnnaBridge 167:e84263d55307 157
AnnaBridge 167:e84263d55307 158 /* Exported constants --------------------------------------------------------*/
AnnaBridge 167:e84263d55307 159 /** @defgroup UTILS_LL_Exported_Constants UTILS Exported Constants
AnnaBridge 167:e84263d55307 160 * @{
AnnaBridge 167:e84263d55307 161 */
AnnaBridge 167:e84263d55307 162
AnnaBridge 167:e84263d55307 163 /** @defgroup UTILS_EC_HSE_BYPASS HSE Bypass activation
AnnaBridge 167:e84263d55307 164 * @{
AnnaBridge 167:e84263d55307 165 */
AnnaBridge 167:e84263d55307 166 #define LL_UTILS_HSEBYPASS_OFF 0x00000000U /*!< HSE Bypass is not enabled */
AnnaBridge 167:e84263d55307 167 #define LL_UTILS_HSEBYPASS_ON 0x00000001U /*!< HSE Bypass is enabled */
AnnaBridge 167:e84263d55307 168 /**
AnnaBridge 167:e84263d55307 169 * @}
AnnaBridge 167:e84263d55307 170 */
AnnaBridge 167:e84263d55307 171
AnnaBridge 167:e84263d55307 172 /**
AnnaBridge 167:e84263d55307 173 * @}
AnnaBridge 167:e84263d55307 174 */
AnnaBridge 167:e84263d55307 175
AnnaBridge 167:e84263d55307 176 /* Exported macro ------------------------------------------------------------*/
AnnaBridge 167:e84263d55307 177
AnnaBridge 167:e84263d55307 178 /* Exported functions --------------------------------------------------------*/
AnnaBridge 167:e84263d55307 179 /** @defgroup UTILS_LL_Exported_Functions UTILS Exported Functions
AnnaBridge 167:e84263d55307 180 * @{
AnnaBridge 167:e84263d55307 181 */
AnnaBridge 167:e84263d55307 182
AnnaBridge 167:e84263d55307 183 /** @defgroup UTILS_EF_DEVICE_ELECTRONIC_SIGNATURE DEVICE ELECTRONIC SIGNATURE
AnnaBridge 167:e84263d55307 184 * @{
AnnaBridge 167:e84263d55307 185 */
AnnaBridge 167:e84263d55307 186
AnnaBridge 167:e84263d55307 187 /**
AnnaBridge 167:e84263d55307 188 * @brief Get Word0 of the unique device identifier (UID based on 96 bits)
AnnaBridge 167:e84263d55307 189 * @retval UID[31:0]
AnnaBridge 167:e84263d55307 190 */
AnnaBridge 167:e84263d55307 191 __STATIC_INLINE uint32_t LL_GetUID_Word0(void)
AnnaBridge 167:e84263d55307 192 {
AnnaBridge 167:e84263d55307 193 return (uint32_t)(READ_REG(*((uint32_t *)UID_BASE_ADDRESS)));
AnnaBridge 167:e84263d55307 194 }
AnnaBridge 167:e84263d55307 195
AnnaBridge 167:e84263d55307 196 /**
AnnaBridge 167:e84263d55307 197 * @brief Get Word1 of the unique device identifier (UID based on 96 bits)
AnnaBridge 167:e84263d55307 198 * @retval UID[63:32]
AnnaBridge 167:e84263d55307 199 */
AnnaBridge 167:e84263d55307 200 __STATIC_INLINE uint32_t LL_GetUID_Word1(void)
AnnaBridge 167:e84263d55307 201 {
AnnaBridge 167:e84263d55307 202 return (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE_ADDRESS + 4U))));
AnnaBridge 167:e84263d55307 203 }
AnnaBridge 167:e84263d55307 204
AnnaBridge 167:e84263d55307 205 /**
AnnaBridge 167:e84263d55307 206 * @brief Get Word2 of the unique device identifier (UID based on 96 bits)
AnnaBridge 167:e84263d55307 207 * @retval UID[95:64]
AnnaBridge 167:e84263d55307 208 */
AnnaBridge 167:e84263d55307 209 __STATIC_INLINE uint32_t LL_GetUID_Word2(void)
AnnaBridge 167:e84263d55307 210 {
AnnaBridge 167:e84263d55307 211 return (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE_ADDRESS + 8U))));
AnnaBridge 167:e84263d55307 212 }
AnnaBridge 167:e84263d55307 213
AnnaBridge 167:e84263d55307 214 /**
AnnaBridge 167:e84263d55307 215 * @brief Get Flash memory size
AnnaBridge 167:e84263d55307 216 * @note This bitfield indicates the size of the device Flash memory expressed in
AnnaBridge 167:e84263d55307 217 * Kbytes. As an example, 0x040 corresponds to 64 Kbytes.
AnnaBridge 167:e84263d55307 218 * @retval FLASH_SIZE[15:0]: Flash memory size
AnnaBridge 167:e84263d55307 219 */
AnnaBridge 167:e84263d55307 220 __STATIC_INLINE uint32_t LL_GetFlashSize(void)
AnnaBridge 167:e84263d55307 221 {
AnnaBridge 167:e84263d55307 222 return (uint16_t)(READ_REG(*((uint32_t *)FLASHSIZE_BASE_ADDRESS)));
AnnaBridge 167:e84263d55307 223 }
AnnaBridge 167:e84263d55307 224
AnnaBridge 167:e84263d55307 225
AnnaBridge 167:e84263d55307 226 /**
AnnaBridge 167:e84263d55307 227 * @}
AnnaBridge 167:e84263d55307 228 */
AnnaBridge 167:e84263d55307 229
AnnaBridge 167:e84263d55307 230 /** @defgroup UTILS_LL_EF_DELAY DELAY
AnnaBridge 167:e84263d55307 231 * @{
AnnaBridge 167:e84263d55307 232 */
AnnaBridge 167:e84263d55307 233
AnnaBridge 167:e84263d55307 234 /**
AnnaBridge 167:e84263d55307 235 * @brief This function configures the Cortex-M SysTick source of the time base.
AnnaBridge 167:e84263d55307 236 * @param HCLKFrequency HCLK frequency in Hz (can be calculated thanks to RCC helper macro)
AnnaBridge 167:e84263d55307 237 * @note When a RTOS is used, it is recommended to avoid changing the SysTick
AnnaBridge 167:e84263d55307 238 * configuration by calling this function, for a delay use rather osDelay RTOS service.
AnnaBridge 167:e84263d55307 239 * @param Ticks Number of ticks
AnnaBridge 167:e84263d55307 240 * @retval None
AnnaBridge 167:e84263d55307 241 */
AnnaBridge 167:e84263d55307 242 __STATIC_INLINE void LL_InitTick(uint32_t HCLKFrequency, uint32_t Ticks)
AnnaBridge 167:e84263d55307 243 {
AnnaBridge 167:e84263d55307 244 /* Configure the SysTick to have interrupt in 1ms time base */
AnnaBridge 167:e84263d55307 245 SysTick->LOAD = (uint32_t)((HCLKFrequency / Ticks) - 1UL); /* set reload register */
AnnaBridge 167:e84263d55307 246 SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
AnnaBridge 167:e84263d55307 247 SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
AnnaBridge 167:e84263d55307 248 SysTick_CTRL_ENABLE_Msk; /* Enable the Systick Timer */
AnnaBridge 167:e84263d55307 249 }
AnnaBridge 167:e84263d55307 250
AnnaBridge 167:e84263d55307 251 void LL_Init1msTick(uint32_t HCLKFrequency);
AnnaBridge 167:e84263d55307 252 void LL_mDelay(uint32_t Delay);
AnnaBridge 167:e84263d55307 253
AnnaBridge 167:e84263d55307 254 /**
AnnaBridge 167:e84263d55307 255 * @}
AnnaBridge 167:e84263d55307 256 */
AnnaBridge 167:e84263d55307 257
AnnaBridge 167:e84263d55307 258 /** @defgroup UTILS_EF_SYSTEM SYSTEM
AnnaBridge 167:e84263d55307 259 * @{
AnnaBridge 167:e84263d55307 260 */
AnnaBridge 167:e84263d55307 261
AnnaBridge 167:e84263d55307 262 void LL_SetSystemCoreClock(uint32_t HCLKFrequency);
AnnaBridge 167:e84263d55307 263 ErrorStatus LL_PLL_ConfigSystemClock_HSI(LL_UTILS_PLLInitTypeDef *UTILS_PLLInitStruct,
AnnaBridge 167:e84263d55307 264 LL_UTILS_ClkInitTypeDef *UTILS_ClkInitStruct);
AnnaBridge 167:e84263d55307 265 ErrorStatus LL_PLL_ConfigSystemClock_HSE(uint32_t HSEFrequency, uint32_t HSEBypass,
AnnaBridge 167:e84263d55307 266 LL_UTILS_PLLInitTypeDef *UTILS_PLLInitStruct, LL_UTILS_ClkInitTypeDef *UTILS_ClkInitStruct);
AnnaBridge 167:e84263d55307 267
AnnaBridge 167:e84263d55307 268 /**
AnnaBridge 167:e84263d55307 269 * @}
AnnaBridge 167:e84263d55307 270 */
AnnaBridge 167:e84263d55307 271
AnnaBridge 167:e84263d55307 272 /**
AnnaBridge 167:e84263d55307 273 * @}
AnnaBridge 167:e84263d55307 274 */
AnnaBridge 167:e84263d55307 275
AnnaBridge 167:e84263d55307 276 /**
AnnaBridge 167:e84263d55307 277 * @}
AnnaBridge 167:e84263d55307 278 */
AnnaBridge 167:e84263d55307 279
AnnaBridge 167:e84263d55307 280 /**
AnnaBridge 167:e84263d55307 281 * @}
AnnaBridge 167:e84263d55307 282 */
AnnaBridge 167:e84263d55307 283
AnnaBridge 167:e84263d55307 284 #ifdef __cplusplus
AnnaBridge 167:e84263d55307 285 }
AnnaBridge 167:e84263d55307 286 #endif
AnnaBridge 167:e84263d55307 287
AnnaBridge 167:e84263d55307 288 #endif /* __STM32F2xx_LL_UTILS_H */
AnnaBridge 167:e84263d55307 289
AnnaBridge 167:e84263d55307 290 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/