STM32F103xB HAL User Manual
|
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>© 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****/