STM32F103xB HAL User Manual
stm32f1xx_ll_rcc.h
Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32f1xx_ll_rcc.h
00004   * @author  MCD Application Team
00005   * @brief   Header file of RCC LL module.
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
00010   * All rights reserved.</center></h2>
00011   *
00012   * This software component is licensed by ST under BSD 3-Clause license,
00013   * the "License"; You may not use this file except in compliance with the
00014   * License. You may obtain a copy of the License at:
00015   *                        opensource.org/licenses/BSD-3-Clause
00016   *
00017   ******************************************************************************
00018   */
00019 
00020 /* Define to prevent recursive inclusion -------------------------------------*/
00021 #ifndef __STM32F1xx_LL_RCC_H
00022 #define __STM32F1xx_LL_RCC_H
00023 
00024 #ifdef __cplusplus
00025 extern "C" {
00026 #endif
00027 
00028 /* Includes ------------------------------------------------------------------*/
00029 #include "stm32f1xx.h"
00030 
00031 /** @addtogroup STM32F1xx_LL_Driver
00032   * @{
00033   */
00034 
00035 #if defined(RCC)
00036 
00037 /** @defgroup RCC_LL RCC
00038   * @{
00039   */
00040 
00041 /* Private types -------------------------------------------------------------*/
00042 /* Private variables ---------------------------------------------------------*/
00043 /* Private constants ---------------------------------------------------------*/
00044 /* Private macros ------------------------------------------------------------*/
00045 #if defined(USE_FULL_LL_DRIVER)
00046 /** @defgroup RCC_LL_Private_Macros RCC Private Macros
00047   * @{
00048   */
00049 /**
00050   * @}
00051   */
00052 #endif /*USE_FULL_LL_DRIVER*/
00053 /* Exported types ------------------------------------------------------------*/
00054 #if defined(USE_FULL_LL_DRIVER)
00055 /** @defgroup RCC_LL_Exported_Types RCC Exported Types
00056   * @{
00057   */
00058 
00059 /** @defgroup LL_ES_CLOCK_FREQ Clocks Frequency Structure
00060   * @{
00061   */
00062 
00063 /**
00064   * @brief  RCC Clocks Frequency Structure
00065   */
00066 typedef struct
00067 {
00068   uint32_t SYSCLK_Frequency;        /*!< SYSCLK clock frequency */
00069   uint32_t HCLK_Frequency;          /*!< HCLK clock frequency */
00070   uint32_t PCLK1_Frequency;         /*!< PCLK1 clock frequency */
00071   uint32_t PCLK2_Frequency;         /*!< PCLK2 clock frequency */
00072 } LL_RCC_ClocksTypeDef;
00073 
00074 /**
00075   * @}
00076   */
00077 
00078 /**
00079   * @}
00080   */
00081 #endif /* USE_FULL_LL_DRIVER */
00082 
00083 /* Exported constants --------------------------------------------------------*/
00084 /** @defgroup RCC_LL_Exported_Constants RCC Exported Constants
00085   * @{
00086   */
00087 
00088 /** @defgroup RCC_LL_EC_OSC_VALUES Oscillator Values adaptation
00089   * @brief    Defines used to adapt values of different oscillators
00090   * @note     These values could be modified in the user environment according to
00091   *           HW set-up.
00092   * @{
00093   */
00094 #if !defined  (HSE_VALUE)
00095 #define HSE_VALUE    8000000U  /*!< Value of the HSE oscillator in Hz */
00096 #endif /* HSE_VALUE */
00097 
00098 #if !defined  (HSI_VALUE)
00099 #define HSI_VALUE    8000000U  /*!< Value of the HSI oscillator in Hz */
00100 #endif /* HSI_VALUE */
00101 
00102 #if !defined  (LSE_VALUE)
00103 #define LSE_VALUE    32768U    /*!< Value of the LSE oscillator in Hz */
00104 #endif /* LSE_VALUE */
00105 
00106 #if !defined  (LSI_VALUE)
00107 #define LSI_VALUE    40000U    /*!< Value of the LSI oscillator in Hz */
00108 #endif /* LSI_VALUE */
00109 /**
00110   * @}
00111   */
00112 
00113 /** @defgroup RCC_LL_EC_CLEAR_FLAG Clear Flags Defines
00114   * @brief    Flags defines which can be used with LL_RCC_WriteReg function
00115   * @{
00116   */
00117 #define LL_RCC_CIR_LSIRDYC                RCC_CIR_LSIRDYC     /*!< LSI Ready Interrupt Clear */
00118 #define LL_RCC_CIR_LSERDYC                RCC_CIR_LSERDYC     /*!< LSE Ready Interrupt Clear */
00119 #define LL_RCC_CIR_HSIRDYC                RCC_CIR_HSIRDYC     /*!< HSI Ready Interrupt Clear */
00120 #define LL_RCC_CIR_HSERDYC                RCC_CIR_HSERDYC     /*!< HSE Ready Interrupt Clear */
00121 #define LL_RCC_CIR_PLLRDYC                RCC_CIR_PLLRDYC     /*!< PLL Ready Interrupt Clear */
00122 #define LL_RCC_CIR_PLL3RDYC               RCC_CIR_PLL3RDYC    /*!< PLL3(PLLI2S) Ready Interrupt Clear */
00123 #define LL_RCC_CIR_PLL2RDYC               RCC_CIR_PLL2RDYC    /*!< PLL2 Ready Interrupt Clear */
00124 #define LL_RCC_CIR_CSSC                   RCC_CIR_CSSC        /*!< Clock Security System Interrupt Clear */
00125 /**
00126   * @}
00127   */
00128 
00129 /** @defgroup RCC_LL_EC_GET_FLAG Get Flags Defines
00130   * @brief    Flags defines which can be used with LL_RCC_ReadReg function
00131   * @{
00132   */
00133 #define LL_RCC_CIR_LSIRDYF                RCC_CIR_LSIRDYF     /*!< LSI Ready Interrupt flag */
00134 #define LL_RCC_CIR_LSERDYF                RCC_CIR_LSERDYF     /*!< LSE Ready Interrupt flag */
00135 #define LL_RCC_CIR_HSIRDYF                RCC_CIR_HSIRDYF     /*!< HSI Ready Interrupt flag */
00136 #define LL_RCC_CIR_HSERDYF                RCC_CIR_HSERDYF     /*!< HSE Ready Interrupt flag */
00137 #define LL_RCC_CIR_PLLRDYF                RCC_CIR_PLLRDYF     /*!< PLL Ready Interrupt flag */
00138 #define LL_RCC_CIR_PLL3RDYF               RCC_CIR_PLL3RDYF    /*!< PLL3(PLLI2S) Ready Interrupt flag */
00139 #define LL_RCC_CIR_PLL2RDYF               RCC_CIR_PLL2RDYF    /*!< PLL2 Ready Interrupt flag */
00140 #define LL_RCC_CIR_CSSF                   RCC_CIR_CSSF        /*!< Clock Security System Interrupt flag */
00141 #define LL_RCC_CSR_PINRSTF                RCC_CSR_PINRSTF     /*!< PIN reset flag */
00142 #define LL_RCC_CSR_PORRSTF                RCC_CSR_PORRSTF     /*!< POR/PDR reset flag */
00143 #define LL_RCC_CSR_SFTRSTF                RCC_CSR_SFTRSTF     /*!< Software Reset flag */
00144 #define LL_RCC_CSR_IWDGRSTF               RCC_CSR_IWDGRSTF    /*!< Independent Watchdog reset flag */
00145 #define LL_RCC_CSR_WWDGRSTF               RCC_CSR_WWDGRSTF    /*!< Window watchdog reset flag */
00146 #define LL_RCC_CSR_LPWRRSTF               RCC_CSR_LPWRRSTF    /*!< Low-Power reset flag */
00147 /**
00148   * @}
00149   */
00150 
00151 /** @defgroup RCC_LL_EC_IT IT Defines
00152   * @brief    IT defines which can be used with LL_RCC_ReadReg and  LL_RCC_WriteReg functions
00153   * @{
00154   */
00155 #define LL_RCC_CIR_LSIRDYIE               RCC_CIR_LSIRDYIE      /*!< LSI Ready Interrupt Enable */
00156 #define LL_RCC_CIR_LSERDYIE               RCC_CIR_LSERDYIE      /*!< LSE Ready Interrupt Enable */
00157 #define LL_RCC_CIR_HSIRDYIE               RCC_CIR_HSIRDYIE      /*!< HSI Ready Interrupt Enable */
00158 #define LL_RCC_CIR_HSERDYIE               RCC_CIR_HSERDYIE      /*!< HSE Ready Interrupt Enable */
00159 #define LL_RCC_CIR_PLLRDYIE               RCC_CIR_PLLRDYIE      /*!< PLL Ready Interrupt Enable */
00160 #define LL_RCC_CIR_PLL3RDYIE              RCC_CIR_PLL3RDYIE     /*!< PLL3(PLLI2S) Ready Interrupt Enable */
00161 #define LL_RCC_CIR_PLL2RDYIE              RCC_CIR_PLL2RDYIE     /*!< PLL2 Ready Interrupt Enable */
00162 /**
00163   * @}
00164   */
00165 
00166 #if defined(RCC_CFGR2_PREDIV2)
00167 /** @defgroup RCC_LL_EC_HSE_PREDIV2_DIV HSE PREDIV2 Division factor
00168   * @{
00169   */
00170 #define LL_RCC_HSE_PREDIV2_DIV_1           RCC_CFGR2_PREDIV2_DIV1   /*!< PREDIV2 input clock not divided */
00171 #define LL_RCC_HSE_PREDIV2_DIV_2           RCC_CFGR2_PREDIV2_DIV2   /*!< PREDIV2 input clock divided by 2 */
00172 #define LL_RCC_HSE_PREDIV2_DIV_3           RCC_CFGR2_PREDIV2_DIV3   /*!< PREDIV2 input clock divided by 3 */
00173 #define LL_RCC_HSE_PREDIV2_DIV_4           RCC_CFGR2_PREDIV2_DIV4   /*!< PREDIV2 input clock divided by 4 */
00174 #define LL_RCC_HSE_PREDIV2_DIV_5           RCC_CFGR2_PREDIV2_DIV5   /*!< PREDIV2 input clock divided by 5 */
00175 #define LL_RCC_HSE_PREDIV2_DIV_6           RCC_CFGR2_PREDIV2_DIV6   /*!< PREDIV2 input clock divided by 6 */
00176 #define LL_RCC_HSE_PREDIV2_DIV_7           RCC_CFGR2_PREDIV2_DIV7   /*!< PREDIV2 input clock divided by 7 */
00177 #define LL_RCC_HSE_PREDIV2_DIV_8           RCC_CFGR2_PREDIV2_DIV8   /*!< PREDIV2 input clock divided by 8 */
00178 #define LL_RCC_HSE_PREDIV2_DIV_9           RCC_CFGR2_PREDIV2_DIV9   /*!< PREDIV2 input clock divided by 9 */
00179 #define LL_RCC_HSE_PREDIV2_DIV_10          RCC_CFGR2_PREDIV2_DIV10  /*!< PREDIV2 input clock divided by 10 */
00180 #define LL_RCC_HSE_PREDIV2_DIV_11          RCC_CFGR2_PREDIV2_DIV11  /*!< PREDIV2 input clock divided by 11 */
00181 #define LL_RCC_HSE_PREDIV2_DIV_12          RCC_CFGR2_PREDIV2_DIV12  /*!< PREDIV2 input clock divided by 12 */
00182 #define LL_RCC_HSE_PREDIV2_DIV_13          RCC_CFGR2_PREDIV2_DIV13  /*!< PREDIV2 input clock divided by 13 */
00183 #define LL_RCC_HSE_PREDIV2_DIV_14          RCC_CFGR2_PREDIV2_DIV14  /*!< PREDIV2 input clock divided by 14 */
00184 #define LL_RCC_HSE_PREDIV2_DIV_15          RCC_CFGR2_PREDIV2_DIV15  /*!< PREDIV2 input clock divided by 15 */
00185 #define LL_RCC_HSE_PREDIV2_DIV_16          RCC_CFGR2_PREDIV2_DIV16  /*!< PREDIV2 input clock divided by 16 */
00186 /**
00187   * @}
00188   */
00189 
00190 #endif /* RCC_CFGR2_PREDIV2 */
00191 
00192 /** @defgroup RCC_LL_EC_SYS_CLKSOURCE  System clock switch
00193   * @{
00194   */
00195 #define LL_RCC_SYS_CLKSOURCE_HSI           RCC_CFGR_SW_HSI    /*!< HSI selection as system clock */
00196 #define LL_RCC_SYS_CLKSOURCE_HSE           RCC_CFGR_SW_HSE    /*!< HSE selection as system clock */
00197 #define LL_RCC_SYS_CLKSOURCE_PLL           RCC_CFGR_SW_PLL    /*!< PLL selection as system clock */
00198 /**
00199   * @}
00200   */
00201 
00202 /** @defgroup RCC_LL_EC_SYS_CLKSOURCE_STATUS  System clock switch status
00203   * @{
00204   */
00205 #define LL_RCC_SYS_CLKSOURCE_STATUS_HSI    RCC_CFGR_SWS_HSI   /*!< HSI used as system clock */
00206 #define LL_RCC_SYS_CLKSOURCE_STATUS_HSE    RCC_CFGR_SWS_HSE   /*!< HSE used as system clock */
00207 #define LL_RCC_SYS_CLKSOURCE_STATUS_PLL    RCC_CFGR_SWS_PLL   /*!< PLL used as system clock */
00208 /**
00209   * @}
00210   */
00211 
00212 /** @defgroup RCC_LL_EC_SYSCLK_DIV  AHB prescaler
00213   * @{
00214   */
00215 #define LL_RCC_SYSCLK_DIV_1                RCC_CFGR_HPRE_DIV1   /*!< SYSCLK not divided */
00216 #define LL_RCC_SYSCLK_DIV_2                RCC_CFGR_HPRE_DIV2   /*!< SYSCLK divided by 2 */
00217 #define LL_RCC_SYSCLK_DIV_4                RCC_CFGR_HPRE_DIV4   /*!< SYSCLK divided by 4 */
00218 #define LL_RCC_SYSCLK_DIV_8                RCC_CFGR_HPRE_DIV8   /*!< SYSCLK divided by 8 */
00219 #define LL_RCC_SYSCLK_DIV_16               RCC_CFGR_HPRE_DIV16  /*!< SYSCLK divided by 16 */
00220 #define LL_RCC_SYSCLK_DIV_64               RCC_CFGR_HPRE_DIV64  /*!< SYSCLK divided by 64 */
00221 #define LL_RCC_SYSCLK_DIV_128              RCC_CFGR_HPRE_DIV128 /*!< SYSCLK divided by 128 */
00222 #define LL_RCC_SYSCLK_DIV_256              RCC_CFGR_HPRE_DIV256 /*!< SYSCLK divided by 256 */
00223 #define LL_RCC_SYSCLK_DIV_512              RCC_CFGR_HPRE_DIV512 /*!< SYSCLK divided by 512 */
00224 /**
00225   * @}
00226   */
00227 
00228 /** @defgroup RCC_LL_EC_APB1_DIV  APB low-speed prescaler (APB1)
00229   * @{
00230   */
00231 #define LL_RCC_APB1_DIV_1                  RCC_CFGR_PPRE1_DIV1  /*!< HCLK not divided */
00232 #define LL_RCC_APB1_DIV_2                  RCC_CFGR_PPRE1_DIV2  /*!< HCLK divided by 2 */
00233 #define LL_RCC_APB1_DIV_4                  RCC_CFGR_PPRE1_DIV4  /*!< HCLK divided by 4 */
00234 #define LL_RCC_APB1_DIV_8                  RCC_CFGR_PPRE1_DIV8  /*!< HCLK divided by 8 */
00235 #define LL_RCC_APB1_DIV_16                 RCC_CFGR_PPRE1_DIV16 /*!< HCLK divided by 16 */
00236 /**
00237   * @}
00238   */
00239 
00240 /** @defgroup RCC_LL_EC_APB2_DIV  APB high-speed prescaler (APB2)
00241   * @{
00242   */
00243 #define LL_RCC_APB2_DIV_1                  RCC_CFGR_PPRE2_DIV1  /*!< HCLK not divided */
00244 #define LL_RCC_APB2_DIV_2                  RCC_CFGR_PPRE2_DIV2  /*!< HCLK divided by 2 */
00245 #define LL_RCC_APB2_DIV_4                  RCC_CFGR_PPRE2_DIV4  /*!< HCLK divided by 4 */
00246 #define LL_RCC_APB2_DIV_8                  RCC_CFGR_PPRE2_DIV8  /*!< HCLK divided by 8 */
00247 #define LL_RCC_APB2_DIV_16                 RCC_CFGR_PPRE2_DIV16 /*!< HCLK divided by 16 */
00248 /**
00249   * @}
00250   */
00251 
00252 /** @defgroup RCC_LL_EC_MCO1SOURCE  MCO1 SOURCE selection
00253   * @{
00254   */
00255 #define LL_RCC_MCO1SOURCE_NOCLOCK          RCC_CFGR_MCO_NOCLOCK      /*!< MCO output disabled, no clock on MCO */
00256 #define LL_RCC_MCO1SOURCE_SYSCLK           RCC_CFGR_MCO_SYSCLK       /*!< SYSCLK selection as MCO source */
00257 #define LL_RCC_MCO1SOURCE_HSI              RCC_CFGR_MCO_HSI          /*!< HSI selection as MCO source */
00258 #define LL_RCC_MCO1SOURCE_HSE              RCC_CFGR_MCO_HSE          /*!< HSE selection as MCO source */
00259 #define LL_RCC_MCO1SOURCE_PLLCLK_DIV_2     RCC_CFGR_MCO_PLLCLK_DIV2  /*!< PLL clock divided by 2*/
00260 #if defined(RCC_CFGR_MCO_PLL2CLK)
00261 #define LL_RCC_MCO1SOURCE_PLL2CLK          RCC_CFGR_MCO_PLL2CLK      /*!< PLL2 clock selected as MCO source*/
00262 #endif /* RCC_CFGR_MCO_PLL2CLK */
00263 #if defined(RCC_CFGR_MCO_PLL3CLK_DIV2)
00264 #define LL_RCC_MCO1SOURCE_PLLI2SCLK_DIV2   RCC_CFGR_MCO_PLL3CLK_DIV2 /*!< PLLI2S clock divided by 2 selected as MCO source*/
00265 #endif /* RCC_CFGR_MCO_PLL3CLK_DIV2 */
00266 #if defined(RCC_CFGR_MCO_EXT_HSE)
00267 #define LL_RCC_MCO1SOURCE_EXT_HSE          RCC_CFGR_MCO_EXT_HSE      /*!< XT1 external 3-25 MHz oscillator clock selected as MCO source */
00268 #endif /* RCC_CFGR_MCO_EXT_HSE */
00269 #if defined(RCC_CFGR_MCO_PLL3CLK)
00270 #define LL_RCC_MCO1SOURCE_PLLI2SCLK        RCC_CFGR_MCO_PLL3CLK      /*!< PLLI2S clock selected as MCO source */
00271 #endif /* RCC_CFGR_MCO_PLL3CLK */
00272 /**
00273   * @}
00274   */
00275 
00276 #if defined(USE_FULL_LL_DRIVER)
00277 /** @defgroup RCC_LL_EC_PERIPH_FREQUENCY Peripheral clock frequency
00278   * @{
00279   */
00280 #define LL_RCC_PERIPH_FREQUENCY_NO         0x00000000U      /*!< No clock enabled for the peripheral            */
00281 #define LL_RCC_PERIPH_FREQUENCY_NA         0xFFFFFFFFU      /*!< Frequency cannot be provided as external clock */
00282 /**
00283   * @}
00284   */
00285 #endif /* USE_FULL_LL_DRIVER */
00286 
00287 #if defined(RCC_CFGR2_I2S2SRC)
00288 /** @defgroup RCC_LL_EC_I2S2CLKSOURCE Peripheral I2S clock source selection
00289   * @{
00290   */
00291 #define LL_RCC_I2S2_CLKSOURCE_SYSCLK        RCC_CFGR2_I2S2SRC                                          /*!< System clock (SYSCLK) selected as I2S2 clock entry */
00292 #define LL_RCC_I2S2_CLKSOURCE_PLLI2S_VCO    (uint32_t)(RCC_CFGR2_I2S2SRC | (RCC_CFGR2_I2S2SRC >> 16U)) /*!< PLLI2S VCO clock selected as I2S2 clock entry */
00293 #define LL_RCC_I2S3_CLKSOURCE_SYSCLK        RCC_CFGR2_I2S3SRC                                          /*!< System clock (SYSCLK) selected as I2S3 clock entry */
00294 #define LL_RCC_I2S3_CLKSOURCE_PLLI2S_VCO    (uint32_t)(RCC_CFGR2_I2S3SRC | (RCC_CFGR2_I2S3SRC >> 16U)) /*!< PLLI2S VCO clock selected as I2S3 clock entry */
00295 /**
00296   * @}
00297   */
00298 #endif /* RCC_CFGR2_I2S2SRC */
00299 
00300 #if defined(USB_OTG_FS) || defined(USB)
00301 /** @defgroup RCC_LL_EC_USB_CLKSOURCE Peripheral USB clock source selection
00302   * @{
00303   */
00304 #if defined(RCC_CFGR_USBPRE)
00305 #define LL_RCC_USB_CLKSOURCE_PLL             RCC_CFGR_USBPRE        /*!< PLL clock is not divided */
00306 #define LL_RCC_USB_CLKSOURCE_PLL_DIV_1_5     0x00000000U            /*!< PLL clock is divided by 1.5 */
00307 #endif /*RCC_CFGR_USBPRE*/
00308 #if defined(RCC_CFGR_OTGFSPRE)
00309 #define LL_RCC_USB_CLKSOURCE_PLL_DIV_2       RCC_CFGR_OTGFSPRE      /*!< PLL clock is divided by 2 */
00310 #define LL_RCC_USB_CLKSOURCE_PLL_DIV_3       0x00000000U            /*!< PLL clock is divided by 3 */
00311 #endif /*RCC_CFGR_OTGFSPRE*/
00312 /**
00313   * @}
00314   */
00315 #endif /* USB_OTG_FS || USB */
00316 
00317 /** @defgroup RCC_LL_EC_ADC_CLKSOURCE_PCLK2 Peripheral ADC clock source selection
00318   * @{
00319   */
00320 #define LL_RCC_ADC_CLKSRC_PCLK2_DIV_2    RCC_CFGR_ADCPRE_DIV2 /*ADC prescaler PCLK2 divided by 2*/
00321 #define LL_RCC_ADC_CLKSRC_PCLK2_DIV_4    RCC_CFGR_ADCPRE_DIV4 /*ADC prescaler PCLK2 divided by 4*/
00322 #define LL_RCC_ADC_CLKSRC_PCLK2_DIV_6    RCC_CFGR_ADCPRE_DIV6 /*ADC prescaler PCLK2 divided by 6*/
00323 #define LL_RCC_ADC_CLKSRC_PCLK2_DIV_8    RCC_CFGR_ADCPRE_DIV8 /*ADC prescaler PCLK2 divided by 8*/
00324 /**
00325   * @}
00326   */
00327 
00328 #if defined(RCC_CFGR2_I2S2SRC)
00329 /** @defgroup RCC_LL_EC_I2S2 Peripheral I2S get clock source
00330   * @{
00331   */
00332 #define LL_RCC_I2S2_CLKSOURCE              RCC_CFGR2_I2S2SRC       /*!< I2S2 Clock source selection */
00333 #define LL_RCC_I2S3_CLKSOURCE              RCC_CFGR2_I2S3SRC       /*!< I2S3 Clock source selection */
00334 /**
00335   * @}
00336   */
00337 
00338 #endif /* RCC_CFGR2_I2S2SRC */
00339 
00340 #if defined(USB_OTG_FS) || defined(USB)
00341 /** @defgroup RCC_LL_EC_USB Peripheral USB get clock source
00342   * @{
00343   */
00344 #define LL_RCC_USB_CLKSOURCE               0x00400000U     /*!< USB Clock source selection */
00345 /**
00346   * @}
00347   */
00348 
00349 #endif /* USB_OTG_FS || USB */
00350 
00351 /** @defgroup RCC_LL_EC_ADC Peripheral ADC get clock source
00352   * @{
00353   */
00354 #define LL_RCC_ADC_CLKSOURCE               RCC_CFGR_ADCPRE /*!< ADC Clock source selection */
00355 /**
00356   * @}
00357   */
00358 
00359 /** @defgroup RCC_LL_EC_RTC_CLKSOURCE  RTC clock source selection
00360   * @{
00361   */
00362 #define LL_RCC_RTC_CLKSOURCE_NONE          0x00000000U             /*!< No clock used as RTC clock */
00363 #define LL_RCC_RTC_CLKSOURCE_LSE           RCC_BDCR_RTCSEL_0       /*!< LSE oscillator clock used as RTC clock */
00364 #define LL_RCC_RTC_CLKSOURCE_LSI           RCC_BDCR_RTCSEL_1       /*!< LSI oscillator clock used as RTC clock */
00365 #define LL_RCC_RTC_CLKSOURCE_HSE_DIV128    RCC_BDCR_RTCSEL         /*!< HSE oscillator clock divided by 128 used as RTC clock */
00366 /**
00367   * @}
00368   */
00369 
00370 /** @defgroup RCC_LL_EC_PLL_MUL PLL Multiplicator factor
00371   * @{
00372   */
00373 #if defined(RCC_CFGR_PLLMULL2)
00374 #define LL_RCC_PLL_MUL_2                   RCC_CFGR_PLLMULL2  /*!< PLL input clock*2 */
00375 #endif /*RCC_CFGR_PLLMULL2*/
00376 #if defined(RCC_CFGR_PLLMULL3)
00377 #define LL_RCC_PLL_MUL_3                   RCC_CFGR_PLLMULL3  /*!< PLL input clock*3 */
00378 #endif /*RCC_CFGR_PLLMULL3*/
00379 #define LL_RCC_PLL_MUL_4                   RCC_CFGR_PLLMULL4  /*!< PLL input clock*4 */
00380 #define LL_RCC_PLL_MUL_5                   RCC_CFGR_PLLMULL5  /*!< PLL input clock*5 */
00381 #define LL_RCC_PLL_MUL_6                   RCC_CFGR_PLLMULL6  /*!< PLL input clock*6 */
00382 #define LL_RCC_PLL_MUL_7                   RCC_CFGR_PLLMULL7  /*!< PLL input clock*7 */
00383 #define LL_RCC_PLL_MUL_8                   RCC_CFGR_PLLMULL8  /*!< PLL input clock*8 */
00384 #define LL_RCC_PLL_MUL_9                   RCC_CFGR_PLLMULL9  /*!< PLL input clock*9 */
00385 #if defined(RCC_CFGR_PLLMULL6_5)
00386 #define LL_RCC_PLL_MUL_6_5                 RCC_CFGR_PLLMULL6_5 /*!< PLL input clock*6 */
00387 #else
00388 #define LL_RCC_PLL_MUL_10                  RCC_CFGR_PLLMULL10  /*!< PLL input clock*10 */
00389 #define LL_RCC_PLL_MUL_11                  RCC_CFGR_PLLMULL11  /*!< PLL input clock*11 */
00390 #define LL_RCC_PLL_MUL_12                  RCC_CFGR_PLLMULL12  /*!< PLL input clock*12 */
00391 #define LL_RCC_PLL_MUL_13                  RCC_CFGR_PLLMULL13  /*!< PLL input clock*13 */
00392 #define LL_RCC_PLL_MUL_14                  RCC_CFGR_PLLMULL14  /*!< PLL input clock*14 */
00393 #define LL_RCC_PLL_MUL_15                  RCC_CFGR_PLLMULL15  /*!< PLL input clock*15 */
00394 #define LL_RCC_PLL_MUL_16                  RCC_CFGR_PLLMULL16  /*!< PLL input clock*16 */
00395 #endif /*RCC_CFGR_PLLMULL6_5*/
00396 /**
00397   * @}
00398   */
00399 
00400 /** @defgroup RCC_LL_EC_PLLSOURCE PLL SOURCE
00401   * @{
00402   */
00403 #define LL_RCC_PLLSOURCE_HSI_DIV_2         0x00000000U                                    /*!< HSI clock divided by 2 selected as PLL entry clock source */
00404 #define LL_RCC_PLLSOURCE_HSE               RCC_CFGR_PLLSRC                                /*!< HSE/PREDIV1 clock selected as PLL entry clock source */
00405 #if defined(RCC_CFGR2_PREDIV1SRC)
00406 #define LL_RCC_PLLSOURCE_PLL2              (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1SRC << 4U) /*!< PLL2/PREDIV1 clock selected as PLL entry clock source */
00407 #endif /*RCC_CFGR2_PREDIV1SRC*/
00408 
00409 #if defined(RCC_CFGR2_PREDIV1)
00410 #define LL_RCC_PLLSOURCE_HSE_DIV_1         (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV1)    /*!< HSE/1 clock selected as PLL entry clock source */
00411 #define LL_RCC_PLLSOURCE_HSE_DIV_2         (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV2)    /*!< HSE/2 clock selected as PLL entry clock source */
00412 #define LL_RCC_PLLSOURCE_HSE_DIV_3         (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV3)    /*!< HSE/3 clock selected as PLL entry clock source */
00413 #define LL_RCC_PLLSOURCE_HSE_DIV_4         (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV4)    /*!< HSE/4 clock selected as PLL entry clock source */
00414 #define LL_RCC_PLLSOURCE_HSE_DIV_5         (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV5)    /*!< HSE/5 clock selected as PLL entry clock source */
00415 #define LL_RCC_PLLSOURCE_HSE_DIV_6         (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV6)    /*!< HSE/6 clock selected as PLL entry clock source */
00416 #define LL_RCC_PLLSOURCE_HSE_DIV_7         (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV7)    /*!< HSE/7 clock selected as PLL entry clock source */
00417 #define LL_RCC_PLLSOURCE_HSE_DIV_8         (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV8)    /*!< HSE/8 clock selected as PLL entry clock source */
00418 #define LL_RCC_PLLSOURCE_HSE_DIV_9         (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV9)    /*!< HSE/9 clock selected as PLL entry clock source */
00419 #define LL_RCC_PLLSOURCE_HSE_DIV_10        (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV10)   /*!< HSE/10 clock selected as PLL entry clock source */
00420 #define LL_RCC_PLLSOURCE_HSE_DIV_11        (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV11)   /*!< HSE/11 clock selected as PLL entry clock source */
00421 #define LL_RCC_PLLSOURCE_HSE_DIV_12        (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV12)   /*!< HSE/12 clock selected as PLL entry clock source */
00422 #define LL_RCC_PLLSOURCE_HSE_DIV_13        (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV13)   /*!< HSE/13 clock selected as PLL entry clock source */
00423 #define LL_RCC_PLLSOURCE_HSE_DIV_14        (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV14)   /*!< HSE/14 clock selected as PLL entry clock source */
00424 #define LL_RCC_PLLSOURCE_HSE_DIV_15        (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV15)   /*!< HSE/15 clock selected as PLL entry clock source */
00425 #define LL_RCC_PLLSOURCE_HSE_DIV_16        (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV16)   /*!< HSE/16 clock selected as PLL entry clock source */
00426 #if defined(RCC_CFGR2_PREDIV1SRC)
00427 #define LL_RCC_PLLSOURCE_PLL2_DIV_1        (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV1 | RCC_CFGR2_PREDIV1SRC << 4U)    /*!< PLL2/1 clock selected as PLL entry clock source */
00428 #define LL_RCC_PLLSOURCE_PLL2_DIV_2        (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV2 | RCC_CFGR2_PREDIV1SRC << 4U)    /*!< PLL2/2 clock selected as PLL entry clock source */
00429 #define LL_RCC_PLLSOURCE_PLL2_DIV_3        (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV3 | RCC_CFGR2_PREDIV1SRC << 4U)    /*!< PLL2/3 clock selected as PLL entry clock source */
00430 #define LL_RCC_PLLSOURCE_PLL2_DIV_4        (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV4 | RCC_CFGR2_PREDIV1SRC << 4U)    /*!< PLL2/4 clock selected as PLL entry clock source */
00431 #define LL_RCC_PLLSOURCE_PLL2_DIV_5        (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV5 | RCC_CFGR2_PREDIV1SRC << 4U)    /*!< PLL2/5 clock selected as PLL entry clock source */
00432 #define LL_RCC_PLLSOURCE_PLL2_DIV_6        (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV6 | RCC_CFGR2_PREDIV1SRC << 4U)    /*!< PLL2/6 clock selected as PLL entry clock source */
00433 #define LL_RCC_PLLSOURCE_PLL2_DIV_7        (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV7 | RCC_CFGR2_PREDIV1SRC << 4U)    /*!< PLL2/7 clock selected as PLL entry clock source */
00434 #define LL_RCC_PLLSOURCE_PLL2_DIV_8        (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV8 | RCC_CFGR2_PREDIV1SRC << 4U)    /*!< PLL2/8 clock selected as PLL entry clock source */
00435 #define LL_RCC_PLLSOURCE_PLL2_DIV_9        (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV9 | RCC_CFGR2_PREDIV1SRC << 4U)    /*!< PLL2/9 clock selected as PLL entry clock source */
00436 #define LL_RCC_PLLSOURCE_PLL2_DIV_10       (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV10 | RCC_CFGR2_PREDIV1SRC << 4U)   /*!< PLL2/10 clock selected as PLL entry clock source */
00437 #define LL_RCC_PLLSOURCE_PLL2_DIV_11       (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV11 | RCC_CFGR2_PREDIV1SRC << 4U)   /*!< PLL2/11 clock selected as PLL entry clock source */
00438 #define LL_RCC_PLLSOURCE_PLL2_DIV_12       (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV12 | RCC_CFGR2_PREDIV1SRC << 4U)   /*!< PLL2/12 clock selected as PLL entry clock source */
00439 #define LL_RCC_PLLSOURCE_PLL2_DIV_13       (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV13 | RCC_CFGR2_PREDIV1SRC << 4U)   /*!< PLL2/13 clock selected as PLL entry clock source */
00440 #define LL_RCC_PLLSOURCE_PLL2_DIV_14       (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV14 | RCC_CFGR2_PREDIV1SRC << 4U)   /*!< PLL2/14 clock selected as PLL entry clock source */
00441 #define LL_RCC_PLLSOURCE_PLL2_DIV_15       (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV15 | RCC_CFGR2_PREDIV1SRC << 4U)   /*!< PLL2/15 clock selected as PLL entry clock source */
00442 #define LL_RCC_PLLSOURCE_PLL2_DIV_16       (RCC_CFGR_PLLSRC | RCC_CFGR2_PREDIV1_DIV16 | RCC_CFGR2_PREDIV1SRC << 4U)   /*!< PLL2/16 clock selected as PLL entry clock source */
00443 #endif /*RCC_CFGR2_PREDIV1SRC*/
00444 #else
00445 #define LL_RCC_PLLSOURCE_HSE_DIV_1         (RCC_CFGR_PLLSRC | 0x00000000U)               /*!< HSE/1 clock selected as PLL entry clock source */
00446 #define LL_RCC_PLLSOURCE_HSE_DIV_2         (RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE)         /*!< HSE/2 clock selected as PLL entry clock source */
00447 #endif /*RCC_CFGR2_PREDIV1*/
00448 /**
00449   * @}
00450   */
00451 
00452 /** @defgroup RCC_LL_EC_PREDIV_DIV PREDIV Division factor
00453   * @{
00454   */
00455 #if defined(RCC_CFGR2_PREDIV1)
00456 #define LL_RCC_PREDIV_DIV_1                RCC_CFGR2_PREDIV1_DIV1   /*!< PREDIV1 input clock not divided */
00457 #define LL_RCC_PREDIV_DIV_2                RCC_CFGR2_PREDIV1_DIV2   /*!< PREDIV1 input clock divided by 2 */
00458 #define LL_RCC_PREDIV_DIV_3                RCC_CFGR2_PREDIV1_DIV3   /*!< PREDIV1 input clock divided by 3 */
00459 #define LL_RCC_PREDIV_DIV_4                RCC_CFGR2_PREDIV1_DIV4   /*!< PREDIV1 input clock divided by 4 */
00460 #define LL_RCC_PREDIV_DIV_5                RCC_CFGR2_PREDIV1_DIV5   /*!< PREDIV1 input clock divided by 5 */
00461 #define LL_RCC_PREDIV_DIV_6                RCC_CFGR2_PREDIV1_DIV6   /*!< PREDIV1 input clock divided by 6 */
00462 #define LL_RCC_PREDIV_DIV_7                RCC_CFGR2_PREDIV1_DIV7   /*!< PREDIV1 input clock divided by 7 */
00463 #define LL_RCC_PREDIV_DIV_8                RCC_CFGR2_PREDIV1_DIV8   /*!< PREDIV1 input clock divided by 8 */
00464 #define LL_RCC_PREDIV_DIV_9                RCC_CFGR2_PREDIV1_DIV9   /*!< PREDIV1 input clock divided by 9 */
00465 #define LL_RCC_PREDIV_DIV_10               RCC_CFGR2_PREDIV1_DIV10  /*!< PREDIV1 input clock divided by 10 */
00466 #define LL_RCC_PREDIV_DIV_11               RCC_CFGR2_PREDIV1_DIV11  /*!< PREDIV1 input clock divided by 11 */
00467 #define LL_RCC_PREDIV_DIV_12               RCC_CFGR2_PREDIV1_DIV12  /*!< PREDIV1 input clock divided by 12 */
00468 #define LL_RCC_PREDIV_DIV_13               RCC_CFGR2_PREDIV1_DIV13  /*!< PREDIV1 input clock divided by 13 */
00469 #define LL_RCC_PREDIV_DIV_14               RCC_CFGR2_PREDIV1_DIV14  /*!< PREDIV1 input clock divided by 14 */
00470 #define LL_RCC_PREDIV_DIV_15               RCC_CFGR2_PREDIV1_DIV15  /*!< PREDIV1 input clock divided by 15 */
00471 #define LL_RCC_PREDIV_DIV_16               RCC_CFGR2_PREDIV1_DIV16  /*!< PREDIV1 input clock divided by 16 */
00472 #else
00473 #define LL_RCC_PREDIV_DIV_1                0x00000000U              /*!< HSE divider clock clock not divided */
00474 #define LL_RCC_PREDIV_DIV_2                RCC_CFGR_PLLXTPRE        /*!< HSE divider clock divided by 2 for PLL entry */
00475 #endif /*RCC_CFGR2_PREDIV1*/
00476 /**
00477   * @}
00478   */
00479 
00480 #if defined(RCC_PLLI2S_SUPPORT)
00481 /** @defgroup RCC_LL_EC_PLLI2S_MUL PLLI2S MUL
00482   * @{
00483   */
00484 #define LL_RCC_PLLI2S_MUL_8                RCC_CFGR2_PLL3MUL8   /*!< PLLI2S input clock * 8 */
00485 #define LL_RCC_PLLI2S_MUL_9                RCC_CFGR2_PLL3MUL9   /*!< PLLI2S input clock * 9 */
00486 #define LL_RCC_PLLI2S_MUL_10               RCC_CFGR2_PLL3MUL10  /*!< PLLI2S input clock * 10 */
00487 #define LL_RCC_PLLI2S_MUL_11               RCC_CFGR2_PLL3MUL11  /*!< PLLI2S input clock * 11 */
00488 #define LL_RCC_PLLI2S_MUL_12               RCC_CFGR2_PLL3MUL12  /*!< PLLI2S input clock * 12 */
00489 #define LL_RCC_PLLI2S_MUL_13               RCC_CFGR2_PLL3MUL13  /*!< PLLI2S input clock * 13 */
00490 #define LL_RCC_PLLI2S_MUL_14               RCC_CFGR2_PLL3MUL14  /*!< PLLI2S input clock * 14 */
00491 #define LL_RCC_PLLI2S_MUL_16               RCC_CFGR2_PLL3MUL16  /*!< PLLI2S input clock * 16 */
00492 #define LL_RCC_PLLI2S_MUL_20               RCC_CFGR2_PLL3MUL20  /*!< PLLI2S input clock * 20 */
00493 /**
00494   * @}
00495   */
00496 
00497 #endif /* RCC_PLLI2S_SUPPORT */
00498 
00499 #if defined(RCC_PLL2_SUPPORT)
00500 /** @defgroup RCC_LL_EC_PLL2_MUL PLL2 MUL
00501   * @{
00502   */
00503 #define LL_RCC_PLL2_MUL_8                  RCC_CFGR2_PLL2MUL8   /*!< PLL2 input clock * 8 */
00504 #define LL_RCC_PLL2_MUL_9                  RCC_CFGR2_PLL2MUL9   /*!< PLL2 input clock * 9 */
00505 #define LL_RCC_PLL2_MUL_10                 RCC_CFGR2_PLL2MUL10  /*!< PLL2 input clock * 10 */
00506 #define LL_RCC_PLL2_MUL_11                 RCC_CFGR2_PLL2MUL11  /*!< PLL2 input clock * 11 */
00507 #define LL_RCC_PLL2_MUL_12                 RCC_CFGR2_PLL2MUL12  /*!< PLL2 input clock * 12 */
00508 #define LL_RCC_PLL2_MUL_13                 RCC_CFGR2_PLL2MUL13  /*!< PLL2 input clock * 13 */
00509 #define LL_RCC_PLL2_MUL_14                 RCC_CFGR2_PLL2MUL14  /*!< PLL2 input clock * 14 */
00510 #define LL_RCC_PLL2_MUL_16                 RCC_CFGR2_PLL2MUL16  /*!< PLL2 input clock * 16 */
00511 #define LL_RCC_PLL2_MUL_20                 RCC_CFGR2_PLL2MUL20  /*!< PLL2 input clock * 20 */
00512 /**
00513   * @}
00514   */
00515 
00516 #endif /* RCC_PLL2_SUPPORT */
00517 
00518 /**
00519   * @}
00520   */
00521 
00522 /* Exported macro ------------------------------------------------------------*/
00523 /** @defgroup RCC_LL_Exported_Macros RCC Exported Macros
00524   * @{
00525   */
00526 
00527 /** @defgroup RCC_LL_EM_WRITE_READ Common Write and read registers Macros
00528   * @{
00529   */
00530 
00531 /**
00532   * @brief  Write a value in RCC register
00533   * @param  __REG__ Register to be written
00534   * @param  __VALUE__ Value to be written in the register
00535   * @retval None
00536   */
00537 #define LL_RCC_WriteReg(__REG__, __VALUE__) WRITE_REG(RCC->__REG__, (__VALUE__))
00538 
00539 /**
00540   * @brief  Read a value in RCC register
00541   * @param  __REG__ Register to be read
00542   * @retval Register value
00543   */
00544 #define LL_RCC_ReadReg(__REG__) READ_REG(RCC->__REG__)
00545 /**
00546   * @}
00547   */
00548 
00549 /** @defgroup RCC_LL_EM_CALC_FREQ Calculate frequencies
00550   * @{
00551   */
00552 
00553 #if defined(RCC_CFGR_PLLMULL6_5)
00554 /**
00555   * @brief  Helper macro to calculate the PLLCLK frequency
00556   * @note ex: @ref __LL_RCC_CALC_PLLCLK_FREQ (HSE_VALUE / (@ref LL_RCC_PLL_GetPrediv () + 1), @ref LL_RCC_PLL_GetMultiplicator());
00557   * @param  __INPUTFREQ__ PLL Input frequency (based on HSE div Prediv1 / HSI div 2 / PLL2 div Prediv1)
00558   * @param  __PLLMUL__: This parameter can be one of the following values:
00559   *         @arg @ref LL_RCC_PLL_MUL_4
00560   *         @arg @ref LL_RCC_PLL_MUL_5
00561   *         @arg @ref LL_RCC_PLL_MUL_6
00562   *         @arg @ref LL_RCC_PLL_MUL_7
00563   *         @arg @ref LL_RCC_PLL_MUL_8
00564   *         @arg @ref LL_RCC_PLL_MUL_9
00565   *         @arg @ref LL_RCC_PLL_MUL_6_5
00566   * @retval PLL clock frequency (in Hz)
00567   */
00568 #define __LL_RCC_CALC_PLLCLK_FREQ(__INPUTFREQ__, __PLLMUL__) \
00569           (((__PLLMUL__) != RCC_CFGR_PLLMULL6_5) ? \
00570               ((__INPUTFREQ__) * ((((__PLLMUL__) & RCC_CFGR_PLLMULL) >> RCC_CFGR_PLLMULL_Pos) + 2U)) :\
00571               (((__INPUTFREQ__) * 13U) / 2U))
00572 
00573 #else
00574 /**
00575   * @brief  Helper macro to calculate the PLLCLK frequency
00576   * @note ex: @ref __LL_RCC_CALC_PLLCLK_FREQ (HSE_VALUE / (@ref LL_RCC_PLL_GetPrediv () + 1), @ref LL_RCC_PLL_GetMultiplicator ());
00577   * @param  __INPUTFREQ__ PLL Input frequency (based on HSE div Prediv1 or div 2 / HSI div 2)
00578   * @param  __PLLMUL__: This parameter can be one of the following values:
00579   *         @arg @ref LL_RCC_PLL_MUL_2
00580   *         @arg @ref LL_RCC_PLL_MUL_3
00581   *         @arg @ref LL_RCC_PLL_MUL_4
00582   *         @arg @ref LL_RCC_PLL_MUL_5
00583   *         @arg @ref LL_RCC_PLL_MUL_6
00584   *         @arg @ref LL_RCC_PLL_MUL_7
00585   *         @arg @ref LL_RCC_PLL_MUL_8
00586   *         @arg @ref LL_RCC_PLL_MUL_9
00587   *         @arg @ref LL_RCC_PLL_MUL_10
00588   *         @arg @ref LL_RCC_PLL_MUL_11
00589   *         @arg @ref LL_RCC_PLL_MUL_12
00590   *         @arg @ref LL_RCC_PLL_MUL_13
00591   *         @arg @ref LL_RCC_PLL_MUL_14
00592   *         @arg @ref LL_RCC_PLL_MUL_15
00593   *         @arg @ref LL_RCC_PLL_MUL_16
00594   * @retval PLL clock frequency (in Hz)
00595   */
00596 #define __LL_RCC_CALC_PLLCLK_FREQ(__INPUTFREQ__, __PLLMUL__) ((__INPUTFREQ__) * (((__PLLMUL__) >> RCC_CFGR_PLLMULL_Pos) + 2U))
00597 #endif /* RCC_CFGR_PLLMULL6_5 */
00598 
00599 #if defined(RCC_PLLI2S_SUPPORT)
00600 /**
00601   * @brief  Helper macro to calculate the PLLI2S frequency
00602   * @note ex: @ref __LL_RCC_CALC_PLLI2SCLK_FREQ (HSE_VALUE, @ref LL_RCC_PLLI2S_GetMultiplicator (), @ref LL_RCC_HSE_GetPrediv2 ());
00603   * @param  __INPUTFREQ__ PLLI2S Input frequency (based on HSE value)
00604   * @param  __PLLI2SMUL__: This parameter can be one of the following values:
00605   *         @arg @ref LL_RCC_PLLI2S_MUL_8
00606   *         @arg @ref LL_RCC_PLLI2S_MUL_9
00607   *         @arg @ref LL_RCC_PLLI2S_MUL_10
00608   *         @arg @ref LL_RCC_PLLI2S_MUL_11
00609   *         @arg @ref LL_RCC_PLLI2S_MUL_12
00610   *         @arg @ref LL_RCC_PLLI2S_MUL_13
00611   *         @arg @ref LL_RCC_PLLI2S_MUL_14
00612   *         @arg @ref LL_RCC_PLLI2S_MUL_16
00613   *         @arg @ref LL_RCC_PLLI2S_MUL_20
00614   * @param  __PLLI2SDIV__: This parameter can be one of the following values:
00615   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_1
00616   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_2
00617   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_3
00618   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_4
00619   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_5
00620   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_6
00621   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_7
00622   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_8
00623   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_9
00624   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_10
00625   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_11
00626   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_12
00627   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_13
00628   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_14
00629   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_15
00630   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_16
00631   * @retval PLLI2S clock frequency (in Hz)
00632   */
00633 #define __LL_RCC_CALC_PLLI2SCLK_FREQ(__INPUTFREQ__, __PLLI2SMUL__, __PLLI2SDIV__) (((__INPUTFREQ__) * (((__PLLI2SMUL__) >> RCC_CFGR2_PLL3MUL_Pos) + 2U)) / (((__PLLI2SDIV__) >> RCC_CFGR2_PREDIV2_Pos) + 1U))
00634 #endif /* RCC_PLLI2S_SUPPORT */
00635 
00636 #if defined(RCC_PLL2_SUPPORT)
00637 /**
00638   * @brief  Helper macro to calculate the PLL2 frequency
00639   * @note ex: @ref __LL_RCC_CALC_PLL2CLK_FREQ (HSE_VALUE, @ref LL_RCC_PLL2_GetMultiplicator (), @ref LL_RCC_HSE_GetPrediv2 ());
00640   * @param  __INPUTFREQ__ PLL2 Input frequency (based on HSE value)
00641   * @param  __PLL2MUL__: This parameter can be one of the following values:
00642   *         @arg @ref LL_RCC_PLL2_MUL_8
00643   *         @arg @ref LL_RCC_PLL2_MUL_9
00644   *         @arg @ref LL_RCC_PLL2_MUL_10
00645   *         @arg @ref LL_RCC_PLL2_MUL_11
00646   *         @arg @ref LL_RCC_PLL2_MUL_12
00647   *         @arg @ref LL_RCC_PLL2_MUL_13
00648   *         @arg @ref LL_RCC_PLL2_MUL_14
00649   *         @arg @ref LL_RCC_PLL2_MUL_16
00650   *         @arg @ref LL_RCC_PLL2_MUL_20
00651   * @param  __PLL2DIV__: This parameter can be one of the following values:
00652   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_1
00653   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_2
00654   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_3
00655   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_4
00656   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_5
00657   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_6
00658   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_7
00659   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_8
00660   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_9
00661   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_10
00662   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_11
00663   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_12
00664   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_13
00665   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_14
00666   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_15
00667   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_16
00668   * @retval PLL2 clock frequency (in Hz)
00669   */
00670 #define __LL_RCC_CALC_PLL2CLK_FREQ(__INPUTFREQ__, __PLL2MUL__, __PLL2DIV__) (((__INPUTFREQ__) * (((__PLL2MUL__) >> RCC_CFGR2_PLL2MUL_Pos) + 2U)) / (((__PLL2DIV__) >> RCC_CFGR2_PREDIV2_Pos) + 1U))
00671 #endif /* RCC_PLL2_SUPPORT */
00672 
00673 /**
00674   * @brief  Helper macro to calculate the HCLK frequency
00675   * @note: __AHBPRESCALER__ be retrieved by @ref LL_RCC_GetAHBPrescaler
00676   *        ex: __LL_RCC_CALC_HCLK_FREQ(LL_RCC_GetAHBPrescaler())
00677   * @param  __SYSCLKFREQ__ SYSCLK frequency (based on HSE/HSI/PLLCLK)
00678   * @param  __AHBPRESCALER__: This parameter can be one of the following values:
00679   *         @arg @ref LL_RCC_SYSCLK_DIV_1
00680   *         @arg @ref LL_RCC_SYSCLK_DIV_2
00681   *         @arg @ref LL_RCC_SYSCLK_DIV_4
00682   *         @arg @ref LL_RCC_SYSCLK_DIV_8
00683   *         @arg @ref LL_RCC_SYSCLK_DIV_16
00684   *         @arg @ref LL_RCC_SYSCLK_DIV_64
00685   *         @arg @ref LL_RCC_SYSCLK_DIV_128
00686   *         @arg @ref LL_RCC_SYSCLK_DIV_256
00687   *         @arg @ref LL_RCC_SYSCLK_DIV_512
00688   * @retval HCLK clock frequency (in Hz)
00689   */
00690 #define __LL_RCC_CALC_HCLK_FREQ(__SYSCLKFREQ__, __AHBPRESCALER__) ((__SYSCLKFREQ__) >> AHBPrescTable[((__AHBPRESCALER__) & RCC_CFGR_HPRE) >>  RCC_CFGR_HPRE_Pos])
00691 
00692 /**
00693   * @brief  Helper macro to calculate the PCLK1 frequency (ABP1)
00694   * @note: __APB1PRESCALER__ be retrieved by @ref LL_RCC_GetAPB1Prescaler
00695   *        ex: __LL_RCC_CALC_PCLK1_FREQ(LL_RCC_GetAPB1Prescaler())
00696   * @param  __HCLKFREQ__ HCLK frequency
00697   * @param  __APB1PRESCALER__: This parameter can be one of the following values:
00698   *         @arg @ref LL_RCC_APB1_DIV_1
00699   *         @arg @ref LL_RCC_APB1_DIV_2
00700   *         @arg @ref LL_RCC_APB1_DIV_4
00701   *         @arg @ref LL_RCC_APB1_DIV_8
00702   *         @arg @ref LL_RCC_APB1_DIV_16
00703   * @retval PCLK1 clock frequency (in Hz)
00704   */
00705 #define __LL_RCC_CALC_PCLK1_FREQ(__HCLKFREQ__, __APB1PRESCALER__) ((__HCLKFREQ__) >> APBPrescTable[(__APB1PRESCALER__) >>  RCC_CFGR_PPRE1_Pos])
00706 
00707 /**
00708   * @brief  Helper macro to calculate the PCLK2 frequency (ABP2)
00709   * @note: __APB2PRESCALER__ be retrieved by @ref LL_RCC_GetAPB2Prescaler
00710   *        ex: __LL_RCC_CALC_PCLK2_FREQ(LL_RCC_GetAPB2Prescaler())
00711   * @param  __HCLKFREQ__ HCLK frequency
00712   * @param  __APB2PRESCALER__: This parameter can be one of the following values:
00713   *         @arg @ref LL_RCC_APB2_DIV_1
00714   *         @arg @ref LL_RCC_APB2_DIV_2
00715   *         @arg @ref LL_RCC_APB2_DIV_4
00716   *         @arg @ref LL_RCC_APB2_DIV_8
00717   *         @arg @ref LL_RCC_APB2_DIV_16
00718   * @retval PCLK2 clock frequency (in Hz)
00719   */
00720 #define __LL_RCC_CALC_PCLK2_FREQ(__HCLKFREQ__, __APB2PRESCALER__) ((__HCLKFREQ__) >> APBPrescTable[(__APB2PRESCALER__) >>  RCC_CFGR_PPRE2_Pos])
00721 
00722 /**
00723   * @}
00724   */
00725 
00726 /**
00727   * @}
00728   */
00729 
00730 /* Exported functions --------------------------------------------------------*/
00731 /** @defgroup RCC_LL_Exported_Functions RCC Exported Functions
00732   * @{
00733   */
00734 
00735 /** @defgroup RCC_LL_EF_HSE HSE
00736   * @{
00737   */
00738 
00739 /**
00740   * @brief  Enable the Clock Security System.
00741   * @rmtoll CR           CSSON         LL_RCC_HSE_EnableCSS
00742   * @retval None
00743   */
00744 __STATIC_INLINE void LL_RCC_HSE_EnableCSS(void)
00745 {
00746   SET_BIT(RCC->CR, RCC_CR_CSSON);
00747 }
00748 
00749 /**
00750   * @brief  Enable HSE external oscillator (HSE Bypass)
00751   * @rmtoll CR           HSEBYP        LL_RCC_HSE_EnableBypass
00752   * @retval None
00753   */
00754 __STATIC_INLINE void LL_RCC_HSE_EnableBypass(void)
00755 {
00756   SET_BIT(RCC->CR, RCC_CR_HSEBYP);
00757 }
00758 
00759 /**
00760   * @brief  Disable HSE external oscillator (HSE Bypass)
00761   * @rmtoll CR           HSEBYP        LL_RCC_HSE_DisableBypass
00762   * @retval None
00763   */
00764 __STATIC_INLINE void LL_RCC_HSE_DisableBypass(void)
00765 {
00766   CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);
00767 }
00768 
00769 /**
00770   * @brief  Enable HSE crystal oscillator (HSE ON)
00771   * @rmtoll CR           HSEON         LL_RCC_HSE_Enable
00772   * @retval None
00773   */
00774 __STATIC_INLINE void LL_RCC_HSE_Enable(void)
00775 {
00776   SET_BIT(RCC->CR, RCC_CR_HSEON);
00777 }
00778 
00779 /**
00780   * @brief  Disable HSE crystal oscillator (HSE ON)
00781   * @rmtoll CR           HSEON         LL_RCC_HSE_Disable
00782   * @retval None
00783   */
00784 __STATIC_INLINE void LL_RCC_HSE_Disable(void)
00785 {
00786   CLEAR_BIT(RCC->CR, RCC_CR_HSEON);
00787 }
00788 
00789 /**
00790   * @brief  Check if HSE oscillator Ready
00791   * @rmtoll CR           HSERDY        LL_RCC_HSE_IsReady
00792   * @retval State of bit (1 or 0).
00793   */
00794 __STATIC_INLINE uint32_t LL_RCC_HSE_IsReady(void)
00795 {
00796   return (READ_BIT(RCC->CR, RCC_CR_HSERDY) == (RCC_CR_HSERDY));
00797 }
00798 
00799 #if defined(RCC_CFGR2_PREDIV2)
00800 /**
00801   * @brief  Get PREDIV2 division factor
00802   * @rmtoll CFGR2        PREDIV2       LL_RCC_HSE_GetPrediv2
00803   * @retval Returned value can be one of the following values:
00804   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_1
00805   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_2
00806   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_3
00807   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_4
00808   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_5
00809   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_6
00810   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_7
00811   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_8
00812   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_9
00813   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_10
00814   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_11
00815   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_12
00816   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_13
00817   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_14
00818   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_15
00819   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_16
00820   */
00821 __STATIC_INLINE uint32_t LL_RCC_HSE_GetPrediv2(void)
00822 {
00823   return (uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV2));
00824 }
00825 #endif /* RCC_CFGR2_PREDIV2 */
00826 
00827 /**
00828   * @}
00829   */
00830 
00831 /** @defgroup RCC_LL_EF_HSI HSI
00832   * @{
00833   */
00834 
00835 /**
00836   * @brief  Enable HSI oscillator
00837   * @rmtoll CR           HSION         LL_RCC_HSI_Enable
00838   * @retval None
00839   */
00840 __STATIC_INLINE void LL_RCC_HSI_Enable(void)
00841 {
00842   SET_BIT(RCC->CR, RCC_CR_HSION);
00843 }
00844 
00845 /**
00846   * @brief  Disable HSI oscillator
00847   * @rmtoll CR           HSION         LL_RCC_HSI_Disable
00848   * @retval None
00849   */
00850 __STATIC_INLINE void LL_RCC_HSI_Disable(void)
00851 {
00852   CLEAR_BIT(RCC->CR, RCC_CR_HSION);
00853 }
00854 
00855 /**
00856   * @brief  Check if HSI clock is ready
00857   * @rmtoll CR           HSIRDY        LL_RCC_HSI_IsReady
00858   * @retval State of bit (1 or 0).
00859   */
00860 __STATIC_INLINE uint32_t LL_RCC_HSI_IsReady(void)
00861 {
00862   return (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == (RCC_CR_HSIRDY));
00863 }
00864 
00865 /**
00866   * @brief  Get HSI Calibration value
00867   * @note When HSITRIM is written, HSICAL is updated with the sum of
00868   *       HSITRIM and the factory trim value
00869   * @rmtoll CR        HSICAL        LL_RCC_HSI_GetCalibration
00870   * @retval Between Min_Data = 0x00 and Max_Data = 0xFF
00871   */
00872 __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibration(void)
00873 {
00874   return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_HSICAL) >> RCC_CR_HSICAL_Pos);
00875 }
00876 
00877 /**
00878   * @brief  Set HSI Calibration trimming
00879   * @note user-programmable trimming value that is added to the HSICAL
00880   * @note Default value is 16, which, when added to the HSICAL value,
00881   *       should trim the HSI to 16 MHz +/- 1 %
00882   * @rmtoll CR        HSITRIM       LL_RCC_HSI_SetCalibTrimming
00883   * @param  Value between Min_Data = 0x00 and Max_Data = 0x1F
00884   * @retval None
00885   */
00886 __STATIC_INLINE void LL_RCC_HSI_SetCalibTrimming(uint32_t Value)
00887 {
00888   MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, Value << RCC_CR_HSITRIM_Pos);
00889 }
00890 
00891 /**
00892   * @brief  Get HSI Calibration trimming
00893   * @rmtoll CR        HSITRIM       LL_RCC_HSI_GetCalibTrimming
00894   * @retval Between Min_Data = 0x00 and Max_Data = 0x1F
00895   */
00896 __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibTrimming(void)
00897 {
00898   return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
00899 }
00900 
00901 /**
00902   * @}
00903   */
00904 
00905 /** @defgroup RCC_LL_EF_LSE LSE
00906   * @{
00907   */
00908 
00909 /**
00910   * @brief  Enable  Low Speed External (LSE) crystal.
00911   * @rmtoll BDCR         LSEON         LL_RCC_LSE_Enable
00912   * @retval None
00913   */
00914 __STATIC_INLINE void LL_RCC_LSE_Enable(void)
00915 {
00916   SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);
00917 }
00918 
00919 /**
00920   * @brief  Disable  Low Speed External (LSE) crystal.
00921   * @rmtoll BDCR         LSEON         LL_RCC_LSE_Disable
00922   * @retval None
00923   */
00924 __STATIC_INLINE void LL_RCC_LSE_Disable(void)
00925 {
00926   CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);
00927 }
00928 
00929 /**
00930   * @brief  Enable external clock source (LSE bypass).
00931   * @rmtoll BDCR         LSEBYP        LL_RCC_LSE_EnableBypass
00932   * @retval None
00933   */
00934 __STATIC_INLINE void LL_RCC_LSE_EnableBypass(void)
00935 {
00936   SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
00937 }
00938 
00939 /**
00940   * @brief  Disable external clock source (LSE bypass).
00941   * @rmtoll BDCR         LSEBYP        LL_RCC_LSE_DisableBypass
00942   * @retval None
00943   */
00944 __STATIC_INLINE void LL_RCC_LSE_DisableBypass(void)
00945 {
00946   CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
00947 }
00948 
00949 /**
00950   * @brief  Check if LSE oscillator Ready
00951   * @rmtoll BDCR         LSERDY        LL_RCC_LSE_IsReady
00952   * @retval State of bit (1 or 0).
00953   */
00954 __STATIC_INLINE uint32_t LL_RCC_LSE_IsReady(void)
00955 {
00956   return (READ_BIT(RCC->BDCR, RCC_BDCR_LSERDY) == (RCC_BDCR_LSERDY));
00957 }
00958 
00959 /**
00960   * @}
00961   */
00962 
00963 /** @defgroup RCC_LL_EF_LSI LSI
00964   * @{
00965   */
00966 
00967 /**
00968   * @brief  Enable LSI Oscillator
00969   * @rmtoll CSR          LSION         LL_RCC_LSI_Enable
00970   * @retval None
00971   */
00972 __STATIC_INLINE void LL_RCC_LSI_Enable(void)
00973 {
00974   SET_BIT(RCC->CSR, RCC_CSR_LSION);
00975 }
00976 
00977 /**
00978   * @brief  Disable LSI Oscillator
00979   * @rmtoll CSR          LSION         LL_RCC_LSI_Disable
00980   * @retval None
00981   */
00982 __STATIC_INLINE void LL_RCC_LSI_Disable(void)
00983 {
00984   CLEAR_BIT(RCC->CSR, RCC_CSR_LSION);
00985 }
00986 
00987 /**
00988   * @brief  Check if LSI is Ready
00989   * @rmtoll CSR          LSIRDY        LL_RCC_LSI_IsReady
00990   * @retval State of bit (1 or 0).
00991   */
00992 __STATIC_INLINE uint32_t LL_RCC_LSI_IsReady(void)
00993 {
00994   return (READ_BIT(RCC->CSR, RCC_CSR_LSIRDY) == (RCC_CSR_LSIRDY));
00995 }
00996 
00997 /**
00998   * @}
00999   */
01000 
01001 /** @defgroup RCC_LL_EF_System System
01002   * @{
01003   */
01004 
01005 /**
01006   * @brief  Configure the system clock source
01007   * @rmtoll CFGR         SW            LL_RCC_SetSysClkSource
01008   * @param  Source This parameter can be one of the following values:
01009   *         @arg @ref LL_RCC_SYS_CLKSOURCE_HSI
01010   *         @arg @ref LL_RCC_SYS_CLKSOURCE_HSE
01011   *         @arg @ref LL_RCC_SYS_CLKSOURCE_PLL
01012   * @retval None
01013   */
01014 __STATIC_INLINE void LL_RCC_SetSysClkSource(uint32_t Source)
01015 {
01016   MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, Source);
01017 }
01018 
01019 /**
01020   * @brief  Get the system clock source
01021   * @rmtoll CFGR         SWS           LL_RCC_GetSysClkSource
01022   * @retval Returned value can be one of the following values:
01023   *         @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSI
01024   *         @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSE
01025   *         @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_PLL
01026   */
01027 __STATIC_INLINE uint32_t LL_RCC_GetSysClkSource(void)
01028 {
01029   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS));
01030 }
01031 
01032 /**
01033   * @brief  Set AHB prescaler
01034   * @rmtoll CFGR         HPRE          LL_RCC_SetAHBPrescaler
01035   * @param  Prescaler This parameter can be one of the following values:
01036   *         @arg @ref LL_RCC_SYSCLK_DIV_1
01037   *         @arg @ref LL_RCC_SYSCLK_DIV_2
01038   *         @arg @ref LL_RCC_SYSCLK_DIV_4
01039   *         @arg @ref LL_RCC_SYSCLK_DIV_8
01040   *         @arg @ref LL_RCC_SYSCLK_DIV_16
01041   *         @arg @ref LL_RCC_SYSCLK_DIV_64
01042   *         @arg @ref LL_RCC_SYSCLK_DIV_128
01043   *         @arg @ref LL_RCC_SYSCLK_DIV_256
01044   *         @arg @ref LL_RCC_SYSCLK_DIV_512
01045   * @retval None
01046   */
01047 __STATIC_INLINE void LL_RCC_SetAHBPrescaler(uint32_t Prescaler)
01048 {
01049   MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, Prescaler);
01050 }
01051 
01052 /**
01053   * @brief  Set APB1 prescaler
01054   * @rmtoll CFGR         PPRE1         LL_RCC_SetAPB1Prescaler
01055   * @param  Prescaler This parameter can be one of the following values:
01056   *         @arg @ref LL_RCC_APB1_DIV_1
01057   *         @arg @ref LL_RCC_APB1_DIV_2
01058   *         @arg @ref LL_RCC_APB1_DIV_4
01059   *         @arg @ref LL_RCC_APB1_DIV_8
01060   *         @arg @ref LL_RCC_APB1_DIV_16
01061   * @retval None
01062   */
01063 __STATIC_INLINE void LL_RCC_SetAPB1Prescaler(uint32_t Prescaler)
01064 {
01065   MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, Prescaler);
01066 }
01067 
01068 /**
01069   * @brief  Set APB2 prescaler
01070   * @rmtoll CFGR         PPRE2         LL_RCC_SetAPB2Prescaler
01071   * @param  Prescaler This parameter can be one of the following values:
01072   *         @arg @ref LL_RCC_APB2_DIV_1
01073   *         @arg @ref LL_RCC_APB2_DIV_2
01074   *         @arg @ref LL_RCC_APB2_DIV_4
01075   *         @arg @ref LL_RCC_APB2_DIV_8
01076   *         @arg @ref LL_RCC_APB2_DIV_16
01077   * @retval None
01078   */
01079 __STATIC_INLINE void LL_RCC_SetAPB2Prescaler(uint32_t Prescaler)
01080 {
01081   MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, Prescaler);
01082 }
01083 
01084 /**
01085   * @brief  Get AHB prescaler
01086   * @rmtoll CFGR         HPRE          LL_RCC_GetAHBPrescaler
01087   * @retval Returned value can be one of the following values:
01088   *         @arg @ref LL_RCC_SYSCLK_DIV_1
01089   *         @arg @ref LL_RCC_SYSCLK_DIV_2
01090   *         @arg @ref LL_RCC_SYSCLK_DIV_4
01091   *         @arg @ref LL_RCC_SYSCLK_DIV_8
01092   *         @arg @ref LL_RCC_SYSCLK_DIV_16
01093   *         @arg @ref LL_RCC_SYSCLK_DIV_64
01094   *         @arg @ref LL_RCC_SYSCLK_DIV_128
01095   *         @arg @ref LL_RCC_SYSCLK_DIV_256
01096   *         @arg @ref LL_RCC_SYSCLK_DIV_512
01097   */
01098 __STATIC_INLINE uint32_t LL_RCC_GetAHBPrescaler(void)
01099 {
01100   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_HPRE));
01101 }
01102 
01103 /**
01104   * @brief  Get APB1 prescaler
01105   * @rmtoll CFGR         PPRE1         LL_RCC_GetAPB1Prescaler
01106   * @retval Returned value can be one of the following values:
01107   *         @arg @ref LL_RCC_APB1_DIV_1
01108   *         @arg @ref LL_RCC_APB1_DIV_2
01109   *         @arg @ref LL_RCC_APB1_DIV_4
01110   *         @arg @ref LL_RCC_APB1_DIV_8
01111   *         @arg @ref LL_RCC_APB1_DIV_16
01112   */
01113 __STATIC_INLINE uint32_t LL_RCC_GetAPB1Prescaler(void)
01114 {
01115   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE1));
01116 }
01117 
01118 /**
01119   * @brief  Get APB2 prescaler
01120   * @rmtoll CFGR         PPRE2         LL_RCC_GetAPB2Prescaler
01121   * @retval Returned value can be one of the following values:
01122   *         @arg @ref LL_RCC_APB2_DIV_1
01123   *         @arg @ref LL_RCC_APB2_DIV_2
01124   *         @arg @ref LL_RCC_APB2_DIV_4
01125   *         @arg @ref LL_RCC_APB2_DIV_8
01126   *         @arg @ref LL_RCC_APB2_DIV_16
01127   */
01128 __STATIC_INLINE uint32_t LL_RCC_GetAPB2Prescaler(void)
01129 {
01130   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE2));
01131 }
01132 
01133 /**
01134   * @}
01135   */
01136 
01137 /** @defgroup RCC_LL_EF_MCO MCO
01138   * @{
01139   */
01140 
01141 /**
01142   * @brief  Configure MCOx
01143   * @rmtoll CFGR         MCO           LL_RCC_ConfigMCO
01144   * @param  MCOxSource This parameter can be one of the following values:
01145   *         @arg @ref LL_RCC_MCO1SOURCE_NOCLOCK
01146   *         @arg @ref LL_RCC_MCO1SOURCE_SYSCLK
01147   *         @arg @ref LL_RCC_MCO1SOURCE_HSI
01148   *         @arg @ref LL_RCC_MCO1SOURCE_HSE
01149   *         @arg @ref LL_RCC_MCO1SOURCE_PLLCLK_DIV_2
01150   *         @arg @ref LL_RCC_MCO1SOURCE_PLL2CLK (*)
01151   *         @arg @ref LL_RCC_MCO1SOURCE_PLLI2SCLK_DIV2 (*)
01152   *         @arg @ref LL_RCC_MCO1SOURCE_EXT_HSE (*)
01153   *         @arg @ref LL_RCC_MCO1SOURCE_PLLI2SCLK (*)
01154   *
01155   *         (*) value not defined in all devices
01156   * @retval None
01157   */
01158 __STATIC_INLINE void LL_RCC_ConfigMCO(uint32_t MCOxSource)
01159 {
01160   MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL, MCOxSource);
01161 }
01162 
01163 /**
01164   * @}
01165   */
01166 
01167 /** @defgroup RCC_LL_EF_Peripheral_Clock_Source Peripheral Clock Source
01168   * @{
01169   */
01170 
01171 #if defined(RCC_CFGR2_I2S2SRC)
01172 /**
01173   * @brief  Configure I2Sx clock source
01174   * @rmtoll CFGR2        I2S2SRC       LL_RCC_SetI2SClockSource\n
01175   *         CFGR2        I2S3SRC       LL_RCC_SetI2SClockSource
01176   * @param  I2SxSource This parameter can be one of the following values:
01177   *         @arg @ref LL_RCC_I2S2_CLKSOURCE_SYSCLK
01178   *         @arg @ref LL_RCC_I2S2_CLKSOURCE_PLLI2S_VCO
01179   *         @arg @ref LL_RCC_I2S3_CLKSOURCE_SYSCLK
01180   *         @arg @ref LL_RCC_I2S3_CLKSOURCE_PLLI2S_VCO
01181   * @retval None
01182   */
01183 __STATIC_INLINE void LL_RCC_SetI2SClockSource(uint32_t I2SxSource)
01184 {
01185   MODIFY_REG(RCC->CFGR2, (I2SxSource & 0xFFFF0000U), (I2SxSource << 16U));
01186 }
01187 #endif /* RCC_CFGR2_I2S2SRC */
01188 
01189 #if defined(USB_OTG_FS) || defined(USB)
01190 /**
01191   * @brief  Configure USB clock source
01192   * @rmtoll CFGR         OTGFSPRE      LL_RCC_SetUSBClockSource\n
01193   *         CFGR         USBPRE        LL_RCC_SetUSBClockSource
01194   * @param  USBxSource This parameter can be one of the following values:
01195   *         @arg @ref LL_RCC_USB_CLKSOURCE_PLL (*)
01196   *         @arg @ref LL_RCC_USB_CLKSOURCE_PLL_DIV_1_5 (*)
01197   *         @arg @ref LL_RCC_USB_CLKSOURCE_PLL_DIV_2 (*)
01198   *         @arg @ref LL_RCC_USB_CLKSOURCE_PLL_DIV_3 (*)
01199   *
01200   *         (*) value not defined in all devices
01201   * @retval None
01202   */
01203 __STATIC_INLINE void LL_RCC_SetUSBClockSource(uint32_t USBxSource)
01204 {
01205 #if defined(RCC_CFGR_USBPRE)
01206   MODIFY_REG(RCC->CFGR, RCC_CFGR_USBPRE, USBxSource);
01207 #else /*RCC_CFGR_OTGFSPRE*/
01208   MODIFY_REG(RCC->CFGR, RCC_CFGR_OTGFSPRE, USBxSource);
01209 #endif /*RCC_CFGR_USBPRE*/
01210 }
01211 #endif /* USB_OTG_FS || USB */
01212 
01213 /**
01214   * @brief  Configure ADC clock source
01215   * @rmtoll CFGR         ADCPRE        LL_RCC_SetADCClockSource
01216   * @param  ADCxSource This parameter can be one of the following values:
01217   *         @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_2
01218   *         @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_4
01219   *         @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_6
01220   *         @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_8
01221   * @retval None
01222   */
01223 __STATIC_INLINE void LL_RCC_SetADCClockSource(uint32_t ADCxSource)
01224 {
01225   MODIFY_REG(RCC->CFGR, RCC_CFGR_ADCPRE, ADCxSource);
01226 }
01227 
01228 #if defined(RCC_CFGR2_I2S2SRC)
01229 /**
01230   * @brief  Get I2Sx clock source
01231   * @rmtoll CFGR2        I2S2SRC       LL_RCC_GetI2SClockSource\n
01232   *         CFGR2        I2S3SRC       LL_RCC_GetI2SClockSource
01233   * @param  I2Sx This parameter can be one of the following values:
01234   *         @arg @ref LL_RCC_I2S2_CLKSOURCE
01235   *         @arg @ref LL_RCC_I2S3_CLKSOURCE
01236   * @retval Returned value can be one of the following values:
01237   *         @arg @ref LL_RCC_I2S2_CLKSOURCE_SYSCLK
01238   *         @arg @ref LL_RCC_I2S2_CLKSOURCE_PLLI2S_VCO
01239   *         @arg @ref LL_RCC_I2S3_CLKSOURCE_SYSCLK
01240   *         @arg @ref LL_RCC_I2S3_CLKSOURCE_PLLI2S_VCO
01241   */
01242 __STATIC_INLINE uint32_t LL_RCC_GetI2SClockSource(uint32_t I2Sx)
01243 {
01244   return (uint32_t)(READ_BIT(RCC->CFGR2, I2Sx) >> 16U | I2Sx);
01245 }
01246 #endif /* RCC_CFGR2_I2S2SRC */
01247 
01248 #if defined(USB_OTG_FS) || defined(USB)
01249 /**
01250   * @brief  Get USBx clock source
01251   * @rmtoll CFGR         OTGFSPRE      LL_RCC_GetUSBClockSource\n
01252   *         CFGR         USBPRE        LL_RCC_GetUSBClockSource
01253   * @param  USBx This parameter can be one of the following values:
01254   *         @arg @ref LL_RCC_USB_CLKSOURCE
01255   * @retval Returned value can be one of the following values:
01256   *         @arg @ref LL_RCC_USB_CLKSOURCE_PLL (*)
01257   *         @arg @ref LL_RCC_USB_CLKSOURCE_PLL_DIV_1_5 (*)
01258   *         @arg @ref LL_RCC_USB_CLKSOURCE_PLL_DIV_2 (*)
01259   *         @arg @ref LL_RCC_USB_CLKSOURCE_PLL_DIV_3 (*)
01260   *
01261   *         (*) value not defined in all devices
01262   */
01263 __STATIC_INLINE uint32_t LL_RCC_GetUSBClockSource(uint32_t USBx)
01264 {
01265   return (uint32_t)(READ_BIT(RCC->CFGR, USBx));
01266 }
01267 #endif /* USB_OTG_FS || USB */
01268 
01269 /**
01270   * @brief  Get ADCx clock source
01271   * @rmtoll CFGR         ADCPRE        LL_RCC_GetADCClockSource
01272   * @param  ADCx This parameter can be one of the following values:
01273   *         @arg @ref LL_RCC_ADC_CLKSOURCE
01274   * @retval Returned value can be one of the following values:
01275   *         @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_2
01276   *         @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_4
01277   *         @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_6
01278   *         @arg @ref LL_RCC_ADC_CLKSRC_PCLK2_DIV_8
01279   */
01280 __STATIC_INLINE uint32_t LL_RCC_GetADCClockSource(uint32_t ADCx)
01281 {
01282   return (uint32_t)(READ_BIT(RCC->CFGR, ADCx));
01283 }
01284 
01285 /**
01286   * @}
01287   */
01288 
01289 /** @defgroup RCC_LL_EF_RTC RTC
01290   * @{
01291   */
01292 
01293 /**
01294   * @brief  Set RTC Clock Source
01295   * @note Once the RTC clock source has been selected, it cannot be changed any more unless
01296   *       the Backup domain is reset. The BDRST bit can be used to reset them.
01297   * @rmtoll BDCR         RTCSEL        LL_RCC_SetRTCClockSource
01298   * @param  Source This parameter can be one of the following values:
01299   *         @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
01300   *         @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
01301   *         @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
01302   *         @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV128
01303   * @retval None
01304   */
01305 __STATIC_INLINE void LL_RCC_SetRTCClockSource(uint32_t Source)
01306 {
01307   MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, Source);
01308 }
01309 
01310 /**
01311   * @brief  Get RTC Clock Source
01312   * @rmtoll BDCR         RTCSEL        LL_RCC_GetRTCClockSource
01313   * @retval Returned value can be one of the following values:
01314   *         @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
01315   *         @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
01316   *         @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
01317   *         @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV128
01318   */
01319 __STATIC_INLINE uint32_t LL_RCC_GetRTCClockSource(void)
01320 {
01321   return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL));
01322 }
01323 
01324 /**
01325   * @brief  Enable RTC
01326   * @rmtoll BDCR         RTCEN         LL_RCC_EnableRTC
01327   * @retval None
01328   */
01329 __STATIC_INLINE void LL_RCC_EnableRTC(void)
01330 {
01331   SET_BIT(RCC->BDCR, RCC_BDCR_RTCEN);
01332 }
01333 
01334 /**
01335   * @brief  Disable RTC
01336   * @rmtoll BDCR         RTCEN         LL_RCC_DisableRTC
01337   * @retval None
01338   */
01339 __STATIC_INLINE void LL_RCC_DisableRTC(void)
01340 {
01341   CLEAR_BIT(RCC->BDCR, RCC_BDCR_RTCEN);
01342 }
01343 
01344 /**
01345   * @brief  Check if RTC has been enabled or not
01346   * @rmtoll BDCR         RTCEN         LL_RCC_IsEnabledRTC
01347   * @retval State of bit (1 or 0).
01348   */
01349 __STATIC_INLINE uint32_t LL_RCC_IsEnabledRTC(void)
01350 {
01351   return (READ_BIT(RCC->BDCR, RCC_BDCR_RTCEN) == (RCC_BDCR_RTCEN));
01352 }
01353 
01354 /**
01355   * @brief  Force the Backup domain reset
01356   * @rmtoll BDCR         BDRST         LL_RCC_ForceBackupDomainReset
01357   * @retval None
01358   */
01359 __STATIC_INLINE void LL_RCC_ForceBackupDomainReset(void)
01360 {
01361   SET_BIT(RCC->BDCR, RCC_BDCR_BDRST);
01362 }
01363 
01364 /**
01365   * @brief  Release the Backup domain reset
01366   * @rmtoll BDCR         BDRST         LL_RCC_ReleaseBackupDomainReset
01367   * @retval None
01368   */
01369 __STATIC_INLINE void LL_RCC_ReleaseBackupDomainReset(void)
01370 {
01371   CLEAR_BIT(RCC->BDCR, RCC_BDCR_BDRST);
01372 }
01373 
01374 /**
01375   * @}
01376   */
01377 
01378 /** @defgroup RCC_LL_EF_PLL PLL
01379   * @{
01380   */
01381 
01382 /**
01383   * @brief  Enable PLL
01384   * @rmtoll CR           PLLON         LL_RCC_PLL_Enable
01385   * @retval None
01386   */
01387 __STATIC_INLINE void LL_RCC_PLL_Enable(void)
01388 {
01389   SET_BIT(RCC->CR, RCC_CR_PLLON);
01390 }
01391 
01392 /**
01393   * @brief  Disable PLL
01394   * @note Cannot be disabled if the PLL clock is used as the system clock
01395   * @rmtoll CR           PLLON         LL_RCC_PLL_Disable
01396   * @retval None
01397   */
01398 __STATIC_INLINE void LL_RCC_PLL_Disable(void)
01399 {
01400   CLEAR_BIT(RCC->CR, RCC_CR_PLLON);
01401 }
01402 
01403 /**
01404   * @brief  Check if PLL Ready
01405   * @rmtoll CR           PLLRDY        LL_RCC_PLL_IsReady
01406   * @retval State of bit (1 or 0).
01407   */
01408 __STATIC_INLINE uint32_t LL_RCC_PLL_IsReady(void)
01409 {
01410   return (READ_BIT(RCC->CR, RCC_CR_PLLRDY) == (RCC_CR_PLLRDY));
01411 }
01412 
01413 /**
01414   * @brief  Configure PLL used for SYSCLK Domain
01415   * @rmtoll CFGR         PLLSRC        LL_RCC_PLL_ConfigDomain_SYS\n
01416   *         CFGR         PLLXTPRE      LL_RCC_PLL_ConfigDomain_SYS\n
01417   *         CFGR         PLLMULL       LL_RCC_PLL_ConfigDomain_SYS\n
01418   *         CFGR2        PREDIV1       LL_RCC_PLL_ConfigDomain_SYS\n
01419   *         CFGR2        PREDIV1SRC    LL_RCC_PLL_ConfigDomain_SYS
01420   * @param  Source This parameter can be one of the following values:
01421   *         @arg @ref LL_RCC_PLLSOURCE_HSI_DIV_2
01422   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_1
01423   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_2 (*)
01424   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_3 (*)
01425   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_4 (*)
01426   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_5 (*)
01427   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_6 (*)
01428   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_7 (*)
01429   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_8 (*)
01430   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_9 (*)
01431   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_10 (*)
01432   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_11 (*)
01433   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_12 (*)
01434   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_13 (*)
01435   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_14 (*)
01436   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_15 (*)
01437   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_16 (*)
01438   *         @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_1 (*)
01439   *         @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_2 (*)
01440   *         @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_3 (*)
01441   *         @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_4 (*)
01442   *         @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_5 (*)
01443   *         @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_6 (*)
01444   *         @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_7 (*)
01445   *         @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_8 (*)
01446   *         @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_9 (*)
01447   *         @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_10 (*)
01448   *         @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_11 (*)
01449   *         @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_12 (*)
01450   *         @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_13 (*)
01451   *         @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_14 (*)
01452   *         @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_15 (*)
01453   *         @arg @ref LL_RCC_PLLSOURCE_PLL2_DIV_16 (*)
01454   *
01455   *         (*) value not defined in all devices
01456   * @param  PLLMul This parameter can be one of the following values:
01457   *         @arg @ref LL_RCC_PLL_MUL_2 (*)
01458   *         @arg @ref LL_RCC_PLL_MUL_3 (*)
01459   *         @arg @ref LL_RCC_PLL_MUL_4
01460   *         @arg @ref LL_RCC_PLL_MUL_5
01461   *         @arg @ref LL_RCC_PLL_MUL_6
01462   *         @arg @ref LL_RCC_PLL_MUL_7
01463   *         @arg @ref LL_RCC_PLL_MUL_8
01464   *         @arg @ref LL_RCC_PLL_MUL_9
01465   *         @arg @ref LL_RCC_PLL_MUL_6_5 (*)
01466   *         @arg @ref LL_RCC_PLL_MUL_10 (*)
01467   *         @arg @ref LL_RCC_PLL_MUL_11 (*)
01468   *         @arg @ref LL_RCC_PLL_MUL_12 (*)
01469   *         @arg @ref LL_RCC_PLL_MUL_13 (*)
01470   *         @arg @ref LL_RCC_PLL_MUL_14 (*)
01471   *         @arg @ref LL_RCC_PLL_MUL_15 (*)
01472   *         @arg @ref LL_RCC_PLL_MUL_16 (*)
01473   *
01474   *         (*) value not defined in all devices
01475   * @retval None
01476   */
01477 __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLMul)
01478 {
01479   MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL,
01480              (Source & (RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE)) | PLLMul);
01481 #if defined(RCC_CFGR2_PREDIV1)
01482 #if defined(RCC_CFGR2_PREDIV1SRC)
01483   MODIFY_REG(RCC->CFGR2, (RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC),
01484              (Source & RCC_CFGR2_PREDIV1) | ((Source & (RCC_CFGR2_PREDIV1SRC << 4U)) >> 4U));
01485 #else
01486   MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV1, (Source & RCC_CFGR2_PREDIV1));
01487 #endif /*RCC_CFGR2_PREDIV1SRC*/
01488 #endif /*RCC_CFGR2_PREDIV1*/
01489 }
01490 
01491 /**
01492   * @brief  Configure PLL clock source
01493   * @rmtoll CFGR      PLLSRC        LL_RCC_PLL_SetMainSource\n
01494   *         CFGR2     PREDIV1SRC    LL_RCC_PLL_SetMainSource
01495   * @param PLLSource This parameter can be one of the following values:
01496   *         @arg @ref LL_RCC_PLLSOURCE_HSI_DIV_2
01497   *         @arg @ref LL_RCC_PLLSOURCE_HSE
01498   *         @arg @ref LL_RCC_PLLSOURCE_PLL2 (*)
01499   * @retval None
01500   */
01501 __STATIC_INLINE void LL_RCC_PLL_SetMainSource(uint32_t PLLSource)
01502 {
01503 #if defined(RCC_CFGR2_PREDIV1SRC)
01504   MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC, ((PLLSource & (RCC_CFGR2_PREDIV1SRC << 4U)) >> 4U));
01505 #endif /* RCC_CFGR2_PREDIV1SRC */
01506   MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLSRC, PLLSource);
01507 }
01508 
01509 /**
01510   * @brief  Get the oscillator used as PLL clock source.
01511   * @rmtoll CFGR         PLLSRC        LL_RCC_PLL_GetMainSource\n
01512   *         CFGR2        PREDIV1SRC    LL_RCC_PLL_GetMainSource
01513   * @retval Returned value can be one of the following values:
01514   *         @arg @ref LL_RCC_PLLSOURCE_HSI_DIV_2
01515   *         @arg @ref LL_RCC_PLLSOURCE_HSE
01516   *         @arg @ref LL_RCC_PLLSOURCE_PLL2 (*)
01517   *
01518   *         (*) value not defined in all devices
01519   */
01520 __STATIC_INLINE uint32_t LL_RCC_PLL_GetMainSource(void)
01521 {
01522 #if defined(RCC_CFGR2_PREDIV1SRC)
01523   uint32_t pllsrc = READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC);
01524   uint32_t predivsrc = (uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC) << 4U);
01525   return (uint32_t)(pllsrc | predivsrc);
01526 #else
01527   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC));
01528 #endif /*RCC_CFGR2_PREDIV1SRC*/
01529 }
01530 
01531 /**
01532   * @brief  Get PLL multiplication Factor
01533   * @rmtoll CFGR         PLLMULL       LL_RCC_PLL_GetMultiplicator
01534   * @retval Returned value can be one of the following values:
01535   *         @arg @ref LL_RCC_PLL_MUL_2 (*)
01536   *         @arg @ref LL_RCC_PLL_MUL_3 (*)
01537   *         @arg @ref LL_RCC_PLL_MUL_4
01538   *         @arg @ref LL_RCC_PLL_MUL_5
01539   *         @arg @ref LL_RCC_PLL_MUL_6
01540   *         @arg @ref LL_RCC_PLL_MUL_7
01541   *         @arg @ref LL_RCC_PLL_MUL_8
01542   *         @arg @ref LL_RCC_PLL_MUL_9
01543   *         @arg @ref LL_RCC_PLL_MUL_6_5 (*)
01544   *         @arg @ref LL_RCC_PLL_MUL_10 (*)
01545   *         @arg @ref LL_RCC_PLL_MUL_11 (*)
01546   *         @arg @ref LL_RCC_PLL_MUL_12 (*)
01547   *         @arg @ref LL_RCC_PLL_MUL_13 (*)
01548   *         @arg @ref LL_RCC_PLL_MUL_14 (*)
01549   *         @arg @ref LL_RCC_PLL_MUL_15 (*)
01550   *         @arg @ref LL_RCC_PLL_MUL_16 (*)
01551   *
01552   *         (*) value not defined in all devices
01553   */
01554 __STATIC_INLINE uint32_t LL_RCC_PLL_GetMultiplicator(void)
01555 {
01556   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLMULL));
01557 }
01558 
01559 /**
01560   * @brief  Get PREDIV1 division factor for the main PLL
01561   * @note They can be written only when the PLL is disabled
01562   * @rmtoll CFGR2        PREDIV1       LL_RCC_PLL_GetPrediv\n
01563   *         CFGR2        PLLXTPRE      LL_RCC_PLL_GetPrediv
01564   * @retval Returned value can be one of the following values:
01565   *         @arg @ref LL_RCC_PREDIV_DIV_1
01566   *         @arg @ref LL_RCC_PREDIV_DIV_2
01567   *         @arg @ref LL_RCC_PREDIV_DIV_3 (*)
01568   *         @arg @ref LL_RCC_PREDIV_DIV_4 (*)
01569   *         @arg @ref LL_RCC_PREDIV_DIV_5 (*)
01570   *         @arg @ref LL_RCC_PREDIV_DIV_6 (*)
01571   *         @arg @ref LL_RCC_PREDIV_DIV_7 (*)
01572   *         @arg @ref LL_RCC_PREDIV_DIV_8 (*)
01573   *         @arg @ref LL_RCC_PREDIV_DIV_9 (*)
01574   *         @arg @ref LL_RCC_PREDIV_DIV_10 (*)
01575   *         @arg @ref LL_RCC_PREDIV_DIV_11 (*)
01576   *         @arg @ref LL_RCC_PREDIV_DIV_12 (*)
01577   *         @arg @ref LL_RCC_PREDIV_DIV_13 (*)
01578   *         @arg @ref LL_RCC_PREDIV_DIV_14 (*)
01579   *         @arg @ref LL_RCC_PREDIV_DIV_15 (*)
01580   *         @arg @ref LL_RCC_PREDIV_DIV_16 (*)
01581   *
01582   *         (*) value not defined in all devices
01583   */
01584 __STATIC_INLINE uint32_t LL_RCC_PLL_GetPrediv(void)
01585 {
01586 #if defined(RCC_CFGR2_PREDIV1)
01587   return (uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1));
01588 #else
01589   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLXTPRE) >> RCC_CFGR_PLLXTPRE_Pos);
01590 #endif /*RCC_CFGR2_PREDIV1*/
01591 }
01592 
01593 /**
01594   * @}
01595   */
01596 
01597 #if defined(RCC_PLLI2S_SUPPORT)
01598 /** @defgroup RCC_LL_EF_PLLI2S PLLI2S
01599   * @{
01600   */
01601 
01602 /**
01603   * @brief  Enable PLLI2S
01604   * @rmtoll CR           PLL3ON        LL_RCC_PLLI2S_Enable
01605   * @retval None
01606   */
01607 __STATIC_INLINE void LL_RCC_PLLI2S_Enable(void)
01608 {
01609   SET_BIT(RCC->CR, RCC_CR_PLL3ON);
01610 }
01611 
01612 /**
01613   * @brief  Disable PLLI2S
01614   * @rmtoll CR           PLL3ON        LL_RCC_PLLI2S_Disable
01615   * @retval None
01616   */
01617 __STATIC_INLINE void LL_RCC_PLLI2S_Disable(void)
01618 {
01619   CLEAR_BIT(RCC->CR, RCC_CR_PLL3ON);
01620 }
01621 
01622 /**
01623   * @brief  Check if PLLI2S Ready
01624   * @rmtoll CR           PLL3RDY       LL_RCC_PLLI2S_IsReady
01625   * @retval State of bit (1 or 0).
01626   */
01627 __STATIC_INLINE uint32_t LL_RCC_PLLI2S_IsReady(void)
01628 {
01629   return (READ_BIT(RCC->CR, RCC_CR_PLL3RDY) == (RCC_CR_PLL3RDY));
01630 }
01631 
01632 /**
01633   * @brief  Configure PLLI2S used for I2S Domain
01634   * @rmtoll CFGR2        PREDIV2       LL_RCC_PLL_ConfigDomain_PLLI2S\n
01635   *         CFGR2        PLL3MUL       LL_RCC_PLL_ConfigDomain_PLLI2S
01636   * @param  Divider This parameter can be one of the following values:
01637   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_1
01638   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_2
01639   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_3
01640   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_4
01641   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_5
01642   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_6
01643   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_7
01644   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_8
01645   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_9
01646   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_10
01647   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_11
01648   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_12
01649   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_13
01650   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_14
01651   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_15
01652   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_16
01653   * @param  Multiplicator This parameter can be one of the following values:
01654   *         @arg @ref LL_RCC_PLLI2S_MUL_8
01655   *         @arg @ref LL_RCC_PLLI2S_MUL_9
01656   *         @arg @ref LL_RCC_PLLI2S_MUL_10
01657   *         @arg @ref LL_RCC_PLLI2S_MUL_11
01658   *         @arg @ref LL_RCC_PLLI2S_MUL_12
01659   *         @arg @ref LL_RCC_PLLI2S_MUL_13
01660   *         @arg @ref LL_RCC_PLLI2S_MUL_14
01661   *         @arg @ref LL_RCC_PLLI2S_MUL_16
01662   *         @arg @ref LL_RCC_PLLI2S_MUL_20
01663   * @retval None
01664   */
01665 __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_PLLI2S(uint32_t Divider, uint32_t Multiplicator)
01666 {
01667   MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL3MUL, Divider | Multiplicator);
01668 }
01669 
01670 /**
01671   * @brief  Get PLLI2S Multiplication Factor
01672   * @rmtoll CFGR2        PLL3MUL       LL_RCC_PLLI2S_GetMultiplicator
01673   * @retval Returned value can be one of the following values:
01674   *         @arg @ref LL_RCC_PLLI2S_MUL_8
01675   *         @arg @ref LL_RCC_PLLI2S_MUL_9
01676   *         @arg @ref LL_RCC_PLLI2S_MUL_10
01677   *         @arg @ref LL_RCC_PLLI2S_MUL_11
01678   *         @arg @ref LL_RCC_PLLI2S_MUL_12
01679   *         @arg @ref LL_RCC_PLLI2S_MUL_13
01680   *         @arg @ref LL_RCC_PLLI2S_MUL_14
01681   *         @arg @ref LL_RCC_PLLI2S_MUL_16
01682   *         @arg @ref LL_RCC_PLLI2S_MUL_20
01683   */
01684 __STATIC_INLINE uint32_t LL_RCC_PLLI2S_GetMultiplicator(void)
01685 {
01686   return (uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_PLL3MUL));
01687 }
01688 
01689 /**
01690   * @}
01691   */
01692 #endif /* RCC_PLLI2S_SUPPORT */
01693 
01694 #if defined(RCC_PLL2_SUPPORT)
01695 /** @defgroup RCC_LL_EF_PLL2 PLL2
01696   * @{
01697   */
01698 
01699 /**
01700   * @brief  Enable PLL2
01701   * @rmtoll CR           PLL2ON        LL_RCC_PLL2_Enable
01702   * @retval None
01703   */
01704 __STATIC_INLINE void LL_RCC_PLL2_Enable(void)
01705 {
01706   SET_BIT(RCC->CR, RCC_CR_PLL2ON);
01707 }
01708 
01709 /**
01710   * @brief  Disable PLL2
01711   * @rmtoll CR           PLL2ON        LL_RCC_PLL2_Disable
01712   * @retval None
01713   */
01714 __STATIC_INLINE void LL_RCC_PLL2_Disable(void)
01715 {
01716   CLEAR_BIT(RCC->CR, RCC_CR_PLL2ON);
01717 }
01718 
01719 /**
01720   * @brief  Check if PLL2 Ready
01721   * @rmtoll CR           PLL2RDY       LL_RCC_PLL2_IsReady
01722   * @retval State of bit (1 or 0).
01723   */
01724 __STATIC_INLINE uint32_t LL_RCC_PLL2_IsReady(void)
01725 {
01726   return (READ_BIT(RCC->CR, RCC_CR_PLL2RDY) == (RCC_CR_PLL2RDY));
01727 }
01728 
01729 /**
01730   * @brief  Configure PLL2 used for PLL2 Domain
01731   * @rmtoll CFGR2        PREDIV2       LL_RCC_PLL_ConfigDomain_PLL2\n
01732   *         CFGR2        PLL2MUL       LL_RCC_PLL_ConfigDomain_PLL2
01733   * @param  Divider This parameter can be one of the following values:
01734   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_1
01735   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_2
01736   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_3
01737   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_4
01738   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_5
01739   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_6
01740   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_7
01741   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_8
01742   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_9
01743   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_10
01744   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_11
01745   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_12
01746   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_13
01747   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_14
01748   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_15
01749   *         @arg @ref LL_RCC_HSE_PREDIV2_DIV_16
01750   * @param  Multiplicator This parameter can be one of the following values:
01751   *         @arg @ref LL_RCC_PLL2_MUL_8
01752   *         @arg @ref LL_RCC_PLL2_MUL_9
01753   *         @arg @ref LL_RCC_PLL2_MUL_10
01754   *         @arg @ref LL_RCC_PLL2_MUL_11
01755   *         @arg @ref LL_RCC_PLL2_MUL_12
01756   *         @arg @ref LL_RCC_PLL2_MUL_13
01757   *         @arg @ref LL_RCC_PLL2_MUL_14
01758   *         @arg @ref LL_RCC_PLL2_MUL_16
01759   *         @arg @ref LL_RCC_PLL2_MUL_20
01760   * @retval None
01761   */
01762 __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_PLL2(uint32_t Divider, uint32_t Multiplicator)
01763 {
01764   MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL, Divider | Multiplicator);
01765 }
01766 
01767 /**
01768   * @brief  Get PLL2 Multiplication Factor
01769   * @rmtoll CFGR2        PLL2MUL       LL_RCC_PLL2_GetMultiplicator
01770   * @retval Returned value can be one of the following values:
01771   *         @arg @ref LL_RCC_PLL2_MUL_8
01772   *         @arg @ref LL_RCC_PLL2_MUL_9
01773   *         @arg @ref LL_RCC_PLL2_MUL_10
01774   *         @arg @ref LL_RCC_PLL2_MUL_11
01775   *         @arg @ref LL_RCC_PLL2_MUL_12
01776   *         @arg @ref LL_RCC_PLL2_MUL_13
01777   *         @arg @ref LL_RCC_PLL2_MUL_14
01778   *         @arg @ref LL_RCC_PLL2_MUL_16
01779   *         @arg @ref LL_RCC_PLL2_MUL_20
01780   */
01781 __STATIC_INLINE uint32_t LL_RCC_PLL2_GetMultiplicator(void)
01782 {
01783   return (uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_PLL2MUL));
01784 }
01785 
01786 /**
01787   * @}
01788   */
01789 #endif /* RCC_PLL2_SUPPORT */
01790 
01791 /** @defgroup RCC_LL_EF_FLAG_Management FLAG Management
01792   * @{
01793   */
01794 
01795 /**
01796   * @brief  Clear LSI ready interrupt flag
01797   * @rmtoll CIR         LSIRDYC       LL_RCC_ClearFlag_LSIRDY
01798   * @retval None
01799   */
01800 __STATIC_INLINE void LL_RCC_ClearFlag_LSIRDY(void)
01801 {
01802   SET_BIT(RCC->CIR, RCC_CIR_LSIRDYC);
01803 }
01804 
01805 /**
01806   * @brief  Clear LSE ready interrupt flag
01807   * @rmtoll CIR         LSERDYC       LL_RCC_ClearFlag_LSERDY
01808   * @retval None
01809   */
01810 __STATIC_INLINE void LL_RCC_ClearFlag_LSERDY(void)
01811 {
01812   SET_BIT(RCC->CIR, RCC_CIR_LSERDYC);
01813 }
01814 
01815 /**
01816   * @brief  Clear HSI ready interrupt flag
01817   * @rmtoll CIR         HSIRDYC       LL_RCC_ClearFlag_HSIRDY
01818   * @retval None
01819   */
01820 __STATIC_INLINE void LL_RCC_ClearFlag_HSIRDY(void)
01821 {
01822   SET_BIT(RCC->CIR, RCC_CIR_HSIRDYC);
01823 }
01824 
01825 /**
01826   * @brief  Clear HSE ready interrupt flag
01827   * @rmtoll CIR         HSERDYC       LL_RCC_ClearFlag_HSERDY
01828   * @retval None
01829   */
01830 __STATIC_INLINE void LL_RCC_ClearFlag_HSERDY(void)
01831 {
01832   SET_BIT(RCC->CIR, RCC_CIR_HSERDYC);
01833 }
01834 
01835 /**
01836   * @brief  Clear PLL ready interrupt flag
01837   * @rmtoll CIR         PLLRDYC       LL_RCC_ClearFlag_PLLRDY
01838   * @retval None
01839   */
01840 __STATIC_INLINE void LL_RCC_ClearFlag_PLLRDY(void)
01841 {
01842   SET_BIT(RCC->CIR, RCC_CIR_PLLRDYC);
01843 }
01844 
01845 #if defined(RCC_PLLI2S_SUPPORT)
01846 /**
01847   * @brief  Clear PLLI2S ready interrupt flag
01848   * @rmtoll CIR          PLL3RDYC      LL_RCC_ClearFlag_PLLI2SRDY
01849   * @retval None
01850   */
01851 __STATIC_INLINE void LL_RCC_ClearFlag_PLLI2SRDY(void)
01852 {
01853   SET_BIT(RCC->CIR, RCC_CIR_PLL3RDYC);
01854 }
01855 #endif /* RCC_PLLI2S_SUPPORT */
01856 
01857 #if defined(RCC_PLL2_SUPPORT)
01858 /**
01859   * @brief  Clear PLL2 ready interrupt flag
01860   * @rmtoll CIR          PLL2RDYC      LL_RCC_ClearFlag_PLL2RDY
01861   * @retval None
01862   */
01863 __STATIC_INLINE void LL_RCC_ClearFlag_PLL2RDY(void)
01864 {
01865   SET_BIT(RCC->CIR, RCC_CIR_PLL2RDYC);
01866 }
01867 #endif /* RCC_PLL2_SUPPORT */
01868 
01869 /**
01870   * @brief  Clear Clock security system interrupt flag
01871   * @rmtoll CIR         CSSC          LL_RCC_ClearFlag_HSECSS
01872   * @retval None
01873   */
01874 __STATIC_INLINE void LL_RCC_ClearFlag_HSECSS(void)
01875 {
01876   SET_BIT(RCC->CIR, RCC_CIR_CSSC);
01877 }
01878 
01879 /**
01880   * @brief  Check if LSI ready interrupt occurred or not
01881   * @rmtoll CIR         LSIRDYF       LL_RCC_IsActiveFlag_LSIRDY
01882   * @retval State of bit (1 or 0).
01883   */
01884 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSIRDY(void)
01885 {
01886   return (READ_BIT(RCC->CIR, RCC_CIR_LSIRDYF) == (RCC_CIR_LSIRDYF));
01887 }
01888 
01889 /**
01890   * @brief  Check if LSE ready interrupt occurred or not
01891   * @rmtoll CIR         LSERDYF       LL_RCC_IsActiveFlag_LSERDY
01892   * @retval State of bit (1 or 0).
01893   */
01894 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSERDY(void)
01895 {
01896   return (READ_BIT(RCC->CIR, RCC_CIR_LSERDYF) == (RCC_CIR_LSERDYF));
01897 }
01898 
01899 /**
01900   * @brief  Check if HSI ready interrupt occurred or not
01901   * @rmtoll CIR         HSIRDYF       LL_RCC_IsActiveFlag_HSIRDY
01902   * @retval State of bit (1 or 0).
01903   */
01904 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSIRDY(void)
01905 {
01906   return (READ_BIT(RCC->CIR, RCC_CIR_HSIRDYF) == (RCC_CIR_HSIRDYF));
01907 }
01908 
01909 /**
01910   * @brief  Check if HSE ready interrupt occurred or not
01911   * @rmtoll CIR         HSERDYF       LL_RCC_IsActiveFlag_HSERDY
01912   * @retval State of bit (1 or 0).
01913   */
01914 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSERDY(void)
01915 {
01916   return (READ_BIT(RCC->CIR, RCC_CIR_HSERDYF) == (RCC_CIR_HSERDYF));
01917 }
01918 
01919 /**
01920   * @brief  Check if PLL ready interrupt occurred or not
01921   * @rmtoll CIR         PLLRDYF       LL_RCC_IsActiveFlag_PLLRDY
01922   * @retval State of bit (1 or 0).
01923   */
01924 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLRDY(void)
01925 {
01926   return (READ_BIT(RCC->CIR, RCC_CIR_PLLRDYF) == (RCC_CIR_PLLRDYF));
01927 }
01928 
01929 #if defined(RCC_PLLI2S_SUPPORT)
01930 /**
01931   * @brief  Check if PLLI2S ready interrupt occurred or not
01932   * @rmtoll CIR          PLL3RDYF      LL_RCC_IsActiveFlag_PLLI2SRDY
01933   * @retval State of bit (1 or 0).
01934   */
01935 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLI2SRDY(void)
01936 {
01937   return (READ_BIT(RCC->CIR, RCC_CIR_PLL3RDYF) == (RCC_CIR_PLL3RDYF));
01938 }
01939 #endif /* RCC_PLLI2S_SUPPORT */
01940 
01941 #if defined(RCC_PLL2_SUPPORT)
01942 /**
01943   * @brief  Check if PLL2 ready interrupt occurred or not
01944   * @rmtoll CIR          PLL2RDYF      LL_RCC_IsActiveFlag_PLL2RDY
01945   * @retval State of bit (1 or 0).
01946   */
01947 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLL2RDY(void)
01948 {
01949   return (READ_BIT(RCC->CIR, RCC_CIR_PLL2RDYF) == (RCC_CIR_PLL2RDYF));
01950 }
01951 #endif /* RCC_PLL2_SUPPORT */
01952 
01953 /**
01954   * @brief  Check if Clock security system interrupt occurred or not
01955   * @rmtoll CIR         CSSF          LL_RCC_IsActiveFlag_HSECSS
01956   * @retval State of bit (1 or 0).
01957   */
01958 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSECSS(void)
01959 {
01960   return (READ_BIT(RCC->CIR, RCC_CIR_CSSF) == (RCC_CIR_CSSF));
01961 }
01962 
01963 /**
01964   * @brief  Check if RCC flag Independent Watchdog reset is set or not.
01965   * @rmtoll CSR          IWDGRSTF      LL_RCC_IsActiveFlag_IWDGRST
01966   * @retval State of bit (1 or 0).
01967   */
01968 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_IWDGRST(void)
01969 {
01970   return (READ_BIT(RCC->CSR, RCC_CSR_IWDGRSTF) == (RCC_CSR_IWDGRSTF));
01971 }
01972 
01973 /**
01974   * @brief  Check if RCC flag Low Power reset is set or not.
01975   * @rmtoll CSR          LPWRRSTF      LL_RCC_IsActiveFlag_LPWRRST
01976   * @retval State of bit (1 or 0).
01977   */
01978 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LPWRRST(void)
01979 {
01980   return (READ_BIT(RCC->CSR, RCC_CSR_LPWRRSTF) == (RCC_CSR_LPWRRSTF));
01981 }
01982 
01983 /**
01984   * @brief  Check if RCC flag Pin reset is set or not.
01985   * @rmtoll CSR          PINRSTF       LL_RCC_IsActiveFlag_PINRST
01986   * @retval State of bit (1 or 0).
01987   */
01988 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PINRST(void)
01989 {
01990   return (READ_BIT(RCC->CSR, RCC_CSR_PINRSTF) == (RCC_CSR_PINRSTF));
01991 }
01992 
01993 /**
01994   * @brief  Check if RCC flag POR/PDR reset is set or not.
01995   * @rmtoll CSR          PORRSTF       LL_RCC_IsActiveFlag_PORRST
01996   * @retval State of bit (1 or 0).
01997   */
01998 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PORRST(void)
01999 {
02000   return (READ_BIT(RCC->CSR, RCC_CSR_PORRSTF) == (RCC_CSR_PORRSTF));
02001 }
02002 
02003 /**
02004   * @brief  Check if RCC flag Software reset is set or not.
02005   * @rmtoll CSR          SFTRSTF       LL_RCC_IsActiveFlag_SFTRST
02006   * @retval State of bit (1 or 0).
02007   */
02008 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_SFTRST(void)
02009 {
02010   return (READ_BIT(RCC->CSR, RCC_CSR_SFTRSTF) == (RCC_CSR_SFTRSTF));
02011 }
02012 
02013 /**
02014   * @brief  Check if RCC flag Window Watchdog reset is set or not.
02015   * @rmtoll CSR          WWDGRSTF      LL_RCC_IsActiveFlag_WWDGRST
02016   * @retval State of bit (1 or 0).
02017   */
02018 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_WWDGRST(void)
02019 {
02020   return (READ_BIT(RCC->CSR, RCC_CSR_WWDGRSTF) == (RCC_CSR_WWDGRSTF));
02021 }
02022 
02023 /**
02024   * @brief  Set RMVF bit to clear the reset flags.
02025   * @rmtoll CSR          RMVF          LL_RCC_ClearResetFlags
02026   * @retval None
02027   */
02028 __STATIC_INLINE void LL_RCC_ClearResetFlags(void)
02029 {
02030   SET_BIT(RCC->CSR, RCC_CSR_RMVF);
02031 }
02032 
02033 /**
02034   * @}
02035   */
02036 
02037 /** @defgroup RCC_LL_EF_IT_Management IT Management
02038   * @{
02039   */
02040 
02041 /**
02042   * @brief  Enable LSI ready interrupt
02043   * @rmtoll CIR         LSIRDYIE      LL_RCC_EnableIT_LSIRDY
02044   * @retval None
02045   */
02046 __STATIC_INLINE void LL_RCC_EnableIT_LSIRDY(void)
02047 {
02048   SET_BIT(RCC->CIR, RCC_CIR_LSIRDYIE);
02049 }
02050 
02051 /**
02052   * @brief  Enable LSE ready interrupt
02053   * @rmtoll CIR         LSERDYIE      LL_RCC_EnableIT_LSERDY
02054   * @retval None
02055   */
02056 __STATIC_INLINE void LL_RCC_EnableIT_LSERDY(void)
02057 {
02058   SET_BIT(RCC->CIR, RCC_CIR_LSERDYIE);
02059 }
02060 
02061 /**
02062   * @brief  Enable HSI ready interrupt
02063   * @rmtoll CIR         HSIRDYIE      LL_RCC_EnableIT_HSIRDY
02064   * @retval None
02065   */
02066 __STATIC_INLINE void LL_RCC_EnableIT_HSIRDY(void)
02067 {
02068   SET_BIT(RCC->CIR, RCC_CIR_HSIRDYIE);
02069 }
02070 
02071 /**
02072   * @brief  Enable HSE ready interrupt
02073   * @rmtoll CIR         HSERDYIE      LL_RCC_EnableIT_HSERDY
02074   * @retval None
02075   */
02076 __STATIC_INLINE void LL_RCC_EnableIT_HSERDY(void)
02077 {
02078   SET_BIT(RCC->CIR, RCC_CIR_HSERDYIE);
02079 }
02080 
02081 /**
02082   * @brief  Enable PLL ready interrupt
02083   * @rmtoll CIR         PLLRDYIE      LL_RCC_EnableIT_PLLRDY
02084   * @retval None
02085   */
02086 __STATIC_INLINE void LL_RCC_EnableIT_PLLRDY(void)
02087 {
02088   SET_BIT(RCC->CIR, RCC_CIR_PLLRDYIE);
02089 }
02090 
02091 #if defined(RCC_PLLI2S_SUPPORT)
02092 /**
02093   * @brief  Enable PLLI2S ready interrupt
02094   * @rmtoll CIR          PLL3RDYIE     LL_RCC_EnableIT_PLLI2SRDY
02095   * @retval None
02096   */
02097 __STATIC_INLINE void LL_RCC_EnableIT_PLLI2SRDY(void)
02098 {
02099   SET_BIT(RCC->CIR, RCC_CIR_PLL3RDYIE);
02100 }
02101 #endif /* RCC_PLLI2S_SUPPORT */
02102 
02103 #if defined(RCC_PLL2_SUPPORT)
02104 /**
02105   * @brief  Enable PLL2 ready interrupt
02106   * @rmtoll CIR          PLL2RDYIE     LL_RCC_EnableIT_PLL2RDY
02107   * @retval None
02108   */
02109 __STATIC_INLINE void LL_RCC_EnableIT_PLL2RDY(void)
02110 {
02111   SET_BIT(RCC->CIR, RCC_CIR_PLL2RDYIE);
02112 }
02113 #endif /* RCC_PLL2_SUPPORT */
02114 
02115 /**
02116   * @brief  Disable LSI ready interrupt
02117   * @rmtoll CIR         LSIRDYIE      LL_RCC_DisableIT_LSIRDY
02118   * @retval None
02119   */
02120 __STATIC_INLINE void LL_RCC_DisableIT_LSIRDY(void)
02121 {
02122   CLEAR_BIT(RCC->CIR, RCC_CIR_LSIRDYIE);
02123 }
02124 
02125 /**
02126   * @brief  Disable LSE ready interrupt
02127   * @rmtoll CIR         LSERDYIE      LL_RCC_DisableIT_LSERDY
02128   * @retval None
02129   */
02130 __STATIC_INLINE void LL_RCC_DisableIT_LSERDY(void)
02131 {
02132   CLEAR_BIT(RCC->CIR, RCC_CIR_LSERDYIE);
02133 }
02134 
02135 /**
02136   * @brief  Disable HSI ready interrupt
02137   * @rmtoll CIR         HSIRDYIE      LL_RCC_DisableIT_HSIRDY
02138   * @retval None
02139   */
02140 __STATIC_INLINE void LL_RCC_DisableIT_HSIRDY(void)
02141 {
02142   CLEAR_BIT(RCC->CIR, RCC_CIR_HSIRDYIE);
02143 }
02144 
02145 /**
02146   * @brief  Disable HSE ready interrupt
02147   * @rmtoll CIR         HSERDYIE      LL_RCC_DisableIT_HSERDY
02148   * @retval None
02149   */
02150 __STATIC_INLINE void LL_RCC_DisableIT_HSERDY(void)
02151 {
02152   CLEAR_BIT(RCC->CIR, RCC_CIR_HSERDYIE);
02153 }
02154 
02155 /**
02156   * @brief  Disable PLL ready interrupt
02157   * @rmtoll CIR         PLLRDYIE      LL_RCC_DisableIT_PLLRDY
02158   * @retval None
02159   */
02160 __STATIC_INLINE void LL_RCC_DisableIT_PLLRDY(void)
02161 {
02162   CLEAR_BIT(RCC->CIR, RCC_CIR_PLLRDYIE);
02163 }
02164 
02165 #if defined(RCC_PLLI2S_SUPPORT)
02166 /**
02167   * @brief  Disable PLLI2S ready interrupt
02168   * @rmtoll CIR          PLL3RDYIE     LL_RCC_DisableIT_PLLI2SRDY
02169   * @retval None
02170   */
02171 __STATIC_INLINE void LL_RCC_DisableIT_PLLI2SRDY(void)
02172 {
02173   CLEAR_BIT(RCC->CIR, RCC_CIR_PLL3RDYIE);
02174 }
02175 #endif /* RCC_PLLI2S_SUPPORT */
02176 
02177 #if defined(RCC_PLL2_SUPPORT)
02178 /**
02179   * @brief  Disable PLL2 ready interrupt
02180   * @rmtoll CIR          PLL2RDYIE     LL_RCC_DisableIT_PLL2RDY
02181   * @retval None
02182   */
02183 __STATIC_INLINE void LL_RCC_DisableIT_PLL2RDY(void)
02184 {
02185   CLEAR_BIT(RCC->CIR, RCC_CIR_PLL2RDYIE);
02186 }
02187 #endif /* RCC_PLL2_SUPPORT */
02188 
02189 /**
02190   * @brief  Checks if LSI ready interrupt source is enabled or disabled.
02191   * @rmtoll CIR         LSIRDYIE      LL_RCC_IsEnabledIT_LSIRDY
02192   * @retval State of bit (1 or 0).
02193   */
02194 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSIRDY(void)
02195 {
02196   return (READ_BIT(RCC->CIR, RCC_CIR_LSIRDYIE) == (RCC_CIR_LSIRDYIE));
02197 }
02198 
02199 /**
02200   * @brief  Checks if LSE ready interrupt source is enabled or disabled.
02201   * @rmtoll CIR         LSERDYIE      LL_RCC_IsEnabledIT_LSERDY
02202   * @retval State of bit (1 or 0).
02203   */
02204 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSERDY(void)
02205 {
02206   return (READ_BIT(RCC->CIR, RCC_CIR_LSERDYIE) == (RCC_CIR_LSERDYIE));
02207 }
02208 
02209 /**
02210   * @brief  Checks if HSI ready interrupt source is enabled or disabled.
02211   * @rmtoll CIR         HSIRDYIE      LL_RCC_IsEnabledIT_HSIRDY
02212   * @retval State of bit (1 or 0).
02213   */
02214 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSIRDY(void)
02215 {
02216   return (READ_BIT(RCC->CIR, RCC_CIR_HSIRDYIE) == (RCC_CIR_HSIRDYIE));
02217 }
02218 
02219 /**
02220   * @brief  Checks if HSE ready interrupt source is enabled or disabled.
02221   * @rmtoll CIR         HSERDYIE      LL_RCC_IsEnabledIT_HSERDY
02222   * @retval State of bit (1 or 0).
02223   */
02224 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSERDY(void)
02225 {
02226   return (READ_BIT(RCC->CIR, RCC_CIR_HSERDYIE) == (RCC_CIR_HSERDYIE));
02227 }
02228 
02229 /**
02230   * @brief  Checks if PLL ready interrupt source is enabled or disabled.
02231   * @rmtoll CIR         PLLRDYIE      LL_RCC_IsEnabledIT_PLLRDY
02232   * @retval State of bit (1 or 0).
02233   */
02234 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLRDY(void)
02235 {
02236   return (READ_BIT(RCC->CIR, RCC_CIR_PLLRDYIE) == (RCC_CIR_PLLRDYIE));
02237 }
02238 
02239 #if defined(RCC_PLLI2S_SUPPORT)
02240 /**
02241   * @brief  Checks if PLLI2S ready interrupt source is enabled or disabled.
02242   * @rmtoll CIR          PLL3RDYIE     LL_RCC_IsEnabledIT_PLLI2SRDY
02243   * @retval State of bit (1 or 0).
02244   */
02245 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLI2SRDY(void)
02246 {
02247   return (READ_BIT(RCC->CIR, RCC_CIR_PLL3RDYIE) == (RCC_CIR_PLL3RDYIE));
02248 }
02249 #endif /* RCC_PLLI2S_SUPPORT */
02250 
02251 #if defined(RCC_PLL2_SUPPORT)
02252 /**
02253   * @brief  Checks if PLL2 ready interrupt source is enabled or disabled.
02254   * @rmtoll CIR          PLL2RDYIE     LL_RCC_IsEnabledIT_PLL2RDY
02255   * @retval State of bit (1 or 0).
02256   */
02257 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLL2RDY(void)
02258 {
02259   return (READ_BIT(RCC->CIR, RCC_CIR_PLL2RDYIE) == (RCC_CIR_PLL2RDYIE));
02260 }
02261 #endif /* RCC_PLL2_SUPPORT */
02262 
02263 /**
02264   * @}
02265   */
02266 
02267 #if defined(USE_FULL_LL_DRIVER)
02268 /** @defgroup RCC_LL_EF_Init De-initialization function
02269   * @{
02270   */
02271 ErrorStatus LL_RCC_DeInit(void);
02272 /**
02273   * @}
02274   */
02275 
02276 /** @defgroup RCC_LL_EF_Get_Freq Get system and peripherals clocks frequency functions
02277   * @{
02278   */
02279 void        LL_RCC_GetSystemClocksFreq(LL_RCC_ClocksTypeDef *RCC_Clocks);
02280 #if defined(RCC_CFGR2_I2S2SRC)
02281 uint32_t    LL_RCC_GetI2SClockFreq(uint32_t I2SxSource);
02282 #endif /* RCC_CFGR2_I2S2SRC */
02283 #if defined(USB_OTG_FS) || defined(USB)
02284 uint32_t    LL_RCC_GetUSBClockFreq(uint32_t USBxSource);
02285 #endif /* USB_OTG_FS || USB */
02286 uint32_t    LL_RCC_GetADCClockFreq(uint32_t ADCxSource);
02287 /**
02288   * @}
02289   */
02290 #endif /* USE_FULL_LL_DRIVER */
02291 
02292 /**
02293   * @}
02294   */
02295 
02296 /**
02297   * @}
02298   */
02299 
02300 #endif /* RCC */
02301 
02302 /**
02303   * @}
02304   */
02305 
02306 #ifdef __cplusplus
02307 }
02308 #endif
02309 
02310 #endif /* __STM32F1xx_LL_RCC_H */
02311 
02312 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/