Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
stm32l4xx_ll_rcc.h
00001 /** 00002 ****************************************************************************** 00003 * @file stm32l4xx_ll_rcc.h 00004 * @author MCD Application Team 00005 * @version V1.5.1 00006 * @date 31-May-2016 00007 * @brief Header file of RCC LL module. 00008 ****************************************************************************** 00009 * @attention 00010 * 00011 * <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> 00012 * 00013 * Redistribution and use in source and binary forms, with or without modification, 00014 * are permitted provided that the following conditions are met: 00015 * 1. Redistributions of source code must retain the above copyright notice, 00016 * this list of conditions and the following disclaimer. 00017 * 2. Redistributions in binary form must reproduce the above copyright notice, 00018 * this list of conditions and the following disclaimer in the documentation 00019 * and/or other materials provided with the distribution. 00020 * 3. Neither the name of STMicroelectronics nor the names of its contributors 00021 * may be used to endorse or promote products derived from this software 00022 * without specific prior written permission. 00023 * 00024 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00025 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00026 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00027 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 00028 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00029 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 00030 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00031 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 00032 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00033 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00034 * 00035 ****************************************************************************** 00036 */ 00037 00038 /* Define to prevent recursive inclusion -------------------------------------*/ 00039 #ifndef __STM32L4xx_LL_RCC_H 00040 #define __STM32L4xx_LL_RCC_H 00041 00042 #ifdef __cplusplus 00043 extern "C" { 00044 #endif 00045 00046 /* Includes ------------------------------------------------------------------*/ 00047 #include "stm32l4xx.h" 00048 00049 /** @addtogroup STM32L4xx_LL_Driver 00050 * @{ 00051 */ 00052 00053 #if defined(RCC) 00054 00055 /** @defgroup RCC_LL RCC 00056 * @{ 00057 */ 00058 00059 /* Private types -------------------------------------------------------------*/ 00060 /* Private variables ---------------------------------------------------------*/ 00061 /** @defgroup RCC_LL_Private_Variables RCC Private Variables 00062 * @{ 00063 */ 00064 00065 static const uint8_t aRCC_APBAHBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4}; 00066 00067 /** 00068 * @} 00069 */ 00070 00071 /* Private constants ---------------------------------------------------------*/ 00072 /** @defgroup RCC_LL_Private_Constants RCC Private Constants 00073 * @{ 00074 */ 00075 /* Defines used for the bit position in the register and perform offsets*/ 00076 #define RCC_POSITION_HPRE (uint32_t)POSITION_VAL(RCC_CFGR_HPRE) 00077 #define RCC_POSITION_PPRE1 (uint32_t)POSITION_VAL(RCC_CFGR_PPRE1) 00078 #define RCC_POSITION_PPRE2 (uint32_t)POSITION_VAL(RCC_CFGR_PPRE2) 00079 #define RCC_POSITION_HSICAL (uint32_t)POSITION_VAL(RCC_ICSCR_HSICAL) 00080 #define RCC_POSITION_HSITRIM (uint32_t)POSITION_VAL(RCC_ICSCR_HSITRIM) 00081 #define RCC_POSITION_MSICAL (uint32_t)POSITION_VAL(RCC_ICSCR_MSICAL) 00082 #define RCC_POSITION_MSITRIM (uint32_t)POSITION_VAL(RCC_ICSCR_MSITRIM) 00083 #if defined(RCC_HSI48_SUPPORT) 00084 #define RCC_POSITION_HSI48CAL (uint32_t)POSITION_VAL(RCC_CRRCR_HSI48CAL) 00085 #endif /* RCC_HSI48_SUPPORT */ 00086 #define RCC_POSITION_PLLN (uint32_t)POSITION_VAL(RCC_PLLCFGR_PLLN) 00087 #define RCC_POSITION_PLLM (uint32_t)POSITION_VAL(RCC_PLLCFGR_PLLM) 00088 #define RCC_POSITION_PLLR (uint32_t)POSITION_VAL(RCC_PLLCFGR_PLLR) 00089 #if defined(RCC_PLLP_DIV_2_31_SUPPORT) 00090 #define RCC_POSITION_PLLP (uint32_t)POSITION_VAL(RCC_PLLCFGR_PLLPDIV) 00091 #else 00092 #define RCC_POSITION_PLLP (uint32_t)POSITION_VAL(RCC_PLLCFGR_PLLP) 00093 #endif /* RCC_PLLP_DIV_2_31_SUPPOR T*/ 00094 #define RCC_POSITION_PLLQ (uint32_t)POSITION_VAL(RCC_PLLCFGR_PLLQ) 00095 #define RCC_POSITION_PLLSAI1N (uint32_t)POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1N) 00096 #if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) 00097 #define RCC_POSITION_PLLSAI1P (uint32_t)POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1PDIV) 00098 #else 00099 #define RCC_POSITION_PLLSAI1P (uint32_t)POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1P) 00100 #endif /*RCC_PLLSAI1P_DIV_2_31_SUPPORT*/ 00101 #define RCC_POSITION_PLLSAI1Q (uint32_t)POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1Q) 00102 #define RCC_POSITION_PLLSAI1R (uint32_t)POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1R) 00103 #if defined(RCC_PLLSAI2_SUPPORT) 00104 #define RCC_POSITION_PLLSAI2N (uint32_t)POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2N) 00105 #define RCC_POSITION_PLLSAI2P (uint32_t)POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2P) 00106 #define RCC_POSITION_PLLSAI2R (uint32_t)POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2R) 00107 #endif /* RCC_PLLSAI2_SUPPORT */ 00108 00109 /** 00110 * @} 00111 */ 00112 00113 /* Private macros ------------------------------------------------------------*/ 00114 #if defined(USE_FULL_LL_DRIVER) 00115 /** @defgroup RCC_LL_Private_Macros RCC Private Macros 00116 * @{ 00117 */ 00118 /** 00119 * @} 00120 */ 00121 #endif /*USE_FULL_LL_DRIVER*/ 00122 /* Exported types ------------------------------------------------------------*/ 00123 #if defined(USE_FULL_LL_DRIVER) 00124 /** @defgroup RCC_LL_Exported_Types RCC Exported Types 00125 * @{ 00126 */ 00127 00128 /** @defgroup LL_ES_CLOCK_FREQ Clocks Frequency Structure 00129 * @{ 00130 */ 00131 00132 /** 00133 * @brief RCC Clocks Frequency Structure 00134 */ 00135 typedef struct 00136 { 00137 uint32_t SYSCLK_Frequency ; /*!< SYSCLK clock frequency */ 00138 uint32_t HCLK_Frequency ; /*!< HCLK clock frequency */ 00139 uint32_t PCLK1_Frequency ; /*!< PCLK1 clock frequency */ 00140 uint32_t PCLK2_Frequency ; /*!< PCLK2 clock frequency */ 00141 } LL_RCC_ClocksTypeDef; 00142 00143 /** 00144 * @} 00145 */ 00146 00147 /** 00148 * @} 00149 */ 00150 #endif /* USE_FULL_LL_DRIVER */ 00151 00152 /* Exported constants --------------------------------------------------------*/ 00153 /** @defgroup RCC_LL_Exported_Constants RCC Exported Constants 00154 * @{ 00155 */ 00156 00157 /** @defgroup RCC_LL_EC_OSC_VALUES Oscillator Values adaptation 00158 * @brief Defines used to adapt values of different oscillators 00159 * @note These values could be modified in the user environment according to 00160 * HW set-up. 00161 * @{ 00162 */ 00163 #if !defined (HSE_VALUE) 00164 #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the HSE oscillator in Hz */ 00165 #endif /* HSE_VALUE */ 00166 00167 #if !defined (HSI_VALUE) 00168 #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the HSI oscillator in Hz */ 00169 #endif /* HSI_VALUE */ 00170 00171 #if !defined (LSE_VALUE) 00172 #define LSE_VALUE ((uint32_t)32768) /*!< Value of the LSE oscillator in Hz */ 00173 #endif /* LSE_VALUE */ 00174 00175 #if !defined (LSI_VALUE) 00176 #define LSI_VALUE ((uint32_t)32000) /*!< Value of the LSI oscillator in Hz */ 00177 #endif /* LSI_VALUE */ 00178 #if defined(RCC_HSI48_SUPPORT) 00179 00180 #if !defined (HSI48_VALUE) 00181 #define HSI48_VALUE ((uint32_t)48000000) /*!< Value of the HSI48 oscillator in Hz */ 00182 #endif /* HSI48_VALUE */ 00183 #endif /* RCC_HSI48_SUPPORT */ 00184 /** 00185 * @} 00186 */ 00187 00188 /** @defgroup RCC_LL_EC_CLEAR_FLAG Clear Flags Defines 00189 * @brief Flags defines which can be used with LL_RCC_WriteReg function 00190 * @{ 00191 */ 00192 #define LL_RCC_CICR_LSIRDYC RCC_CICR_LSIRDYC /*!< LSI Ready Interrupt Clear */ 00193 #define LL_RCC_CICR_LSERDYC RCC_CICR_LSERDYC /*!< LSE Ready Interrupt Clear */ 00194 #define LL_RCC_CICR_MSIRDYC RCC_CICR_MSIRDYC /*!< MSI Ready Interrupt Clear */ 00195 #define LL_RCC_CICR_HSIRDYC RCC_CICR_HSIRDYC /*!< HSI Ready Interrupt Clear */ 00196 #define LL_RCC_CICR_HSERDYC RCC_CICR_HSERDYC /*!< HSE Ready Interrupt Clear */ 00197 #define LL_RCC_CICR_PLLRDYC RCC_CICR_PLLRDYC /*!< PLL Ready Interrupt Clear */ 00198 #if defined(RCC_HSI48_SUPPORT) 00199 #define LL_RCC_CICR_HSI48RDYC RCC_CICR_HSI48RDYC /*!< HSI48 Ready Interrupt Clear */ 00200 #endif /* RCC_HSI48_SUPPORT */ 00201 #define LL_RCC_CICR_PLLSAI1RDYC RCC_CICR_PLLSAI1RDYC /*!< PLLSAI1 Ready Interrupt Clear */ 00202 #if defined(RCC_PLLSAI2_SUPPORT) 00203 #define LL_RCC_CICR_PLLSAI2RDYC RCC_CICR_PLLSAI2RDYC /*!< PLLSAI2 Ready Interrupt Clear */ 00204 #endif /* RCC_PLLSAI2_SUPPORT */ 00205 #define LL_RCC_CICR_LSECSSC RCC_CICR_LSECSSC /*!< LSE Clock Security System Interrupt Clear */ 00206 #define LL_RCC_CICR_CSSC RCC_CICR_CSSC /*!< Clock Security System Interrupt Clear */ 00207 /** 00208 * @} 00209 */ 00210 00211 /** @defgroup RCC_LL_EC_GET_FLAG Get Flags Defines 00212 * @brief Flags defines which can be used with LL_RCC_ReadReg function 00213 * @{ 00214 */ 00215 #define LL_RCC_CIFR_LSIRDYF RCC_CIFR_LSIRDYF /*!< LSI Ready Interrupt flag */ 00216 #define LL_RCC_CIFR_LSERDYF RCC_CIFR_LSERDYF /*!< LSE Ready Interrupt flag */ 00217 #define LL_RCC_CIFR_MSIRDYF RCC_CIFR_MSIRDYF /*!< MSI Ready Interrupt flag */ 00218 #define LL_RCC_CIFR_HSIRDYF RCC_CIFR_HSIRDYF /*!< HSI Ready Interrupt flag */ 00219 #define LL_RCC_CIFR_HSERDYF RCC_CIFR_HSERDYF /*!< HSE Ready Interrupt flag */ 00220 #define LL_RCC_CIFR_PLLRDYF RCC_CIFR_PLLRDYF /*!< PLL Ready Interrupt flag */ 00221 #if defined(RCC_HSI48_SUPPORT) 00222 #define LL_RCC_CIFR_HSI48RDYF RCC_CIFR_HSI48RDYF /*!< HSI48 Ready Interrupt flag */ 00223 #endif /* RCC_HSI48_SUPPORT */ 00224 #define LL_RCC_CIFR_PLLSAI1RDYF RCC_CIFR_PLLSAI1RDYF /*!< PLLSAI1 Ready Interrupt flag */ 00225 #if defined(RCC_PLLSAI2_SUPPORT) 00226 #define LL_RCC_CIFR_PLLSAI2RDYF RCC_CIFR_PLLSAI2RDYF /*!< PLLSAI2 Ready Interrupt flag */ 00227 #endif /* RCC_PLLSAI2_SUPPORT */ 00228 #define LL_RCC_CIFR_LSECSSF RCC_CIFR_LSECSSF /*!< LSE Clock Security System Interrupt flag */ 00229 #define LL_RCC_CIFR_CSSF RCC_CIFR_CSSF /*!< Clock Security System Interrupt flag */ 00230 #define LL_RCC_CSR_FWRSTF RCC_CSR_FWRSTF /*!< Firewall reset flag */ 00231 #define LL_RCC_CSR_LPWRRSTF RCC_CSR_LPWRRSTF /*!< Low-Power reset flag */ 00232 #define LL_RCC_CSR_OBLRSTF RCC_CSR_OBLRSTF /*!< OBL reset flag */ 00233 #define LL_RCC_CSR_PINRSTF RCC_CSR_PINRSTF /*!< PIN reset flag */ 00234 #define LL_RCC_CSR_SFTRSTF RCC_CSR_SFTRSTF /*!< Software Reset flag */ 00235 #define LL_RCC_CSR_IWDGRSTF RCC_CSR_IWDGRSTF /*!< Independent Watchdog reset flag */ 00236 #define LL_RCC_CSR_WWDGRSTF RCC_CSR_WWDGRSTF /*!< Window watchdog reset flag */ 00237 #define LL_RCC_CSR_BORRSTF RCC_CSR_BORRSTF /*!< BOR reset flag */ 00238 /** 00239 * @} 00240 */ 00241 00242 /** @defgroup RCC_LL_EC_IT IT Defines 00243 * @brief IT defines which can be used with LL_RCC_ReadReg and LL_RCC_WriteReg functions 00244 * @{ 00245 */ 00246 #define LL_RCC_CIER_LSIRDYIE RCC_CIER_LSIRDYIE /*!< LSI Ready Interrupt Enable */ 00247 #define LL_RCC_CIER_LSERDYIE RCC_CIER_LSERDYIE /*!< LSE Ready Interrupt Enable */ 00248 #define LL_RCC_CIER_MSIRDYIE RCC_CIER_MSIRDYIE /*!< MSI Ready Interrupt Enable */ 00249 #define LL_RCC_CIER_HSIRDYIE RCC_CIER_HSIRDYIE /*!< HSI Ready Interrupt Enable */ 00250 #define LL_RCC_CIER_HSERDYIE RCC_CIER_HSERDYIE /*!< HSE Ready Interrupt Enable */ 00251 #define LL_RCC_CIER_PLLRDYIE RCC_CIER_PLLRDYIE /*!< PLL Ready Interrupt Enable */ 00252 #if defined(RCC_HSI48_SUPPORT) 00253 #define LL_RCC_CIER_HSI48RDYIE RCC_CIER_HSI48RDYIE /*!< HSI48 Ready Interrupt Enable */ 00254 #endif /* RCC_HSI48_SUPPORT */ 00255 #define LL_RCC_CIER_PLLSAI1RDYIE RCC_CIER_PLLSAI1RDYIE /*!< PLLSAI1 Ready Interrupt Enable */ 00256 #if defined(RCC_PLLSAI2_SUPPORT) 00257 #define LL_RCC_CIER_PLLSAI2RDYIE RCC_CIER_PLLSAI2RDYIE /*!< PLLSAI2 Ready Interrupt Enable */ 00258 #endif /* RCC_PLLSAI2_SUPPORT */ 00259 #define LL_RCC_CIER_LSECSSIE RCC_CIER_LSECSSIE /*!< LSE CSS Interrupt Enable */ 00260 /** 00261 * @} 00262 */ 00263 00264 /** @defgroup RCC_LL_EC_LSEDRIVE LSE oscillator drive capability 00265 * @{ 00266 */ 00267 #define LL_RCC_LSEDRIVE_LOW ((uint32_t)0x00000000) /*!< Xtal mode lower driving capability */ 00268 #define LL_RCC_LSEDRIVE_MEDIUMLOW RCC_BDCR_LSEDRV_0 /*!< Xtal mode medium low driving capability */ 00269 #define LL_RCC_LSEDRIVE_MEDIUMHIGH RCC_BDCR_LSEDRV_1 /*!< Xtal mode medium high driving capability */ 00270 #define LL_RCC_LSEDRIVE_HIGH RCC_BDCR_LSEDRV /*!< Xtal mode higher driving capability */ 00271 /** 00272 * @} 00273 */ 00274 00275 /** @defgroup RCC_LL_EC_MSIRANGE MSI clock ranges 00276 * @{ 00277 */ 00278 #define LL_RCC_MSIRANGE_0 RCC_CR_MSIRANGE_0 /*!< MSI = 100 KHz */ 00279 #define LL_RCC_MSIRANGE_1 RCC_CR_MSIRANGE_1 /*!< MSI = 200 KHz */ 00280 #define LL_RCC_MSIRANGE_2 RCC_CR_MSIRANGE_2 /*!< MSI = 400 KHz */ 00281 #define LL_RCC_MSIRANGE_3 RCC_CR_MSIRANGE_3 /*!< MSI = 800 KHz */ 00282 #define LL_RCC_MSIRANGE_4 RCC_CR_MSIRANGE_4 /*!< MSI = 1 MHz */ 00283 #define LL_RCC_MSIRANGE_5 RCC_CR_MSIRANGE_5 /*!< MSI = 2 MHz */ 00284 #define LL_RCC_MSIRANGE_6 RCC_CR_MSIRANGE_6 /*!< MSI = 4 MHz */ 00285 #define LL_RCC_MSIRANGE_7 RCC_CR_MSIRANGE_7 /*!< MSI = 8 MHz */ 00286 #define LL_RCC_MSIRANGE_8 RCC_CR_MSIRANGE_8 /*!< MSI = 16 MHz */ 00287 #define LL_RCC_MSIRANGE_9 RCC_CR_MSIRANGE_9 /*!< MSI = 24 MHz */ 00288 #define LL_RCC_MSIRANGE_10 RCC_CR_MSIRANGE_10 /*!< MSI = 32 MHz */ 00289 #define LL_RCC_MSIRANGE_11 RCC_CR_MSIRANGE_11 /*!< MSI = 48 MHz */ 00290 /** 00291 * @} 00292 */ 00293 00294 /** @defgroup RCC_LL_EC_MSISRANGE MSI range after Standby mode 00295 * @{ 00296 */ 00297 #define LL_RCC_MSISRANGE_4 RCC_CSR_MSISRANGE_1 /*!< MSI = 1 MHz */ 00298 #define LL_RCC_MSISRANGE_5 RCC_CSR_MSISRANGE_2 /*!< MSI = 2 MHz */ 00299 #define LL_RCC_MSISRANGE_6 RCC_CSR_MSISRANGE_4 /*!< MSI = 4 MHz */ 00300 #define LL_RCC_MSISRANGE_7 RCC_CSR_MSISRANGE_8 /*!< MSI = 8 MHz */ 00301 /** 00302 * @} 00303 */ 00304 00305 /** @defgroup RCC_LL_EC_LSCO_CLKSOURCE LSCO Selection 00306 * @{ 00307 */ 00308 #define LL_RCC_LSCO_CLKSOURCE_LSI (uint32_t)0x00000000 /*!< LSI selection for low speed clock */ 00309 #define LL_RCC_LSCO_CLKSOURCE_LSE RCC_BDCR_LSCOSEL /*!< LSE selection for low speed clock */ 00310 /** 00311 * @} 00312 */ 00313 00314 /** @defgroup RCC_LL_EC_SYS_CLKSOURCE System clock switch 00315 * @{ 00316 */ 00317 #define LL_RCC_SYS_CLKSOURCE_MSI RCC_CFGR_SW_MSI /*!< MSI selection as system clock */ 00318 #define LL_RCC_SYS_CLKSOURCE_HSI RCC_CFGR_SW_HSI /*!< HSI selection as system clock */ 00319 #define LL_RCC_SYS_CLKSOURCE_HSE RCC_CFGR_SW_HSE /*!< HSE selection as system clock */ 00320 #define LL_RCC_SYS_CLKSOURCE_PLL RCC_CFGR_SW_PLL /*!< PLL selection as system clock */ 00321 /** 00322 * @} 00323 */ 00324 00325 /** @defgroup RCC_LL_EC_SYS_CLKSOURCE_STATUS System clock switch status 00326 * @{ 00327 */ 00328 #define LL_RCC_SYS_CLKSOURCE_STATUS_MSI RCC_CFGR_SWS_MSI /*!< MSI used as system clock */ 00329 #define LL_RCC_SYS_CLKSOURCE_STATUS_HSI RCC_CFGR_SWS_HSI /*!< HSI used as system clock */ 00330 #define LL_RCC_SYS_CLKSOURCE_STATUS_HSE RCC_CFGR_SWS_HSE /*!< HSE used as system clock */ 00331 #define LL_RCC_SYS_CLKSOURCE_STATUS_PLL RCC_CFGR_SWS_PLL /*!< PLL used as system clock */ 00332 /** 00333 * @} 00334 */ 00335 00336 /** @defgroup RCC_LL_EC_SYSCLK_DIV AHB prescaler 00337 * @{ 00338 */ 00339 #define LL_RCC_SYSCLK_DIV_1 RCC_CFGR_HPRE_DIV1 /*!< SYSCLK not divided */ 00340 #define LL_RCC_SYSCLK_DIV_2 RCC_CFGR_HPRE_DIV2 /*!< SYSCLK divided by 2 */ 00341 #define LL_RCC_SYSCLK_DIV_4 RCC_CFGR_HPRE_DIV4 /*!< SYSCLK divided by 4 */ 00342 #define LL_RCC_SYSCLK_DIV_8 RCC_CFGR_HPRE_DIV8 /*!< SYSCLK divided by 8 */ 00343 #define LL_RCC_SYSCLK_DIV_16 RCC_CFGR_HPRE_DIV16 /*!< SYSCLK divided by 16 */ 00344 #define LL_RCC_SYSCLK_DIV_64 RCC_CFGR_HPRE_DIV64 /*!< SYSCLK divided by 64 */ 00345 #define LL_RCC_SYSCLK_DIV_128 RCC_CFGR_HPRE_DIV128 /*!< SYSCLK divided by 128 */ 00346 #define LL_RCC_SYSCLK_DIV_256 RCC_CFGR_HPRE_DIV256 /*!< SYSCLK divided by 256 */ 00347 #define LL_RCC_SYSCLK_DIV_512 RCC_CFGR_HPRE_DIV512 /*!< SYSCLK divided by 512 */ 00348 /** 00349 * @} 00350 */ 00351 00352 /** @defgroup RCC_LL_EC_APB1_DIV APB low-speed prescaler (APB1) 00353 * @{ 00354 */ 00355 #define LL_RCC_APB1_DIV_1 RCC_CFGR_PPRE1_DIV1 /*!< HCLK not divided */ 00356 #define LL_RCC_APB1_DIV_2 RCC_CFGR_PPRE1_DIV2 /*!< HCLK divided by 2 */ 00357 #define LL_RCC_APB1_DIV_4 RCC_CFGR_PPRE1_DIV4 /*!< HCLK divided by 4 */ 00358 #define LL_RCC_APB1_DIV_8 RCC_CFGR_PPRE1_DIV8 /*!< HCLK divided by 8 */ 00359 #define LL_RCC_APB1_DIV_16 RCC_CFGR_PPRE1_DIV16 /*!< HCLK divided by 16 */ 00360 /** 00361 * @} 00362 */ 00363 /** @defgroup RCC_LL_EC_APB2_DIV APB high-speed prescaler (APB2) 00364 * @{ 00365 */ 00366 #define LL_RCC_APB2_DIV_1 RCC_CFGR_PPRE2_DIV1 /*!< HCLK not divided */ 00367 #define LL_RCC_APB2_DIV_2 RCC_CFGR_PPRE2_DIV2 /*!< HCLK divided by 2 */ 00368 #define LL_RCC_APB2_DIV_4 RCC_CFGR_PPRE2_DIV4 /*!< HCLK divided by 4 */ 00369 #define LL_RCC_APB2_DIV_8 RCC_CFGR_PPRE2_DIV8 /*!< HCLK divided by 8 */ 00370 #define LL_RCC_APB2_DIV_16 RCC_CFGR_PPRE2_DIV16 /*!< HCLK divided by 16 */ 00371 /** 00372 * @} 00373 */ 00374 /** @defgroup RCC_LL_EC_STOP_WAKEUPCLOCK Wakeup from Stop and CSS backup clock selection 00375 * @{ 00376 */ 00377 #define LL_RCC_STOP_WAKEUPCLOCK_MSI ((uint32_t)0x00000000) /*!< MSI selection after wake-up from STOP */ 00378 #define LL_RCC_STOP_WAKEUPCLOCK_HSI RCC_CFGR_STOPWUCK /*!< HSI selection after wake-up from STOP */ 00379 /** 00380 * @} 00381 */ 00382 00383 /** @defgroup RCC_LL_EC_MCO1SOURCE MCO1 SOURCE selection 00384 * @{ 00385 */ 00386 #define LL_RCC_MCO1SOURCE_NOCLOCK ((uint32_t)0x00000000) /*!< MCO output disabled, no clock on MCO */ 00387 #define LL_RCC_MCO1SOURCE_SYSCLK RCC_CFGR_MCOSEL_0 /*!< SYSCLK selection as MCO1 source */ 00388 #define LL_RCC_MCO1SOURCE_MSI RCC_CFGR_MCOSEL_1 /*!< MSI selection as MCO1 source */ 00389 #define LL_RCC_MCO1SOURCE_HSI (RCC_CFGR_MCOSEL_0| RCC_CFGR_MCOSEL_1) /*!< HSI16 selection as MCO1 source */ 00390 #define LL_RCC_MCO1SOURCE_HSE RCC_CFGR_MCOSEL_2 /*!< HSE selection as MCO1 source */ 00391 #define LL_RCC_MCO1SOURCE_PLLCLK (RCC_CFGR_MCOSEL_0|RCC_CFGR_MCOSEL_2) /*!< Main PLL selection as MCO1 source */ 00392 #define LL_RCC_MCO1SOURCE_LSI (RCC_CFGR_MCOSEL_1|RCC_CFGR_MCOSEL_2) /*!< LSI selection as MCO1 source */ 00393 #define LL_RCC_MCO1SOURCE_LSE (RCC_CFGR_MCOSEL_0|RCC_CFGR_MCOSEL_1|RCC_CFGR_MCOSEL_2) /*!< LSE selection as MCO1 source */ 00394 #if defined(RCC_HSI48_SUPPORT) 00395 #define LL_RCC_MCO1SOURCE_HSI48 RCC_CFGR_MCOSEL_3 /*!< HSI48 selection as MCO1 source */ 00396 #endif /* RCC_HSI48_SUPPORT */ 00397 /** 00398 * @} 00399 */ 00400 00401 /** @defgroup RCC_LL_EC_MCO1_DIV MCO1 prescaler 00402 * @{ 00403 */ 00404 #define LL_RCC_MCO1_DIV_1 RCC_CFGR_MCOPRE_DIV1 /*!< MCO not divided */ 00405 #define LL_RCC_MCO1_DIV_2 RCC_CFGR_MCOPRE_DIV2 /*!< MCO divided by 2 */ 00406 #define LL_RCC_MCO1_DIV_4 RCC_CFGR_MCOPRE_DIV4 /*!< MCO divided by 4 */ 00407 #define LL_RCC_MCO1_DIV_8 RCC_CFGR_MCOPRE_DIV8 /*!< MCO divided by 8 */ 00408 #define LL_RCC_MCO1_DIV_16 RCC_CFGR_MCOPRE_DIV16 /*!< MCO divided by 16 */ 00409 /** 00410 * @} 00411 */ 00412 00413 #if defined(USE_FULL_LL_DRIVER) 00414 /** @defgroup RCC_LL_EC_PERIPH_FREQUENCY Peripheral clock frequency 00415 * @{ 00416 */ 00417 #define LL_RCC_PERIPH_FREQUENCY_NO (uint32_t)0x00000000 /*!< No clock enabled for the peripheral */ 00418 #define LL_RCC_PERIPH_FREQUENCY_NA (uint32_t)0xFFFFFFFFU /*!< Frequency cannot be provided as external clock */ 00419 /** 00420 * @} 00421 */ 00422 #endif /* USE_FULL_LL_DRIVER */ 00423 00424 /** @defgroup RCC_LL_EC_USART1_CLKSOURCE Peripheral USART clock source selection 00425 * @{ 00426 */ 00427 #define LL_RCC_USART1_CLKSOURCE_PCLK2 (uint32_t)((RCC_CCIPR_USART1SEL << 16) | 0x00000000) /*!< PCLK2 clock used as USART1 clock source */ 00428 #define LL_RCC_USART1_CLKSOURCE_SYSCLK (uint32_t)((RCC_CCIPR_USART1SEL << 16) | RCC_CCIPR_USART1SEL_0) /*!< SYSCLK clock used as USART1 clock source */ 00429 #define LL_RCC_USART1_CLKSOURCE_HSI (uint32_t)((RCC_CCIPR_USART1SEL << 16) | RCC_CCIPR_USART1SEL_1) /*!< HSI clock used as USART1 clock source */ 00430 #define LL_RCC_USART1_CLKSOURCE_LSE (uint32_t)((RCC_CCIPR_USART1SEL << 16) | RCC_CCIPR_USART1SEL) /*!< LSE clock used as USART1 clock source */ 00431 #define LL_RCC_USART2_CLKSOURCE_PCLK1 (uint32_t)((RCC_CCIPR_USART2SEL << 16) | 0x00000000) /*!< PCLK1 clock used as USART2 clock source */ 00432 #define LL_RCC_USART2_CLKSOURCE_SYSCLK (uint32_t)((RCC_CCIPR_USART2SEL << 16) | RCC_CCIPR_USART2SEL_0) /*!< SYSCLK clock used as USART2 clock source */ 00433 #define LL_RCC_USART2_CLKSOURCE_HSI (uint32_t)((RCC_CCIPR_USART2SEL << 16) | RCC_CCIPR_USART2SEL_1) /*!< HSI clock used as USART2 clock source */ 00434 #define LL_RCC_USART2_CLKSOURCE_LSE (uint32_t)((RCC_CCIPR_USART2SEL << 16) | RCC_CCIPR_USART2SEL) /*!< LSE clock used as USART2 clock source */ 00435 #if defined(RCC_CCIPR_USART3SEL) 00436 #define LL_RCC_USART3_CLKSOURCE_PCLK1 (uint32_t)((RCC_CCIPR_USART3SEL << 16) | 0x00000000) /*!< PCLK1 clock used as USART3 clock source */ 00437 #define LL_RCC_USART3_CLKSOURCE_SYSCLK (uint32_t)((RCC_CCIPR_USART3SEL << 16) | RCC_CCIPR_USART3SEL_0) /*!< SYSCLK clock used as USART3 clock source */ 00438 #define LL_RCC_USART3_CLKSOURCE_HSI (uint32_t)((RCC_CCIPR_USART3SEL << 16) | RCC_CCIPR_USART3SEL_1) /*!< HSI clock used as USART3 clock source */ 00439 #define LL_RCC_USART3_CLKSOURCE_LSE (uint32_t)((RCC_CCIPR_USART3SEL << 16) | RCC_CCIPR_USART3SEL) /*!< LSE clock used as USART3 clock source */ 00440 #endif /* RCC_CCIPR_USART3SEL */ 00441 /** 00442 * @} 00443 */ 00444 00445 #if defined(RCC_CCIPR_UART4SEL) || defined(RCC_CCIPR_UART5SEL) 00446 /** @defgroup RCC_LL_EC_UART4_CLKSOURCE Peripheral UART clock source selection 00447 * @{ 00448 */ 00449 #if defined(RCC_CCIPR_UART4SEL) 00450 #define LL_RCC_UART4_CLKSOURCE_PCLK1 (uint32_t)((RCC_CCIPR_UART4SEL << 16) | 0x00000000) /*!< PCLK1 clock used as UART4 clock source */ 00451 #define LL_RCC_UART4_CLKSOURCE_SYSCLK (uint32_t)((RCC_CCIPR_UART4SEL << 16) | RCC_CCIPR_UART4SEL_0) /*!< SYSCLK clock used as UART4 clock source */ 00452 #define LL_RCC_UART4_CLKSOURCE_HSI (uint32_t)((RCC_CCIPR_UART4SEL << 16) | RCC_CCIPR_UART4SEL_1) /*!< HSI clock used as UART4 clock source */ 00453 #define LL_RCC_UART4_CLKSOURCE_LSE (uint32_t)((RCC_CCIPR_UART4SEL << 16) | RCC_CCIPR_UART4SEL) /*!< LSE clock used as UART4 clock source */ 00454 #endif /* RCC_CCIPR_UART4SEL */ 00455 #if defined(RCC_CCIPR_UART5SEL) 00456 #define LL_RCC_UART5_CLKSOURCE_PCLK1 (uint32_t)((RCC_CCIPR_UART5SEL << 16) | 0x00000000) /*!< PCLK1 clock used as UART5 clock source */ 00457 #define LL_RCC_UART5_CLKSOURCE_SYSCLK (uint32_t)((RCC_CCIPR_UART5SEL << 16) | RCC_CCIPR_UART5SEL_0) /*!< SYSCLK clock used as UART5 clock source */ 00458 #define LL_RCC_UART5_CLKSOURCE_HSI (uint32_t)((RCC_CCIPR_UART5SEL << 16) | RCC_CCIPR_UART5SEL_1) /*!< HSI clock used as UART5 clock source */ 00459 #define LL_RCC_UART5_CLKSOURCE_LSE (uint32_t)((RCC_CCIPR_UART5SEL << 16) | RCC_CCIPR_UART5SEL) /*!< LSE clock used as UART5 clock source */ 00460 #endif /* RCC_CCIPR_UART5SEL */ 00461 /** 00462 * @} 00463 */ 00464 #endif /* RCC_CCIPR_UART4SEL || RCC_CCIPR_UART5SEL */ 00465 00466 /** @defgroup RCC_LL_EC_LPUART1_CLKSOURCE Peripheral LPUART clock source selection 00467 * @{ 00468 */ 00469 #define LL_RCC_LPUART1_CLKSOURCE_PCLK1 (uint32_t)0x00000000 /*!< PCLK1 clock used as LPUART1 clock source */ 00470 #define LL_RCC_LPUART1_CLKSOURCE_SYSCLK RCC_CCIPR_LPUART1SEL_0 /*!< SYSCLK clock used as LPUART1 clock source */ 00471 #define LL_RCC_LPUART1_CLKSOURCE_HSI RCC_CCIPR_LPUART1SEL_1 /*!< HSI clock used as LPUART1 clock source */ 00472 #define LL_RCC_LPUART1_CLKSOURCE_LSE RCC_CCIPR_LPUART1SEL /*!< LSE clock used as LPUART1 clock source */ 00473 /** 00474 * @} 00475 */ 00476 00477 /** @defgroup RCC_LL_EC_I2C1_CLKSOURCE Peripheral I2C clock source selection 00478 * @{ 00479 */ 00480 #define LL_RCC_I2C1_CLKSOURCE_PCLK1 (uint32_t)((RCC_CCIPR_I2C1SEL << 4) | (0x00000000 >> 4)) /*!< PCLK1 clock used as I2C1 clock source */ 00481 #define LL_RCC_I2C1_CLKSOURCE_SYSCLK (uint32_t)((RCC_CCIPR_I2C1SEL << 4) | (RCC_CCIPR_I2C1SEL_0 >> 4)) /*!< SYSCLK clock used as I2C1 clock source */ 00482 #define LL_RCC_I2C1_CLKSOURCE_HSI (uint32_t)((RCC_CCIPR_I2C1SEL << 4) | (RCC_CCIPR_I2C1SEL_1 >> 4)) /*!< HSI clock used as I2C1 clock source */ 00483 #if defined(RCC_CCIPR_I2C2SEL) 00484 #define LL_RCC_I2C2_CLKSOURCE_PCLK1 (uint32_t)((RCC_CCIPR_I2C2SEL << 4) | (0x00000000 >> 4)) /*!< PCLK1 clock used as I2C2 clock source */ 00485 #define LL_RCC_I2C2_CLKSOURCE_SYSCLK (uint32_t)((RCC_CCIPR_I2C2SEL << 4) | (RCC_CCIPR_I2C2SEL_0 >> 4)) /*!< SYSCLK clock used as I2C2 clock source */ 00486 #define LL_RCC_I2C2_CLKSOURCE_HSI (uint32_t)((RCC_CCIPR_I2C2SEL << 4) | (RCC_CCIPR_I2C2SEL_1 >> 4)) /*!< HSI clock used as I2C2 clock source */ 00487 #endif /* RCC_CCIPR_I2C2SEL */ 00488 #define LL_RCC_I2C3_CLKSOURCE_PCLK1 (uint32_t)((RCC_CCIPR_I2C3SEL << 4) | (0x00000000 >> 4)) /*!< PCLK1 clock used as I2C3 clock source */ 00489 #define LL_RCC_I2C3_CLKSOURCE_SYSCLK (uint32_t)((RCC_CCIPR_I2C3SEL << 4) | (RCC_CCIPR_I2C3SEL_0 >> 4)) /*!< SYSCLK clock used as I2C3 clock source */ 00490 #define LL_RCC_I2C3_CLKSOURCE_HSI (uint32_t)((RCC_CCIPR_I2C3SEL << 4) | (RCC_CCIPR_I2C3SEL_1 >> 4)) /*!< HSI clock used as I2C3 clock source */ 00491 /** 00492 * @} 00493 */ 00494 00495 /** @defgroup RCC_LL_EC_LPTIM1_CLKSOURCE Peripheral LPTIM clock source selection 00496 * @{ 00497 */ 00498 #define LL_RCC_LPTIM1_CLKSOURCE_PCLK1 (uint32_t)(RCC_CCIPR_LPTIM1SEL | (0x00000000 >> 16)) /*!< PCLK1 clock used as LPTIM1 clock source */ 00499 #define LL_RCC_LPTIM1_CLKSOURCE_LSI (uint32_t)(RCC_CCIPR_LPTIM1SEL | (RCC_CCIPR_LPTIM1SEL_0 >> 16)) /*!< LSI clock used as LPTIM1 clock source */ 00500 #define LL_RCC_LPTIM1_CLKSOURCE_HSI (uint32_t)(RCC_CCIPR_LPTIM1SEL | (RCC_CCIPR_LPTIM1SEL_1 >> 16)) /*!< HSI clock used as LPTIM1 clock source */ 00501 #define LL_RCC_LPTIM1_CLKSOURCE_LSE (uint32_t)(RCC_CCIPR_LPTIM1SEL | (RCC_CCIPR_LPTIM1SEL >> 16)) /*!< LSE clock used as LPTIM1 clock source */ 00502 #define LL_RCC_LPTIM2_CLKSOURCE_PCLK1 (uint32_t)(RCC_CCIPR_LPTIM2SEL | (0x00000000 >> 16)) /*!< PCLK1 clock used as LPTIM2 clock source */ 00503 #define LL_RCC_LPTIM2_CLKSOURCE_LSI (uint32_t)(RCC_CCIPR_LPTIM2SEL | (RCC_CCIPR_LPTIM2SEL_0 >> 16)) /*!< LSI clock used as LPTIM2 clock source */ 00504 #define LL_RCC_LPTIM2_CLKSOURCE_HSI (uint32_t)(RCC_CCIPR_LPTIM2SEL | (RCC_CCIPR_LPTIM2SEL_1 >> 16)) /*!< HSI clock used as LPTIM2 clock source */ 00505 #define LL_RCC_LPTIM2_CLKSOURCE_LSE (uint32_t)(RCC_CCIPR_LPTIM2SEL | (RCC_CCIPR_LPTIM2SEL >> 16)) /*!< LSE clock used as LPTIM2 clock source */ 00506 /** 00507 * @} 00508 */ 00509 00510 /** @defgroup RCC_LL_EC_SAI1_CLKSOURCE Peripheral SAI clock source selection 00511 * @{ 00512 */ 00513 #define LL_RCC_SAI1_CLKSOURCE_PLLSAI1 (uint32_t)(RCC_CCIPR_SAI1SEL | (0x00000000 >> 16)) /*!< PLLSAI1 clock used as SAI1 clock source */ 00514 #if defined(RCC_PLLSAI2_SUPPORT) 00515 #define LL_RCC_SAI1_CLKSOURCE_PLLSAI2 (uint32_t)(RCC_CCIPR_SAI1SEL | (RCC_CCIPR_SAI1SEL_0 >> 16)) /*!< PLLSAI2 clock used as SAI1 clock source */ 00516 #endif /* RCC_PLLSAI2_SUPPORT */ 00517 #define LL_RCC_SAI1_CLKSOURCE_PLL (uint32_t)(RCC_CCIPR_SAI1SEL | (RCC_CCIPR_SAI1SEL_1 >> 16)) /*!< PLL clock used as SAI1 clock source */ 00518 #define LL_RCC_SAI1_CLKSOURCE_PIN (uint32_t)(RCC_CCIPR_SAI1SEL | (RCC_CCIPR_SAI1SEL >> 16)) /*!< External input clock used as SAI1 clock source */ 00519 #if defined(RCC_CCIPR_SAI2SEL) 00520 #define LL_RCC_SAI2_CLKSOURCE_PLLSAI1 (uint32_t)(RCC_CCIPR_SAI2SEL | (0x00000000 >> 16)) /*!< PLLSAI1 clock used as SAI2 clock source */ 00521 #if defined(RCC_PLLSAI2_SUPPORT) 00522 #define LL_RCC_SAI2_CLKSOURCE_PLLSAI2 (uint32_t)(RCC_CCIPR_SAI2SEL | (RCC_CCIPR_SAI2SEL_0 >> 16)) /*!< PLLSAI2 clock used as SAI2 clock source */ 00523 #endif /* RCC_PLLSAI2_SUPPORT */ 00524 #define LL_RCC_SAI2_CLKSOURCE_PLL (uint32_t)(RCC_CCIPR_SAI2SEL | (RCC_CCIPR_SAI2SEL_1 >> 16)) /*!< PLL clock used as SAI2 clock source */ 00525 #define LL_RCC_SAI2_CLKSOURCE_PIN (uint32_t)(RCC_CCIPR_SAI2SEL | (RCC_CCIPR_SAI2SEL >> 16)) /*!< External input clock used as SAI2 clock source */ 00526 #endif /* RCC_CCIPR_SAI2SEL */ 00527 /** 00528 * @} 00529 */ 00530 00531 /** @defgroup RCC_LL_EC_SDMMC1_CLKSOURCE Peripheral SDMMC clock source selection 00532 * @{ 00533 */ 00534 #define LL_RCC_SDMMC1_CLKSOURCE_NONE (uint32_t)(0x00000000) /*!< No clock used as SDMMC1 clock source */ 00535 #define LL_RCC_SDMMC1_CLKSOURCE_PLLSAI1 (uint32_t)(RCC_CCIPR_CLK48SEL_0) /*!< PLLSAI1 clock used as SDMMC1 clock source */ 00536 #define LL_RCC_SDMMC1_CLKSOURCE_PLL (uint32_t)(RCC_CCIPR_CLK48SEL_1) /*!< PLL clock used as SDMMC1 clock source */ 00537 #define LL_RCC_SDMMC1_CLKSOURCE_MSI (uint32_t)(RCC_CCIPR_CLK48SEL) /*!< MSI clock used as SDMMC1 clock source */ 00538 /** 00539 * @} 00540 */ 00541 00542 /** @defgroup RCC_LL_EC_RNG_CLKSOURCE Peripheral RNG clock source selection 00543 * @{ 00544 */ 00545 #define LL_RCC_RNG_CLKSOURCE_NONE (uint32_t)(0x00000000) /*!< No clock used as RNG clock source */ 00546 #define LL_RCC_RNG_CLKSOURCE_PLLSAI1 (uint32_t)(RCC_CCIPR_CLK48SEL_0) /*!< PLLSAI1 clock used as RNG clock source */ 00547 #define LL_RCC_RNG_CLKSOURCE_PLL (uint32_t)(RCC_CCIPR_CLK48SEL_1) /*!< PLL clock used as RNG clock source */ 00548 #define LL_RCC_RNG_CLKSOURCE_MSI (uint32_t)(RCC_CCIPR_CLK48SEL) /*!< MSI clock used as RNG clock source */ 00549 /** 00550 * @} 00551 */ 00552 00553 #if defined(USB_OTG_FS) || defined(USB) 00554 /** @defgroup RCC_LL_EC_USB_CLKSOURCE Peripheral USB clock source selection 00555 * @{ 00556 */ 00557 #define LL_RCC_USB_CLKSOURCE_NONE (uint32_t)(0x00000000) /*!< No clock used as USB clock source */ 00558 #define LL_RCC_USB_CLKSOURCE_PLLSAI1 (uint32_t)(RCC_CCIPR_CLK48SEL_0) /*!< PLLSAI1 clock used as USB clock source */ 00559 #define LL_RCC_USB_CLKSOURCE_PLL (uint32_t)(RCC_CCIPR_CLK48SEL_1) /*!< PLL clock used as USB clock source */ 00560 #define LL_RCC_USB_CLKSOURCE_MSI (uint32_t)(RCC_CCIPR_CLK48SEL) /*!< MSI clock used as USB clock source */ 00561 /** 00562 * @} 00563 */ 00564 00565 #endif /* USB_OTG_FS || USB */ 00566 00567 /** @defgroup RCC_LL_EC_ADC_CLKSOURCE Peripheral ADC clock source selection 00568 * @{ 00569 */ 00570 #define LL_RCC_ADC_CLKSOURCE_NONE (uint32_t)(0x00000000) /*!< No clock used as ADC clock source */ 00571 #define LL_RCC_ADC_CLKSOURCE_PLLSAI1 (uint32_t)(RCC_CCIPR_ADCSEL_0) /*!< PLLSAI1 clock used as ADC clock source */ 00572 #if defined(RCC_PLLSAI2_SUPPORT) 00573 #define LL_RCC_ADC_CLKSOURCE_PLLSAI2 (uint32_t)(RCC_CCIPR_ADCSEL_1) /*!< PLLSAI2 clock used as ADC clock source */ 00574 #endif /* RCC_PLLSAI2_SUPPORT */ 00575 #define LL_RCC_ADC_CLKSOURCE_SYSCLK (uint32_t)(RCC_CCIPR_ADCSEL) /*!< SYSCLK clock used as ADC clock source */ 00576 /** 00577 * @} 00578 */ 00579 00580 /** @defgroup RCC_LL_EC_SWPMI1_CLKSOURCE Peripheral SWPMI clock source selection 00581 * @{ 00582 */ 00583 #define LL_RCC_SWPMI1_CLKSOURCE_PCLK (uint32_t)(0x00000000) /*!< PCLK used as SWPMI1 clock source */ 00584 #define LL_RCC_SWPMI1_CLKSOURCE_HSI (uint32_t)(RCC_CCIPR_SWPMI1SEL) /*!< HSI used as SWPMI1 clock source */ 00585 /** 00586 * @} 00587 */ 00588 00589 #if defined(DFSDM1_Channel0) 00590 /** @defgroup RCC_LL_EC_DFSDM_CLKSOURCE Peripheral DFSDM clock source selection 00591 * @{ 00592 */ 00593 #define LL_RCC_DFSDM1_CLKSOURCE_PCLK (uint32_t)(0x00000000) /*!< PCLK used as DFSDM1 clock source */ 00594 #define LL_RCC_DFSDM1_CLKSOURCE_SYSCLK (uint32_t)(RCC_CCIPR_DFSDM1SEL) /*!< SYSCLK used as DFSDM1 clock source */ 00595 /** 00596 * @} 00597 */ 00598 #endif /* DFSDM1_Channel0 */ 00599 00600 /** @defgroup RCC_LL_EC_USART1 Peripheral USART get clock source 00601 * @{ 00602 */ 00603 #define LL_RCC_USART1_CLKSOURCE RCC_CCIPR_USART1SEL /*!< USART1 Clock source selection */ 00604 #define LL_RCC_USART2_CLKSOURCE RCC_CCIPR_USART2SEL /*!< USART2 Clock source selection */ 00605 #if defined(RCC_CCIPR_USART3SEL) 00606 #define LL_RCC_USART3_CLKSOURCE RCC_CCIPR_USART3SEL /*!< USART3 Clock source selection */ 00607 #endif /* RCC_CCIPR_USART3SEL */ 00608 /** 00609 * @} 00610 */ 00611 00612 #if defined(RCC_CCIPR_UART4SEL) || defined(RCC_CCIPR_UART5SEL) 00613 /** @defgroup RCC_LL_EC_UART4 Peripheral UART get clock source 00614 * @{ 00615 */ 00616 #if defined(RCC_CCIPR_UART4SEL) 00617 #define LL_RCC_UART4_CLKSOURCE RCC_CCIPR_UART4SEL /*!< UART4 Clock source selection */ 00618 #endif /* RCC_CCIPR_UART4SEL */ 00619 #if defined(RCC_CCIPR_UART5SEL) 00620 #define LL_RCC_UART5_CLKSOURCE RCC_CCIPR_UART5SEL /*!< UART5 Clock source selection */ 00621 #endif /* RCC_CCIPR_UART5SEL */ 00622 /** 00623 * @} 00624 */ 00625 #endif /* RCC_CCIPR_UART4SEL || RCC_CCIPR_UART5SEL */ 00626 00627 /** @defgroup RCC_LL_EC_LPUART1 Peripheral LPUART get clock source 00628 * @{ 00629 */ 00630 #define LL_RCC_LPUART1_CLKSOURCE RCC_CCIPR_LPUART1SEL /*!< LPUART1 Clock source selection */ 00631 /** 00632 * @} 00633 */ 00634 00635 /** @defgroup RCC_LL_EC_I2C1 Peripheral I2C get clock source 00636 * @{ 00637 */ 00638 #define LL_RCC_I2C1_CLKSOURCE RCC_CCIPR_I2C1SEL /*!< I2C1 Clock source selection */ 00639 #if defined(RCC_CCIPR_I2C2SEL) 00640 #define LL_RCC_I2C2_CLKSOURCE RCC_CCIPR_I2C2SEL /*!< I2C2 Clock source selection */ 00641 #endif /* RCC_CCIPR_I2C2SEL */ 00642 #define LL_RCC_I2C3_CLKSOURCE RCC_CCIPR_I2C3SEL /*!< I2C3 Clock source selection */ 00643 /** 00644 * @} 00645 */ 00646 00647 /** @defgroup RCC_LL_EC_LPTIM1 Peripheral LPTIM get clock source 00648 * @{ 00649 */ 00650 #define LL_RCC_LPTIM1_CLKSOURCE RCC_CCIPR_LPTIM1SEL /*!< LPTIM1 Clock source selection */ 00651 #define LL_RCC_LPTIM2_CLKSOURCE RCC_CCIPR_LPTIM2SEL /*!< LPTIM2 Clock source selection */ 00652 /** 00653 * @} 00654 */ 00655 00656 /** @defgroup RCC_LL_EC_SAI1 Peripheral SAI get clock source 00657 * @{ 00658 */ 00659 #define LL_RCC_SAI1_CLKSOURCE RCC_CCIPR_SAI1SEL /*!< SAI1 Clock source selection */ 00660 #if defined(RCC_CCIPR_SAI2SEL) 00661 #define LL_RCC_SAI2_CLKSOURCE RCC_CCIPR_SAI2SEL /*!< SAI2 Clock source selection */ 00662 #endif /* RCC_CCIPR_SAI2SEL */ 00663 /** 00664 * @} 00665 */ 00666 00667 /** @defgroup RCC_LL_EC_SDMMC1 Peripheral SDMMC get clock source 00668 * @{ 00669 */ 00670 #define LL_RCC_SDMMC1_CLKSOURCE RCC_CCIPR_CLK48SEL /*!< SDMMC1 Clock source selection */ 00671 /** 00672 * @} 00673 */ 00674 00675 /** @defgroup RCC_LL_EC_RNG Peripheral RNG get clock source 00676 * @{ 00677 */ 00678 #define LL_RCC_RNG_CLKSOURCE RCC_CCIPR_CLK48SEL /*!< RNG Clock source selection */ 00679 /** 00680 * @} 00681 */ 00682 00683 #if defined(USB_OTG_FS) || defined(USB) 00684 /** @defgroup RCC_LL_EC_USB Peripheral USB get clock source 00685 * @{ 00686 */ 00687 #define LL_RCC_USB_CLKSOURCE RCC_CCIPR_CLK48SEL /*!< USB Clock source selection */ 00688 /** 00689 * @} 00690 */ 00691 00692 #endif /* USB_OTG_FS || USB */ 00693 00694 /** @defgroup RCC_LL_EC_ADC Peripheral ADC get clock source 00695 * @{ 00696 */ 00697 #define LL_RCC_ADC_CLKSOURCE RCC_CCIPR_ADCSEL /*!< ADC Clock source selection */ 00698 /** 00699 * @} 00700 */ 00701 00702 /** @defgroup RCC_LL_EC_SWPMI1 Peripheral SWPMI get clock source 00703 * @{ 00704 */ 00705 #define LL_RCC_SWPMI1_CLKSOURCE RCC_CCIPR_SWPMI1SEL /*!< SWPMI1 Clock source selection */ 00706 /** 00707 * @} 00708 */ 00709 00710 #if defined(DFSDM1_Channel0) 00711 /** @defgroup RCC_LL_EC_DFSDM Peripheral DFSDM get clock source 00712 * @{ 00713 */ 00714 #define LL_RCC_DFSDM1_CLKSOURCE RCC_CCIPR_DFSDM1SEL /*!< DFSDM1 Clock source selection */ 00715 /** 00716 * @} 00717 */ 00718 #endif /* DFSDM1_Channel0 */ 00719 00720 /** @defgroup RCC_LL_EC_RTC_CLKSOURCE RTC clock source selection 00721 * @{ 00722 */ 00723 #define LL_RCC_RTC_CLKSOURCE_NONE (uint32_t)(0x00000000) /*!< No clock used as RTC clock */ 00724 #define LL_RCC_RTC_CLKSOURCE_LSE RCC_BDCR_RTCSEL_0 /*!< LSE oscillator clock used as RTC clock */ 00725 #define LL_RCC_RTC_CLKSOURCE_LSI RCC_BDCR_RTCSEL_1 /*!< LSI oscillator clock used as RTC clock */ 00726 #define LL_RCC_RTC_CLKSOURCE_HSE_DIV32 RCC_BDCR_RTCSEL /*!< HSE oscillator clock divided by 32 used as RTC clock */ 00727 /** 00728 * @} 00729 */ 00730 00731 /** @defgroup RCC_LL_EC_PLLSOURCE PLL, PLLSAI1 and PLLSAI2 entry clock source 00732 * @{ 00733 */ 00734 #define LL_RCC_PLLSOURCE_NONE (uint32_t)0x00000000 /*!< No clock */ 00735 #define LL_RCC_PLLSOURCE_MSI RCC_PLLCFGR_PLLSRC_MSI /*!< MSI clock selected as PLL entry clock source */ 00736 #define LL_RCC_PLLSOURCE_HSI RCC_PLLCFGR_PLLSRC_HSI /*!< HSI16 clock selected as PLL entry clock source */ 00737 #define LL_RCC_PLLSOURCE_HSE RCC_PLLCFGR_PLLSRC_HSE /*!< HSE clock selected as PLL entry clock source */ 00738 /** 00739 * @} 00740 */ 00741 00742 /** @defgroup RCC_LL_EC_PLLM_DIV PLL, PLLSAI1 and PLLSAI2 division factor 00743 * @{ 00744 */ 00745 #define LL_RCC_PLLM_DIV_1 ((uint32_t)0x00000000) /*!< PLL, PLLSAI1 and PLLSAI2 division factor by 1 */ 00746 #define LL_RCC_PLLM_DIV_2 (RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLSAI1 and PLLSAI2 division factor by 2 */ 00747 #define LL_RCC_PLLM_DIV_3 (RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLSAI1 and PLLSAI2 division factor by 3 */ 00748 #define LL_RCC_PLLM_DIV_4 ((RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0)) /*!< PLL, PLLSAI1 and PLLSAI2 division factor by 4 */ 00749 #define LL_RCC_PLLM_DIV_5 (RCC_PLLCFGR_PLLM_2) /*!< PLL, PLLSAI1 and PLLSAI2 division factor by 5 */ 00750 #define LL_RCC_PLLM_DIV_6 ((RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0)) /*!< PLL, PLLSAI1 and PLLSAI2 division factor by 6 */ 00751 #define LL_RCC_PLLM_DIV_7 ((RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1)) /*!< PLL, PLLSAI1 and PLLSAI2 division factor by 7 */ 00752 #define LL_RCC_PLLM_DIV_8 (RCC_PLLCFGR_PLLM) /*!< PLL, PLLSAI1 and PLLSAI2 division factor by 8 */ 00753 /** 00754 * @} 00755 */ 00756 00757 /** @defgroup RCC_LL_EC_PLLR_DIV PLL division factor (PLLR) 00758 * @{ 00759 */ 00760 #define LL_RCC_PLLR_DIV_2 ((uint32_t)0x00000000) /*!< Main PLL division factor for PLLCLK (system clock) by 2 */ 00761 #define LL_RCC_PLLR_DIV_4 (RCC_PLLCFGR_PLLR_0) /*!< Main PLL division factor for PLLCLK (system clock) by 4 */ 00762 #define LL_RCC_PLLR_DIV_6 (RCC_PLLCFGR_PLLR_1) /*!< Main PLL division factor for PLLCLK (system clock) by 6 */ 00763 #define LL_RCC_PLLR_DIV_8 (RCC_PLLCFGR_PLLR) /*!< Main PLL division factor for PLLCLK (system clock) by 8 */ 00764 /** 00765 * @} 00766 */ 00767 00768 /** @defgroup RCC_LL_EC_PLLP_DIV PLL division factor (PLLP) 00769 * @{ 00770 */ 00771 #if defined(RCC_PLLP_DIV_2_31_SUPPORT) 00772 #define LL_RCC_PLLP_DIV_2 (RCC_PLLCFGR_PLLPDIV_1) /*!< Main PLL division factor for PLLP output by 2 */ 00773 #define LL_RCC_PLLP_DIV_3 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_1) /*!< Main PLL division factor for PLLP output by 3 */ 00774 #define LL_RCC_PLLP_DIV_4 (RCC_PLLCFGR_PLLPDIV_2) /*!< Main PLL division factor for PLLP output by 4 */ 00775 #define LL_RCC_PLLP_DIV_5 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_2) /*!< Main PLL division factor for PLLP output by 5 */ 00776 #define LL_RCC_PLLP_DIV_6 (RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_2) /*!< Main PLL division factor for PLLP output by 6 */ 00777 #define LL_RCC_PLLP_DIV_7 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_2) /*!< Main PLL division factor for PLLP output by 7 */ 00778 #define LL_RCC_PLLP_DIV_8 (RCC_PLLCFGR_PLLPDIV_3) /*!< Main PLL division factor for PLLP output by 8 */ 00779 #define LL_RCC_PLLP_DIV_9 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_3) /*!< Main PLL division factor for PLLP output by 9 */ 00780 #define LL_RCC_PLLP_DIV_10 (RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_3) /*!< Main PLL division factor for PLLP output by 10 */ 00781 #define LL_RCC_PLLP_DIV_11 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_3)) /*!< Main PLL division factor for PLLP output by 11 */ 00782 #define LL_RCC_PLLP_DIV_12 (RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_3) /*!< Main PLL division factor for PLLP output by 12 */ 00783 #define LL_RCC_PLLP_DIV_13 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_3) /*!< Main PLL division factor for PLLP output by 13 */ 00784 #define LL_RCC_PLLP_DIV_14 (RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_3) /*!< Main PLL division factor for PLLP output by 14 */ 00785 #define LL_RCC_PLLP_DIV_15 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_3) /*!< Main PLL division factor for PLLP output by 15 */ 00786 #define LL_RCC_PLLP_DIV_16 (RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 16 */ 00787 #define LL_RCC_PLLP_DIV_17 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 17 */ 00788 #define LL_RCC_PLLP_DIV_18 (RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 18 */ 00789 #define LL_RCC_PLLP_DIV_19 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_4)) /*!< Main PLL division factor for PLLP output by 19 */ 00790 #define LL_RCC_PLLP_DIV_20 (RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 20 */ 00791 #define LL_RCC_PLLP_DIV_21 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 21 */ 00792 #define LL_RCC_PLLP_DIV_22 (RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 22 */ 00793 #define LL_RCC_PLLP_DIV_23 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 23 */ 00794 #define LL_RCC_PLLP_DIV_24 (RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 24 */ 00795 #define LL_RCC_PLLP_DIV_25 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 25 */ 00796 #define LL_RCC_PLLP_DIV_26 (RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 26 */ 00797 #define LL_RCC_PLLP_DIV_27 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 27 */ 00798 #define LL_RCC_PLLP_DIV_28 (RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 28 */ 00799 #define LL_RCC_PLLP_DIV_29 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 29 */ 00800 #define LL_RCC_PLLP_DIV_30 (RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 30 */ 00801 #define LL_RCC_PLLP_DIV_31 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 31 */ 00802 #else 00803 #define LL_RCC_PLLP_DIV_7 ((uint32_t)0x00000000) /*!< Main PLL division factor for PLLP output by 7 */ 00804 #define LL_RCC_PLLP_DIV_17 (RCC_PLLCFGR_PLLP) /*!< Main PLL division factor for PLLP output by 17 */ 00805 #endif /* RCC_PLLP_DIV_2_31_SUPPORT */ 00806 /** 00807 * @} 00808 */ 00809 00810 /** @defgroup RCC_LL_EC_PLLQ_DIV PLL division factor (PLLQ) 00811 * @{ 00812 */ 00813 #define LL_RCC_PLLQ_DIV_2 ((uint32_t)0x00000000) /*!< Main PLL division factor for PLLQ output by 2 */ 00814 #define LL_RCC_PLLQ_DIV_4 (RCC_PLLCFGR_PLLQ_0) /*!< Main PLL division factor for PLLQ output by 4 */ 00815 #define LL_RCC_PLLQ_DIV_6 (RCC_PLLCFGR_PLLQ_1) /*!< Main PLL division factor for PLLQ output by 6 */ 00816 #define LL_RCC_PLLQ_DIV_8 (RCC_PLLCFGR_PLLQ) /*!< Main PLL division factor for PLLQ output by 8 */ 00817 /** 00818 * @} 00819 */ 00820 00821 /** @defgroup RCC_LL_EC_PLLSAI1Q PLLSAI1 division factor (PLLSAI1Q) 00822 * @{ 00823 */ 00824 #define LL_RCC_PLLSAI1Q_DIV_2 ((uint32_t)0x00000000) /*!< PLLSAI1 division factor for PLLSAI1Q output by 2 */ 00825 #define LL_RCC_PLLSAI1Q_DIV_4 (RCC_PLLSAI1CFGR_PLLSAI1Q_0) /*!< PLLSAI1 division factor for PLLSAI1Q output by 4 */ 00826 #define LL_RCC_PLLSAI1Q_DIV_6 (RCC_PLLSAI1CFGR_PLLSAI1Q_1) /*!< PLLSAI1 division factor for PLLSAI1Q output by 6 */ 00827 #define LL_RCC_PLLSAI1Q_DIV_8 (RCC_PLLSAI1CFGR_PLLSAI1Q) /*!< PLLSAI1 division factor for PLLSAI1Q output by 8 */ 00828 /** 00829 * @} 00830 */ 00831 00832 /** @defgroup RCC_LL_EC_PLLSAI1P PLLSAI1 division factor (PLLSAI1P) 00833 * @{ 00834 */ 00835 #if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) 00836 #define LL_RCC_PLLSAI1P_DIV_2 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_1) /*!< PLLSAI1 division factor for PLLSAI1P output by 2 */ 00837 #define LL_RCC_PLLSAI1P_DIV_3 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1) /*!< PLLSAI1 division factor for PLLSAI1P output by 3 */ 00838 #define LL_RCC_PLLSAI1P_DIV_4 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_2) /*!< PLLSAI1 division factor for PLLSAI1P output by 4 */ 00839 #define LL_RCC_PLLSAI1P_DIV_5 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2) /*!< PLLSAI1 division factor for PLLSAI1P output by 5 */ 00840 #define LL_RCC_PLLSAI1P_DIV_6 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2) /*!< PLLSAI1 division factor for PLLSAI1P output by 6 */ 00841 #define LL_RCC_PLLSAI1P_DIV_7 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2) /*!< PLLSAI1 division factor for PLLSAI1P output by 7 */ 00842 #define LL_RCC_PLLSAI1P_DIV_8 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_3) /*!< PLLSAI1 division factor for PLLSAI1P output by 8 */ 00843 #define LL_RCC_PLLSAI1P_DIV_9 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3) /*!< PLLSAI1 division factor for PLLSAI1P output by 9 */ 00844 #define LL_RCC_PLLSAI1P_DIV_10 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3) /*!< PLLSAI1 division factor for PLLSAI1P output by 10 */ 00845 #define LL_RCC_PLLSAI1P_DIV_11 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3)) /*!< PLLSAI1 division factor for PLLSAI1P output by 1 */ 00846 #define LL_RCC_PLLSAI1P_DIV_12 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3) /*!< PLLSAI1 division factor for PLLSAI1P output by 12 */ 00847 #define LL_RCC_PLLSAI1P_DIV_13 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3) /*!< PLLSAI1 division factor for PLLSAI1P output by 13 */ 00848 #define LL_RCC_PLLSAI1P_DIV_14 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3) /*!< PLLSAI1 division factor for PLLSAI1P output by 14 */ 00849 #define LL_RCC_PLLSAI1P_DIV_15 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3) /*!< PLLSAI1 division factor for PLLSAI1P output by 15 */ 00850 #define LL_RCC_PLLSAI1P_DIV_16 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 16 */ 00851 #define LL_RCC_PLLSAI1P_DIV_17 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 17 */ 00852 #define LL_RCC_PLLSAI1P_DIV_18 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 18 */ 00853 #define LL_RCC_PLLSAI1P_DIV_19 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4)) /*!< PLLSAI1 division factor for PLLSAI1P output by 19 */ 00854 #define LL_RCC_PLLSAI1P_DIV_20 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 20 */ 00855 #define LL_RCC_PLLSAI1P_DIV_21 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division fctor for PLLSAI1P output by 21 */ 00856 #define LL_RCC_PLLSAI1P_DIV_22 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 22 */ 00857 #define LL_RCC_PLLSAI1P_DIV_23 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 23 */ 00858 #define LL_RCC_PLLSAI1P_DIV_24 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 24 */ 00859 #define LL_RCC_PLLSAI1P_DIV_25 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 25 */ 00860 #define LL_RCC_PLLSAI1P_DIV_26 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 26 */ 00861 #define LL_RCC_PLLSAI1P_DIV_27 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 27 */ 00862 #define LL_RCC_PLLSAI1P_DIV_28 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 28 */ 00863 #define LL_RCC_PLLSAI1P_DIV_29 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 29 */ 00864 #define LL_RCC_PLLSAI1P_DIV_30 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 30 */ 00865 #define LL_RCC_PLLSAI1P_DIV_31 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 31 */ 00866 #else 00867 #define LL_RCC_PLLSAI1P_DIV_7 ((uint32_t)0x00000000) /*!< PLLSAI1 division factor for PLLSAI1P output by 7 */ 00868 #define LL_RCC_PLLSAI1P_DIV_17 (RCC_PLLSAI1CFGR_PLLSAI1P) /*!< PLLSAI1 division factor for PLLSAI1P output by 17 */ 00869 #endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */ 00870 /** 00871 * @} 00872 */ 00873 00874 /** @defgroup RCC_LL_EC_PLLSAI1R PLLSAI1 division factor (PLLSAI1R) 00875 * @{ 00876 */ 00877 #define LL_RCC_PLLSAI1R_DIV_2 ((uint32_t)0x00000000) /*!< PLLSAI1 division factor for PLLSAI1R output by 2 */ 00878 #define LL_RCC_PLLSAI1R_DIV_4 (RCC_PLLSAI1CFGR_PLLSAI1R_0) /*!< PLLSAI1 division factor for PLLSAI1R output by 4 */ 00879 #define LL_RCC_PLLSAI1R_DIV_6 (RCC_PLLSAI1CFGR_PLLSAI1R_1) /*!< PLLSAI1 division factor for PLLSAI1R output by 6 */ 00880 #define LL_RCC_PLLSAI1R_DIV_8 (RCC_PLLSAI1CFGR_PLLSAI1R) /*!< PLLSAI1 division factor for PLLSAI1R output by 8 */ 00881 /** 00882 * @} 00883 */ 00884 00885 #if defined(RCC_PLLSAI2_SUPPORT) 00886 /** @defgroup RCC_LL_EC_PLLSAI2P PLLSAI2 division factor (PLLSAI2P) 00887 * @{ 00888 */ 00889 #define LL_RCC_PLLSAI2P_DIV_7 ((uint32_t)0x00000000) /*!< PLLSAI2 division factor for PLLSAI2P output by 7 */ 00890 #define LL_RCC_PLLSAI2P_DIV_17 (RCC_PLLSAI2CFGR_PLLSAI2P) /*!< PLLSAI2 division factor for PLLSAI2P output by 17 */ 00891 /** 00892 * @} 00893 */ 00894 00895 /** @defgroup RCC_LL_EC_PLLSAI2R PLLSAI2 division factor (PLLSAI2R) 00896 * @{ 00897 */ 00898 #define LL_RCC_PLLSAI2R_DIV_2 ((uint32_t)0x00000000) /*!< PLLSAI2 division factor for PLLSAI2R output by 2 */ 00899 #define LL_RCC_PLLSAI2R_DIV_4 (RCC_PLLSAI2CFGR_PLLSAI2R_0) /*!< PLLSAI2 division factor for PLLSAI2R output by 4 */ 00900 #define LL_RCC_PLLSAI2R_DIV_6 (RCC_PLLSAI2CFGR_PLLSAI2R_1) /*!< PLLSAI2 division factor for PLLSAI2R output by 6 */ 00901 #define LL_RCC_PLLSAI2R_DIV_8 (RCC_PLLSAI2CFGR_PLLSAI2R) /*!< PLLSAI2 division factor for PLLSAI2R output by 8 */ 00902 /** 00903 * @} 00904 */ 00905 #endif /* RCC_PLLSAI2_SUPPORT */ 00906 00907 /** @defgroup RCC_LL_EC_MSIRANGESEL MSI clock range selection 00908 * @{ 00909 */ 00910 #define LL_RCC_MSIRANGESEL_STANDBY (uint32_t)0 /*!< MSI Range is provided by MSISRANGE */ 00911 #define LL_RCC_MSIRANGESEL_RUN (uint32_t)1 /*!< MSI Range is provided by MSIRANGE */ 00912 /** 00913 * @} 00914 */ 00915 00916 /** Legacy definitions for compatibility purpose 00917 @cond 0 00918 */ 00919 #if defined(DFSDM1_Channel0) 00920 #define LL_RCC_DFSDM_CLKSOURCE_PCLK LL_RCC_DFSDM1_CLKSOURCE_PCLK 00921 #define LL_RCC_DFSDM_CLKSOURCE_SYSCLK LL_RCC_DFSDM1_CLKSOURCE_SYSCLK 00922 #define LL_RCC_DFSDM_CLKSOURCE LL_RCC_DFSDM1_CLKSOURCE 00923 #endif /* DFSDM1_Channel0 */ 00924 /** 00925 @endcond 00926 */ 00927 00928 /** 00929 * @} 00930 */ 00931 00932 /* Exported macro ------------------------------------------------------------*/ 00933 /** @defgroup RCC_LL_Exported_Macros RCC Exported Macros 00934 * @{ 00935 */ 00936 00937 /** @defgroup RCC_LL_EM_WRITE_READ Common Write and read registers Macros 00938 * @{ 00939 */ 00940 00941 /** 00942 * @brief Write a value in RCC register 00943 * @param __REG__ Register to be written 00944 * @param __VALUE__ Value to be written in the register 00945 * @retval None 00946 */ 00947 #define LL_RCC_WriteReg(__REG__, __VALUE__) WRITE_REG(RCC->__REG__, (__VALUE__)) 00948 00949 /** 00950 * @brief Read a value in RCC register 00951 * @param __REG__ Register to be read 00952 * @retval Register value 00953 */ 00954 #define LL_RCC_ReadReg(__REG__) READ_REG(RCC->__REG__) 00955 /** 00956 * @} 00957 */ 00958 00959 /** @defgroup RCC_LL_EM_CALC_FREQ Calculate frequencies 00960 * @{ 00961 */ 00962 00963 /** 00964 * @brief Helper macro to calculate the PLLCLK frequency on system domain 00965 * @note ex: @ref __LL_RCC_CALC_PLLCLK_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), 00966 * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetR ()); 00967 * @param __INPUTFREQ__ PLL Input frequency (based on MSI/HSE/HSI) 00968 * @param __PLLM__ This parameter can be one of the following values: 00969 * @arg @ref LL_RCC_PLLM_DIV_1 00970 * @arg @ref LL_RCC_PLLM_DIV_2 00971 * @arg @ref LL_RCC_PLLM_DIV_3 00972 * @arg @ref LL_RCC_PLLM_DIV_4 00973 * @arg @ref LL_RCC_PLLM_DIV_5 00974 * @arg @ref LL_RCC_PLLM_DIV_6 00975 * @arg @ref LL_RCC_PLLM_DIV_7 00976 * @arg @ref LL_RCC_PLLM_DIV_8 00977 * @param __PLLN__ Between 8 and 86 00978 * @param __PLLR__ This parameter can be one of the following values: 00979 * @arg @ref LL_RCC_PLLR_DIV_2 00980 * @arg @ref LL_RCC_PLLR_DIV_4 00981 * @arg @ref LL_RCC_PLLR_DIV_6 00982 * @arg @ref LL_RCC_PLLR_DIV_8 00983 * @retval PLL clock frequency (in Hz) 00984 */ 00985 #define __LL_RCC_CALC_PLLCLK_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLR__) ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_POSITION_PLLM) + 1)) * (__PLLN__) / \ 00986 ((((__PLLR__) >> RCC_POSITION_PLLR ) + 1 ) * 2)) 00987 00988 #if defined(RCC_PLLP_DIV_2_31_SUPPORT) 00989 /** 00990 * @brief Helper macro to calculate the PLLCLK frequency used on SAI domain 00991 * @note ex: @ref __LL_RCC_CALC_PLLCLK_SAI_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), 00992 * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetP ()); 00993 * @param __INPUTFREQ__ PLL Input frequency (based on MSI/HSE/HSI) 00994 * @param __PLLM__ This parameter can be one of the following values: 00995 * @arg @ref LL_RCC_PLLM_DIV_1 00996 * @arg @ref LL_RCC_PLLM_DIV_2 00997 * @arg @ref LL_RCC_PLLM_DIV_3 00998 * @arg @ref LL_RCC_PLLM_DIV_4 00999 * @arg @ref LL_RCC_PLLM_DIV_5 01000 * @arg @ref LL_RCC_PLLM_DIV_6 01001 * @arg @ref LL_RCC_PLLM_DIV_7 01002 * @arg @ref LL_RCC_PLLM_DIV_8 01003 * @param __PLLN__ Between 8 and 86 01004 * @param __PLLP__ This parameter can be one of the following values: 01005 * @arg @ref LL_RCC_PLLP_DIV_2 01006 * @arg @ref LL_RCC_PLLP_DIV_3 01007 * @arg @ref LL_RCC_PLLP_DIV_4 01008 * @arg @ref LL_RCC_PLLP_DIV_5 01009 * @arg @ref LL_RCC_PLLP_DIV_6 01010 * @arg @ref LL_RCC_PLLP_DIV_7 01011 * @arg @ref LL_RCC_PLLP_DIV_8 01012 * @arg @ref LL_RCC_PLLP_DIV_9 01013 * @arg @ref LL_RCC_PLLP_DIV_10 01014 * @arg @ref LL_RCC_PLLP_DIV_11 01015 * @arg @ref LL_RCC_PLLP_DIV_12 01016 * @arg @ref LL_RCC_PLLP_DIV_13 01017 * @arg @ref LL_RCC_PLLP_DIV_14 01018 * @arg @ref LL_RCC_PLLP_DIV_15 01019 * @arg @ref LL_RCC_PLLP_DIV_16 01020 * @arg @ref LL_RCC_PLLP_DIV_17 01021 * @arg @ref LL_RCC_PLLP_DIV_18 01022 * @arg @ref LL_RCC_PLLP_DIV_19 01023 * @arg @ref LL_RCC_PLLP_DIV_20 01024 * @arg @ref LL_RCC_PLLP_DIV_21 01025 * @arg @ref LL_RCC_PLLP_DIV_22 01026 * @arg @ref LL_RCC_PLLP_DIV_23 01027 * @arg @ref LL_RCC_PLLP_DIV_24 01028 * @arg @ref LL_RCC_PLLP_DIV_25 01029 * @arg @ref LL_RCC_PLLP_DIV_26 01030 * @arg @ref LL_RCC_PLLP_DIV_27 01031 * @arg @ref LL_RCC_PLLP_DIV_28 01032 * @arg @ref LL_RCC_PLLP_DIV_29 01033 * @arg @ref LL_RCC_PLLP_DIV_30 01034 * @arg @ref LL_RCC_PLLP_DIV_31 01035 * @retval PLL clock frequency (in Hz) 01036 */ 01037 #define __LL_RCC_CALC_PLLCLK_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLP__) ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_POSITION_PLLM) + 1)) * (__PLLN__) / \ 01038 ((__PLLP__) >> RCC_POSITION_PLLP)) 01039 01040 #else 01041 /** 01042 * @brief Helper macro to calculate the PLLCLK frequency used on SAI domain 01043 * @note ex: @ref __LL_RCC_CALC_PLLCLK_SAI_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), 01044 * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetP ()); 01045 * @param __INPUTFREQ__ PLL Input frequency (based on MSI/HSE/HSI) 01046 * @param __PLLM__ This parameter can be one of the following values: 01047 * @arg @ref LL_RCC_PLLM_DIV_1 01048 * @arg @ref LL_RCC_PLLM_DIV_2 01049 * @arg @ref LL_RCC_PLLM_DIV_3 01050 * @arg @ref LL_RCC_PLLM_DIV_4 01051 * @arg @ref LL_RCC_PLLM_DIV_5 01052 * @arg @ref LL_RCC_PLLM_DIV_6 01053 * @arg @ref LL_RCC_PLLM_DIV_7 01054 * @arg @ref LL_RCC_PLLM_DIV_8 01055 * @param __PLLN__ Between 8 and 86 01056 * @param __PLLP__ This parameter can be one of the following values: 01057 * @arg @ref LL_RCC_PLLP_DIV_7 01058 * @arg @ref LL_RCC_PLLP_DIV_17 01059 * @retval PLL clock frequency (in Hz) 01060 */ 01061 #define __LL_RCC_CALC_PLLCLK_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLP__) ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_POSITION_PLLM) + 1)) * (__PLLN__) / \ 01062 (((__PLLP__) == LL_RCC_PLLP_DIV_7) ? 7 : 17)) 01063 01064 #endif /* RCC_PLLP_DIV_2_31_SUPPORT */ 01065 /** 01066 * @brief Helper macro to calculate the PLLCLK frequency used on 48M domain 01067 * @note ex: @ref __LL_RCC_CALC_PLLCLK_48M_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), 01068 * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetQ ()); 01069 * @param __INPUTFREQ__ PLL Input frequency (based on MSI/HSE/HSI) 01070 * @param __PLLM__ This parameter can be one of the following values: 01071 * @arg @ref LL_RCC_PLLM_DIV_1 01072 * @arg @ref LL_RCC_PLLM_DIV_2 01073 * @arg @ref LL_RCC_PLLM_DIV_3 01074 * @arg @ref LL_RCC_PLLM_DIV_4 01075 * @arg @ref LL_RCC_PLLM_DIV_5 01076 * @arg @ref LL_RCC_PLLM_DIV_6 01077 * @arg @ref LL_RCC_PLLM_DIV_7 01078 * @arg @ref LL_RCC_PLLM_DIV_8 01079 * @param __PLLN__ Between 8 and 86 01080 * @param __PLLQ__ This parameter can be one of the following values: 01081 * @arg @ref LL_RCC_PLLQ_DIV_2 01082 * @arg @ref LL_RCC_PLLQ_DIV_4 01083 * @arg @ref LL_RCC_PLLQ_DIV_6 01084 * @arg @ref LL_RCC_PLLQ_DIV_8 01085 * @retval PLL clock frequency (in Hz) 01086 */ 01087 #define __LL_RCC_CALC_PLLCLK_48M_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLQ__) ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_POSITION_PLLM) + 1)) * (__PLLN__) / \ 01088 ((((__PLLQ__) >> RCC_POSITION_PLLQ) + 1) << 1)) 01089 01090 #if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) 01091 /** 01092 * @brief Helper macro to calculate the PLLSAI1 frequency used for SAI domain 01093 * @note ex: @ref __LL_RCC_CALC_PLLSAI1_SAI_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), 01094 * @ref LL_RCC_PLLSAI1_GetN (), @ref LL_RCC_PLLSAI1_GetP ()); 01095 * @param __INPUTFREQ__ PLL Input frequency (based on MSI/HSE/HSI) 01096 * @param __PLLM__ This parameter can be one of the following values: 01097 * @arg @ref LL_RCC_PLLM_DIV_1 01098 * @arg @ref LL_RCC_PLLM_DIV_2 01099 * @arg @ref LL_RCC_PLLM_DIV_3 01100 * @arg @ref LL_RCC_PLLM_DIV_4 01101 * @arg @ref LL_RCC_PLLM_DIV_5 01102 * @arg @ref LL_RCC_PLLM_DIV_6 01103 * @arg @ref LL_RCC_PLLM_DIV_7 01104 * @arg @ref LL_RCC_PLLM_DIV_8 01105 * @param __PLLSAI1N__ Between 8 and 86 01106 * @param __PLLSAI1P__ This parameter can be one of the following values: 01107 * @arg @ref LL_RCC_PLLSAI1P_DIV_2 01108 * @arg @ref LL_RCC_PLLSAI1P_DIV_3 01109 * @arg @ref LL_RCC_PLLSAI1P_DIV_4 01110 * @arg @ref LL_RCC_PLLSAI1P_DIV_5 01111 * @arg @ref LL_RCC_PLLSAI1P_DIV_6 01112 * @arg @ref LL_RCC_PLLSAI1P_DIV_7 01113 * @arg @ref LL_RCC_PLLSAI1P_DIV_8 01114 * @arg @ref LL_RCC_PLLSAI1P_DIV_9 01115 * @arg @ref LL_RCC_PLLSAI1P_DIV_10 01116 * @arg @ref LL_RCC_PLLSAI1P_DIV_11 01117 * @arg @ref LL_RCC_PLLSAI1P_DIV_12 01118 * @arg @ref LL_RCC_PLLSAI1P_DIV_13 01119 * @arg @ref LL_RCC_PLLSAI1P_DIV_14 01120 * @arg @ref LL_RCC_PLLSAI1P_DIV_15 01121 * @arg @ref LL_RCC_PLLSAI1P_DIV_16 01122 * @arg @ref LL_RCC_PLLSAI1P_DIV_17 01123 * @arg @ref LL_RCC_PLLSAI1P_DIV_18 01124 * @arg @ref LL_RCC_PLLSAI1P_DIV_19 01125 * @arg @ref LL_RCC_PLLSAI1P_DIV_20 01126 * @arg @ref LL_RCC_PLLSAI1P_DIV_21 01127 * @arg @ref LL_RCC_PLLSAI1P_DIV_22 01128 * @arg @ref LL_RCC_PLLSAI1P_DIV_23 01129 * @arg @ref LL_RCC_PLLSAI1P_DIV_24 01130 * @arg @ref LL_RCC_PLLSAI1P_DIV_25 01131 * @arg @ref LL_RCC_PLLSAI1P_DIV_26 01132 * @arg @ref LL_RCC_PLLSAI1P_DIV_27 01133 * @arg @ref LL_RCC_PLLSAI1P_DIV_28 01134 * @arg @ref LL_RCC_PLLSAI1P_DIV_29 01135 * @arg @ref LL_RCC_PLLSAI1P_DIV_30 01136 * @arg @ref LL_RCC_PLLSAI1P_DIV_31 01137 * @retval PLLSAI1 clock frequency (in Hz) 01138 */ 01139 #define __LL_RCC_CALC_PLLSAI1_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLSAI1N__, __PLLSAI1P__) ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_POSITION_PLLM) + 1)) * (__PLLSAI1N__) / \ 01140 ((__PLLSAI1P__) >> RCC_POSITION_PLLSAI1P)) 01141 #else 01142 /** 01143 * @brief Helper macro to calculate the PLLSAI1 frequency used for SAI domain 01144 * @note ex: @ref __LL_RCC_CALC_PLLSAI1_SAI_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), 01145 * @ref LL_RCC_PLLSAI1_GetN (), @ref LL_RCC_PLLSAI1_GetP ()); 01146 * @param __INPUTFREQ__ PLL Input frequency (based on MSI/HSE/HSI) 01147 * @param __PLLM__ This parameter can be one of the following values: 01148 * @arg @ref LL_RCC_PLLM_DIV_1 01149 * @arg @ref LL_RCC_PLLM_DIV_2 01150 * @arg @ref LL_RCC_PLLM_DIV_3 01151 * @arg @ref LL_RCC_PLLM_DIV_4 01152 * @arg @ref LL_RCC_PLLM_DIV_5 01153 * @arg @ref LL_RCC_PLLM_DIV_6 01154 * @arg @ref LL_RCC_PLLM_DIV_7 01155 * @arg @ref LL_RCC_PLLM_DIV_8 01156 * @param __PLLSAI1N__ Between 8 and 86 01157 * @param __PLLSAI1P__ This parameter can be one of the following values: 01158 * @arg @ref LL_RCC_PLLSAI1P_DIV_7 01159 * @arg @ref LL_RCC_PLLSAI1P_DIV_17 01160 * @retval PLLSAI1 clock frequency (in Hz) 01161 */ 01162 #define __LL_RCC_CALC_PLLSAI1_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLSAI1N__, __PLLSAI1P__) ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_POSITION_PLLM) + 1)) * (__PLLSAI1N__) / \ 01163 (((__PLLSAI1P__) == LL_RCC_PLLSAI1P_DIV_7) ? 7 : 17)) 01164 #endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */ 01165 01166 /** 01167 * @brief Helper macro to calculate the PLLSAI1 frequency used on 48M domain 01168 * @note ex: @ref __LL_RCC_CALC_PLLSAI1_48M_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), 01169 * @ref LL_RCC_PLLSAI1_GetN (), @ref LL_RCC_PLLSAI1_GetQ ()); 01170 * @param __INPUTFREQ__ PLL Input frequency (based on MSI/HSE/HSI) 01171 * @param __PLLM__ This parameter can be one of the following values: 01172 * @arg @ref LL_RCC_PLLM_DIV_1 01173 * @arg @ref LL_RCC_PLLM_DIV_2 01174 * @arg @ref LL_RCC_PLLM_DIV_3 01175 * @arg @ref LL_RCC_PLLM_DIV_4 01176 * @arg @ref LL_RCC_PLLM_DIV_5 01177 * @arg @ref LL_RCC_PLLM_DIV_6 01178 * @arg @ref LL_RCC_PLLM_DIV_7 01179 * @arg @ref LL_RCC_PLLM_DIV_8 01180 * @param __PLLSAI1N__ Between 8 and 86 01181 * @param __PLLSAI1Q__ This parameter can be one of the following values: 01182 * @arg @ref LL_RCC_PLLSAI1Q_DIV_2 01183 * @arg @ref LL_RCC_PLLSAI1Q_DIV_4 01184 * @arg @ref LL_RCC_PLLSAI1Q_DIV_6 01185 * @arg @ref LL_RCC_PLLSAI1Q_DIV_8 01186 * @retval PLLSAI1 clock frequency (in Hz) 01187 */ 01188 #define __LL_RCC_CALC_PLLSAI1_48M_FREQ(__INPUTFREQ__, __PLLM__, __PLLSAI1N__, __PLLSAI1Q__) ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_POSITION_PLLM) + 1)) * (__PLLSAI1N__) / \ 01189 ((((__PLLSAI1Q__) >> RCC_POSITION_PLLSAI1Q) + 1) << 1)) 01190 01191 /** 01192 * @brief Helper macro to calculate the PLLSAI1 frequency used on ADC domain 01193 * @note ex: @ref __LL_RCC_CALC_PLLSAI1_ADC_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), 01194 * @ref LL_RCC_PLLSAI1_GetN (), @ref LL_RCC_PLLSAI1_GetR ()); 01195 * @param __INPUTFREQ__ PLL Input frequency (based on MSI/HSE/HSI) 01196 * @param __PLLM__ This parameter can be one of the following values: 01197 * @arg @ref LL_RCC_PLLM_DIV_1 01198 * @arg @ref LL_RCC_PLLM_DIV_2 01199 * @arg @ref LL_RCC_PLLM_DIV_3 01200 * @arg @ref LL_RCC_PLLM_DIV_4 01201 * @arg @ref LL_RCC_PLLM_DIV_5 01202 * @arg @ref LL_RCC_PLLM_DIV_6 01203 * @arg @ref LL_RCC_PLLM_DIV_7 01204 * @arg @ref LL_RCC_PLLM_DIV_8 01205 * @param __PLLSAI1N__ Between 8 and 86 01206 * @param __PLLSAI1R__ This parameter can be one of the following values: 01207 * @arg @ref LL_RCC_PLLSAI1R_DIV_2 01208 * @arg @ref LL_RCC_PLLSAI1R_DIV_4 01209 * @arg @ref LL_RCC_PLLSAI1R_DIV_6 01210 * @arg @ref LL_RCC_PLLSAI1R_DIV_8 01211 * @retval PLLSAI1 clock frequency (in Hz) 01212 */ 01213 #define __LL_RCC_CALC_PLLSAI1_ADC_FREQ(__INPUTFREQ__, __PLLM__, __PLLSAI1N__, __PLLSAI1R__) ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_POSITION_PLLM) + 1)) * (__PLLSAI1N__) / \ 01214 ((((__PLLSAI1R__) >> RCC_POSITION_PLLSAI1R ) + 1 ) * 2)) 01215 01216 /** 01217 * @brief Helper macro to calculate the PLLSAI2 frequency used for SAI domain 01218 * @note ex: @ref __LL_RCC_CALC_PLLSAI2_SAI_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), 01219 * @ref LL_RCC_PLLSAI2_GetN (), @ref LL_RCC_PLLSAI2_GetP ()); 01220 * @param __INPUTFREQ__ PLL Input frequency (based on MSI/HSE/HSI) 01221 * @param __PLLM__ This parameter can be one of the following values: 01222 * @arg @ref LL_RCC_PLLM_DIV_1 01223 * @arg @ref LL_RCC_PLLM_DIV_2 01224 * @arg @ref LL_RCC_PLLM_DIV_3 01225 * @arg @ref LL_RCC_PLLM_DIV_4 01226 * @arg @ref LL_RCC_PLLM_DIV_5 01227 * @arg @ref LL_RCC_PLLM_DIV_6 01228 * @arg @ref LL_RCC_PLLM_DIV_7 01229 * @arg @ref LL_RCC_PLLM_DIV_8 01230 * @param __PLLSAI2N__ Between 8 and 86 01231 * @param __PLLSAI2P__ This parameter can be one of the following values: 01232 * @arg @ref LL_RCC_PLLSAI2P_DIV_7 01233 * @arg @ref LL_RCC_PLLSAI2P_DIV_17 01234 * @retval PLLSAI2 clock frequency (in Hz) 01235 */ 01236 #define __LL_RCC_CALC_PLLSAI2_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLSAI2N__, __PLLSAI2P__) ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_POSITION_PLLM) + 1)) * (__PLLSAI2N__) / \ 01237 (((__PLLSAI2P__) == LL_RCC_PLLSAI2P_DIV_7) ? 7 : 17)) 01238 01239 /** 01240 * @brief Helper macro to calculate the PLLSAI2 frequency used on ADC domain 01241 * @note ex: @ref __LL_RCC_CALC_PLLSAI2_ADC_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), 01242 * @ref LL_RCC_PLLSAI2_GetN (), @ref LL_RCC_PLLSAI2_GetR ()); 01243 * @param __INPUTFREQ__ PLL Input frequency (based on MSI/HSE/HSI) 01244 * @param __PLLM__ This parameter can be one of the following values: 01245 * @arg @ref LL_RCC_PLLM_DIV_1 01246 * @arg @ref LL_RCC_PLLM_DIV_2 01247 * @arg @ref LL_RCC_PLLM_DIV_3 01248 * @arg @ref LL_RCC_PLLM_DIV_4 01249 * @arg @ref LL_RCC_PLLM_DIV_5 01250 * @arg @ref LL_RCC_PLLM_DIV_6 01251 * @arg @ref LL_RCC_PLLM_DIV_7 01252 * @arg @ref LL_RCC_PLLM_DIV_8 01253 * @param __PLLSAI2N__ Between 8 and 86 01254 * @param __PLLSAI2R__ This parameter can be one of the following values: 01255 * @arg @ref LL_RCC_PLLSAI2R_DIV_2 01256 * @arg @ref LL_RCC_PLLSAI2R_DIV_4 01257 * @arg @ref LL_RCC_PLLSAI2R_DIV_6 01258 * @arg @ref LL_RCC_PLLSAI2R_DIV_8 01259 * @retval PLLSAI2 clock frequency (in Hz) 01260 */ 01261 #define __LL_RCC_CALC_PLLSAI2_ADC_FREQ(__INPUTFREQ__, __PLLM__, __PLLSAI2N__, __PLLSAI2R__) ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_POSITION_PLLM) + 1)) * (__PLLSAI2N__) / \ 01262 ((((__PLLSAI2R__) >> RCC_POSITION_PLLSAI2R ) + 1 ) * 2)) 01263 01264 /** 01265 * @brief Helper macro to calculate the HCLK frequency 01266 * @param __SYSCLKFREQ__ SYSCLK frequency (based on MSI/HSE/HSI/PLLCLK) 01267 * @param __AHBPRESCALER__ This parameter can be one of the following values: 01268 * @arg @ref LL_RCC_SYSCLK_DIV_1 01269 * @arg @ref LL_RCC_SYSCLK_DIV_2 01270 * @arg @ref LL_RCC_SYSCLK_DIV_4 01271 * @arg @ref LL_RCC_SYSCLK_DIV_8 01272 * @arg @ref LL_RCC_SYSCLK_DIV_16 01273 * @arg @ref LL_RCC_SYSCLK_DIV_64 01274 * @arg @ref LL_RCC_SYSCLK_DIV_128 01275 * @arg @ref LL_RCC_SYSCLK_DIV_256 01276 * @arg @ref LL_RCC_SYSCLK_DIV_512 01277 * @retval HCLK clock frequency (in Hz) 01278 */ 01279 #define __LL_RCC_CALC_HCLK_FREQ(__SYSCLKFREQ__, __AHBPRESCALER__) ((__SYSCLKFREQ__) >> AHBPrescTable[((__AHBPRESCALER__) & RCC_CFGR_HPRE) >> RCC_POSITION_HPRE]) 01280 01281 /** 01282 * @brief Helper macro to calculate the PCLK1 frequency (ABP1) 01283 * @param __HCLKFREQ__ HCLK frequency 01284 * @param __APB1PRESCALER__ This parameter can be one of the following values: 01285 * @arg @ref LL_RCC_APB1_DIV_1 01286 * @arg @ref LL_RCC_APB1_DIV_2 01287 * @arg @ref LL_RCC_APB1_DIV_4 01288 * @arg @ref LL_RCC_APB1_DIV_8 01289 * @arg @ref LL_RCC_APB1_DIV_16 01290 * @retval PCLK1 clock frequency (in Hz) 01291 */ 01292 #define __LL_RCC_CALC_PCLK1_FREQ(__HCLKFREQ__, __APB1PRESCALER__) ((__HCLKFREQ__) >> aRCC_APBAHBPrescTable[(__APB1PRESCALER__) >> RCC_POSITION_PPRE1]) 01293 01294 /** 01295 * @brief Helper macro to calculate the PCLK2 frequency (ABP2) 01296 * @param __HCLKFREQ__ HCLK frequency 01297 * @param __APB2PRESCALER__ This parameter can be one of the following values: 01298 * @arg @ref LL_RCC_APB2_DIV_1 01299 * @arg @ref LL_RCC_APB2_DIV_2 01300 * @arg @ref LL_RCC_APB2_DIV_4 01301 * @arg @ref LL_RCC_APB2_DIV_8 01302 * @arg @ref LL_RCC_APB2_DIV_16 01303 * @retval PCLK2 clock frequency (in Hz) 01304 */ 01305 #define __LL_RCC_CALC_PCLK2_FREQ(__HCLKFREQ__, __APB2PRESCALER__) ((__HCLKFREQ__) >> aRCC_APBAHBPrescTable[(__APB2PRESCALER__) >> RCC_POSITION_PPRE2]) 01306 01307 /** 01308 * @brief Helper macro to calculate the MSI frequency (in Hz) 01309 * @note: __MSISEL__ can be retrieved thanks to function LL_RCC_MSI_IsEnabledRangeSelect 01310 * @note: if __MSISEL__ is equal to LL_RCC_MSIRANGESEL_STANDBY, 01311 * __MSIRANGE__can be retrieved by LL_RCC_MSI_GetRangeAfterStandby 01312 * else by LL_RCC_MSI_GetRange 01313 * ex: __LL_RCC_CALC_MSI_FREQ(LL_RCC_MSI_IsEnabledRangeSelect(), 01314 * (LL_RCC_MSI_IsEnabledRangeSelect()? 01315 * LL_RCC_MSI_GetRange(): 01316 * LL_RCC_MSI_GetRangeAfterStandby())) 01317 * @param __MSISEL__ This parameter can be one of the following values: 01318 * @arg @ref LL_RCC_MSIRANGESEL_STANDBY 01319 * @arg @ref LL_RCC_MSIRANGESEL_RUN 01320 * @param __MSIRANGE__ This parameter can be one of the following values: 01321 * @arg @ref LL_RCC_MSIRANGE_0 01322 * @arg @ref LL_RCC_MSIRANGE_1 01323 * @arg @ref LL_RCC_MSIRANGE_2 01324 * @arg @ref LL_RCC_MSIRANGE_3 01325 * @arg @ref LL_RCC_MSIRANGE_4 01326 * @arg @ref LL_RCC_MSIRANGE_5 01327 * @arg @ref LL_RCC_MSIRANGE_6 01328 * @arg @ref LL_RCC_MSIRANGE_7 01329 * @arg @ref LL_RCC_MSIRANGE_8 01330 * @arg @ref LL_RCC_MSIRANGE_9 01331 * @arg @ref LL_RCC_MSIRANGE_10 01332 * @arg @ref LL_RCC_MSIRANGE_11 01333 * @arg @ref LL_RCC_MSISRANGE_4 01334 * @arg @ref LL_RCC_MSISRANGE_5 01335 * @arg @ref LL_RCC_MSISRANGE_6 01336 * @arg @ref LL_RCC_MSISRANGE_7 01337 * @retval MSI clock frequency (in Hz) 01338 */ 01339 #define __LL_RCC_CALC_MSI_FREQ(__MSISEL__, __MSIRANGE__) (((__MSISEL__) == LL_RCC_MSIRANGESEL_STANDBY) ? \ 01340 (MSIRangeTable[(__MSIRANGE__) >> 8]) : \ 01341 (MSIRangeTable[(__MSIRANGE__) >> 4])) 01342 01343 /** 01344 * @} 01345 */ 01346 01347 /** 01348 * @} 01349 */ 01350 01351 /* Exported functions --------------------------------------------------------*/ 01352 /** @defgroup RCC_LL_Exported_Functions RCC Exported Functions 01353 * @{ 01354 */ 01355 01356 /** @defgroup RCC_LL_EF_HSE HSE 01357 * @{ 01358 */ 01359 01360 /** 01361 * @brief Enable the Clock Security System. 01362 * @rmtoll CR CSSON LL_RCC_HSE_EnableCSS 01363 * @retval None 01364 */ 01365 __STATIC_INLINE void LL_RCC_HSE_EnableCSS(void) 01366 { 01367 SET_BIT(RCC->CR, RCC_CR_CSSON); 01368 } 01369 01370 /** 01371 * @brief Enable HSE external oscillator (HSE Bypass) 01372 * @rmtoll CR HSEBYP LL_RCC_HSE_EnableBypass 01373 * @retval None 01374 */ 01375 __STATIC_INLINE void LL_RCC_HSE_EnableBypass(void) 01376 { 01377 SET_BIT(RCC->CR, RCC_CR_HSEBYP); 01378 } 01379 01380 /** 01381 * @brief Disable HSE external oscillator (HSE Bypass) 01382 * @rmtoll CR HSEBYP LL_RCC_HSE_DisableBypass 01383 * @retval None 01384 */ 01385 __STATIC_INLINE void LL_RCC_HSE_DisableBypass(void) 01386 { 01387 CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP); 01388 } 01389 01390 /** 01391 * @brief Enable HSE crystal oscillator (HSE ON) 01392 * @rmtoll CR HSEON LL_RCC_HSE_Enable 01393 * @retval None 01394 */ 01395 __STATIC_INLINE void LL_RCC_HSE_Enable(void) 01396 { 01397 SET_BIT(RCC->CR, RCC_CR_HSEON); 01398 } 01399 01400 /** 01401 * @brief Disable HSE crystal oscillator (HSE ON) 01402 * @rmtoll CR HSEON LL_RCC_HSE_Disable 01403 * @retval None 01404 */ 01405 __STATIC_INLINE void LL_RCC_HSE_Disable(void) 01406 { 01407 CLEAR_BIT(RCC->CR, RCC_CR_HSEON); 01408 } 01409 01410 /** 01411 * @brief Check if HSE oscillator Ready 01412 * @rmtoll CR HSERDY LL_RCC_HSE_IsReady 01413 * @retval State of bit (1 or 0). 01414 */ 01415 __STATIC_INLINE uint32_t LL_RCC_HSE_IsReady(void) 01416 { 01417 return (READ_BIT(RCC->CR, RCC_CR_HSERDY) == (RCC_CR_HSERDY)); 01418 } 01419 01420 /** 01421 * @} 01422 */ 01423 01424 /** @defgroup RCC_LL_EF_HSI HSI 01425 * @{ 01426 */ 01427 01428 /** 01429 * @brief Enable HSI even in stop mode 01430 * @note HSI oscillator is forced ON even in Stop mode 01431 * @rmtoll CR HSIKERON LL_RCC_HSI_EnableInStopMode 01432 * @retval None 01433 */ 01434 __STATIC_INLINE void LL_RCC_HSI_EnableInStopMode(void) 01435 { 01436 SET_BIT(RCC->CR, RCC_CR_HSIKERON); 01437 } 01438 01439 /** 01440 * @brief Disable HSI in stop mode 01441 * @rmtoll CR HSIKERON LL_RCC_HSI_DisableInStopMode 01442 * @retval None 01443 */ 01444 __STATIC_INLINE void LL_RCC_HSI_DisableInStopMode(void) 01445 { 01446 CLEAR_BIT(RCC->CR, RCC_CR_HSIKERON); 01447 } 01448 01449 /** 01450 * @brief Enable HSI oscillator 01451 * @rmtoll CR HSION LL_RCC_HSI_Enable 01452 * @retval None 01453 */ 01454 __STATIC_INLINE void LL_RCC_HSI_Enable(void) 01455 { 01456 SET_BIT(RCC->CR, RCC_CR_HSION); 01457 } 01458 01459 /** 01460 * @brief Disable HSI oscillator 01461 * @rmtoll CR HSION LL_RCC_HSI_Disable 01462 * @retval None 01463 */ 01464 __STATIC_INLINE void LL_RCC_HSI_Disable(void) 01465 { 01466 CLEAR_BIT(RCC->CR, RCC_CR_HSION); 01467 } 01468 01469 /** 01470 * @brief Check if HSI clock is ready 01471 * @rmtoll CR HSIRDY LL_RCC_HSI_IsReady 01472 * @retval State of bit (1 or 0). 01473 */ 01474 __STATIC_INLINE uint32_t LL_RCC_HSI_IsReady(void) 01475 { 01476 return (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == (RCC_CR_HSIRDY)); 01477 } 01478 01479 /** 01480 * @brief Enable HSI Automatic from stop mode 01481 * @rmtoll CR HSIASFS LL_RCC_HSI_EnableAutoFromStop 01482 * @retval None 01483 */ 01484 __STATIC_INLINE void LL_RCC_HSI_EnableAutoFromStop(void) 01485 { 01486 SET_BIT(RCC->CR, RCC_CR_HSIASFS); 01487 } 01488 01489 /** 01490 * @brief Disable HSI Automatic from stop mode 01491 * @rmtoll CR HSIASFS LL_RCC_HSI_DisableAutoFromStop 01492 * @retval None 01493 */ 01494 __STATIC_INLINE void LL_RCC_HSI_DisableAutoFromStop(void) 01495 { 01496 CLEAR_BIT(RCC->CR, RCC_CR_HSIASFS); 01497 } 01498 /** 01499 * @brief Get HSI Calibration value 01500 * @note When HSITRIM is written, HSICAL is updated with the sum of 01501 * HSITRIM and the factory trim value 01502 * @rmtoll ICSCR HSICAL LL_RCC_HSI_GetCalibration 01503 * @retval Between Min_Data = 0x00 and Max_Data = 0xFF 01504 */ 01505 __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibration(void) 01506 { 01507 return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_HSICAL) >> RCC_POSITION_HSICAL); 01508 } 01509 01510 /** 01511 * @brief Set HSI Calibration trimming 01512 * @note user-programmable trimming value that is added to the HSICAL 01513 * @note Default value is 16, which, when added to the HSICAL value, 01514 * should trim the HSI to 16 MHz +/- 1 % 01515 * @rmtoll ICSCR HSITRIM LL_RCC_HSI_SetCalibTrimming 01516 * @param Value Between Min_Data = 0 and Max_Data = 31 01517 * @retval None 01518 */ 01519 __STATIC_INLINE void LL_RCC_HSI_SetCalibTrimming(uint32_t Value) 01520 { 01521 MODIFY_REG(RCC->ICSCR, RCC_ICSCR_HSITRIM, Value << RCC_POSITION_HSITRIM); 01522 } 01523 01524 /** 01525 * @brief Get HSI Calibration trimming 01526 * @rmtoll ICSCR HSITRIM LL_RCC_HSI_GetCalibTrimming 01527 * @retval Between Min_Data = 0 and Max_Data = 31 01528 */ 01529 __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibTrimming(void) 01530 { 01531 return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_HSITRIM) >> RCC_POSITION_HSITRIM); 01532 } 01533 01534 /** 01535 * @} 01536 */ 01537 01538 #if defined(RCC_HSI48_SUPPORT) 01539 /** @defgroup RCC_LL_EF_HSI48 HSI48 01540 * @{ 01541 */ 01542 01543 /** 01544 * @brief Enable HSI48 01545 * @rmtoll CRRCR HSI48ON LL_RCC_HSI48_Enable 01546 * @retval None 01547 */ 01548 __STATIC_INLINE void LL_RCC_HSI48_Enable(void) 01549 { 01550 SET_BIT(RCC->CRRCR, RCC_CRRCR_HSI48ON); 01551 } 01552 01553 /** 01554 * @brief Disable HSI48 01555 * @rmtoll CRRCR HSI48ON LL_RCC_HSI48_Disable 01556 * @retval None 01557 */ 01558 __STATIC_INLINE void LL_RCC_HSI48_Disable(void) 01559 { 01560 CLEAR_BIT(RCC->CRRCR, RCC_CRRCR_HSI48ON); 01561 } 01562 01563 /** 01564 * @brief Check if HSI48 oscillator Ready 01565 * @rmtoll CRRCR HSI48RDY LL_RCC_HSI48_IsReady 01566 * @retval State of bit (1 or 0). 01567 */ 01568 __STATIC_INLINE uint32_t LL_RCC_HSI48_IsReady(void) 01569 { 01570 return (READ_BIT(RCC->CRRCR, RCC_CRRCR_HSI48RDY) == (RCC_CRRCR_HSI48RDY)); 01571 } 01572 01573 /** 01574 * @brief Get HSI48 Calibration value 01575 * @rmtoll CRRCR HSI48CAL LL_RCC_HSI48_GetCalibration 01576 * @retval Between Min_Data = 0x00 and Max_Data = 0xFF 01577 */ 01578 __STATIC_INLINE uint32_t LL_RCC_HSI48_GetCalibration(void) 01579 { 01580 return (uint32_t)(READ_BIT(RCC->CRRCR, RCC_CRRCR_HSI48CAL) >> RCC_POSITION_HSI48CAL); 01581 } 01582 01583 /** 01584 * @} 01585 */ 01586 #endif /* RCC_HSI48_SUPPORT */ 01587 01588 /** @defgroup RCC_LL_EF_LSE LSE 01589 * @{ 01590 */ 01591 01592 /** 01593 * @brief Enable Low Speed External (LSE) crystal. 01594 * @rmtoll BDCR LSEON LL_RCC_LSE_Enable 01595 * @retval None 01596 */ 01597 __STATIC_INLINE void LL_RCC_LSE_Enable(void) 01598 { 01599 SET_BIT(RCC->BDCR, RCC_BDCR_LSEON); 01600 } 01601 01602 /** 01603 * @brief Disable Low Speed External (LSE) crystal. 01604 * @rmtoll BDCR LSEON LL_RCC_LSE_Disable 01605 * @retval None 01606 */ 01607 __STATIC_INLINE void LL_RCC_LSE_Disable(void) 01608 { 01609 CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON); 01610 } 01611 01612 /** 01613 * @brief Enable external clock source (LSE bypass). 01614 * @rmtoll BDCR LSEBYP LL_RCC_LSE_EnableBypass 01615 * @retval None 01616 */ 01617 __STATIC_INLINE void LL_RCC_LSE_EnableBypass(void) 01618 { 01619 SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP); 01620 } 01621 01622 /** 01623 * @brief Disable external clock source (LSE bypass). 01624 * @rmtoll BDCR LSEBYP LL_RCC_LSE_DisableBypass 01625 * @retval None 01626 */ 01627 __STATIC_INLINE void LL_RCC_LSE_DisableBypass(void) 01628 { 01629 CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP); 01630 } 01631 01632 /** 01633 * @brief Set LSE oscillator drive capability 01634 * @note The oscillator is in Xtal mode when it is not in bypass mode. 01635 * @rmtoll BDCR LSEDRV LL_RCC_LSE_SetDriveCapability 01636 * @param LSEDrive This parameter can be one of the following values: 01637 * @arg @ref LL_RCC_LSEDRIVE_LOW 01638 * @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW 01639 * @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH 01640 * @arg @ref LL_RCC_LSEDRIVE_HIGH 01641 * @retval None 01642 */ 01643 __STATIC_INLINE void LL_RCC_LSE_SetDriveCapability(uint32_t LSEDrive) 01644 { 01645 MODIFY_REG(RCC->BDCR, RCC_BDCR_LSEDRV, LSEDrive); 01646 } 01647 01648 /** 01649 * @brief Get LSE oscillator drive capability 01650 * @rmtoll BDCR LSEDRV LL_RCC_LSE_GetDriveCapability 01651 * @retval Returned value can be one of the following values: 01652 * @arg @ref LL_RCC_LSEDRIVE_LOW 01653 * @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW 01654 * @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH 01655 * @arg @ref LL_RCC_LSEDRIVE_HIGH 01656 */ 01657 __STATIC_INLINE uint32_t LL_RCC_LSE_GetDriveCapability(void) 01658 { 01659 return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_LSEDRV)); 01660 } 01661 01662 /** 01663 * @brief Enable Clock security system on LSE. 01664 * @rmtoll BDCR LSECSSON LL_RCC_LSE_EnableCSS 01665 * @retval None 01666 */ 01667 __STATIC_INLINE void LL_RCC_LSE_EnableCSS(void) 01668 { 01669 SET_BIT(RCC->BDCR, RCC_BDCR_LSECSSON); 01670 } 01671 01672 /** 01673 * @brief Disable Clock security system on LSE. 01674 * @note Clock security system can be disabled only after a LSE 01675 * failure detection. In that case it MUST be disabled by software. 01676 * @rmtoll BDCR LSECSSON LL_RCC_LSE_DisableCSS 01677 * @retval None 01678 */ 01679 __STATIC_INLINE void LL_RCC_LSE_DisableCSS(void) 01680 { 01681 CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSECSSON); 01682 } 01683 01684 /** 01685 * @brief Check if LSE oscillator Ready 01686 * @rmtoll BDCR LSERDY LL_RCC_LSE_IsReady 01687 * @retval State of bit (1 or 0). 01688 */ 01689 __STATIC_INLINE uint32_t LL_RCC_LSE_IsReady(void) 01690 { 01691 return (READ_BIT(RCC->BDCR, RCC_BDCR_LSERDY) == (RCC_BDCR_LSERDY)); 01692 } 01693 01694 /** 01695 * @brief Check if CSS on LSE failure Detection 01696 * @rmtoll BDCR LSECSSD LL_RCC_LSE_IsCSSDetected 01697 * @retval State of bit (1 or 0). 01698 */ 01699 __STATIC_INLINE uint32_t LL_RCC_LSE_IsCSSDetected(void) 01700 { 01701 return (READ_BIT(RCC->BDCR, RCC_BDCR_LSECSSD) == (RCC_BDCR_LSECSSD)); 01702 } 01703 01704 /** 01705 * @} 01706 */ 01707 01708 /** @defgroup RCC_LL_EF_LSI LSI 01709 * @{ 01710 */ 01711 01712 /** 01713 * @brief Enable LSI Oscillator 01714 * @rmtoll CSR LSION LL_RCC_LSI_Enable 01715 * @retval None 01716 */ 01717 __STATIC_INLINE void LL_RCC_LSI_Enable(void) 01718 { 01719 SET_BIT(RCC->CSR, RCC_CSR_LSION); 01720 } 01721 01722 /** 01723 * @brief Disable LSI Oscillator 01724 * @rmtoll CSR LSION LL_RCC_LSI_Disable 01725 * @retval None 01726 */ 01727 __STATIC_INLINE void LL_RCC_LSI_Disable(void) 01728 { 01729 CLEAR_BIT(RCC->CSR, RCC_CSR_LSION); 01730 } 01731 01732 /** 01733 * @brief Check if LSI is Ready 01734 * @rmtoll CSR LSIRDY LL_RCC_LSI_IsReady 01735 * @retval State of bit (1 or 0). 01736 */ 01737 __STATIC_INLINE uint32_t LL_RCC_LSI_IsReady(void) 01738 { 01739 return (READ_BIT(RCC->CSR, RCC_CSR_LSIRDY) == (RCC_CSR_LSIRDY)); 01740 } 01741 01742 /** 01743 * @} 01744 */ 01745 01746 /** @defgroup RCC_LL_EF_MSI MSI 01747 * @{ 01748 */ 01749 01750 /** 01751 * @brief Enable MSI oscillator 01752 * @rmtoll CR MSION LL_RCC_MSI_Enable 01753 * @retval None 01754 */ 01755 __STATIC_INLINE void LL_RCC_MSI_Enable(void) 01756 { 01757 SET_BIT(RCC->CR, RCC_CR_MSION); 01758 } 01759 01760 /** 01761 * @brief Disable MSI oscillator 01762 * @rmtoll CR MSION LL_RCC_MSI_Disable 01763 * @retval None 01764 */ 01765 __STATIC_INLINE void LL_RCC_MSI_Disable(void) 01766 { 01767 CLEAR_BIT(RCC->CR, RCC_CR_MSION); 01768 } 01769 01770 /** 01771 * @brief Check if MSI oscillator Ready 01772 * @rmtoll CR MSIRDY LL_RCC_MSI_IsReady 01773 * @retval State of bit (1 or 0). 01774 */ 01775 __STATIC_INLINE uint32_t LL_RCC_MSI_IsReady(void) 01776 { 01777 return (READ_BIT(RCC->CR, RCC_CR_MSIRDY) == (RCC_CR_MSIRDY)); 01778 } 01779 01780 /** 01781 * @brief Enable MSI PLL-mode (Hardware auto calibration with LSE) 01782 * @note MSIPLLEN must be enabled after LSE is enabled (LSEON enabled) 01783 * and ready (LSERDY set by hardware) 01784 * @note hardware protection to avoid enabling MSIPLLEN if LSE is not 01785 * ready 01786 * @rmtoll CR MSIPLLEN LL_RCC_MSI_EnablePLLMode 01787 * @retval None 01788 */ 01789 __STATIC_INLINE void LL_RCC_MSI_EnablePLLMode(void) 01790 { 01791 SET_BIT(RCC->CR, RCC_CR_MSIPLLEN); 01792 } 01793 01794 /** 01795 * @brief Disable MSI-PLL mode 01796 * @note cleared by hardware when LSE is disabled (LSEON = 0) or when 01797 * the Clock Security System on LSE detects a LSE failure 01798 * @rmtoll CR MSIPLLEN LL_RCC_MSI_DisablePLLMode 01799 * @retval None 01800 */ 01801 __STATIC_INLINE void LL_RCC_MSI_DisablePLLMode(void) 01802 { 01803 CLEAR_BIT(RCC->CR, RCC_CR_MSIPLLEN); 01804 } 01805 01806 /** 01807 * @brief Enable MSI clock range selection with MSIRANGE register 01808 * @note Write 0 has no effect. After a standby or a reset 01809 * MSIRGSEL is at 0 and the MSI range value is provided by 01810 * MSISRANGE 01811 * @rmtoll CR MSIRGSEL LL_RCC_MSI_EnableRangeSelection 01812 * @retval None 01813 */ 01814 __STATIC_INLINE void LL_RCC_MSI_EnableRangeSelection(void) 01815 { 01816 SET_BIT(RCC->CR, RCC_CR_MSIRGSEL); 01817 } 01818 01819 /** 01820 * @brief Check if MSI clock range is selected with MSIRANGE register 01821 * @rmtoll CR MSIRGSEL LL_RCC_MSI_IsEnabledRangeSelect 01822 * @retval State of bit (1 or 0). 01823 */ 01824 __STATIC_INLINE uint32_t LL_RCC_MSI_IsEnabledRangeSelect(void) 01825 { 01826 return (READ_BIT(RCC->CR, RCC_CR_MSIRGSEL) == (RCC_CR_MSIRGSEL)); 01827 } 01828 01829 /** 01830 * @brief Configure the Internal Multi Speed oscillator (MSI) clock range in run mode. 01831 * @rmtoll CR MSIRANGE LL_RCC_MSI_SetRange 01832 * @param Range This parameter can be one of the following values: 01833 * @arg @ref LL_RCC_MSIRANGE_0 01834 * @arg @ref LL_RCC_MSIRANGE_1 01835 * @arg @ref LL_RCC_MSIRANGE_2 01836 * @arg @ref LL_RCC_MSIRANGE_3 01837 * @arg @ref LL_RCC_MSIRANGE_4 01838 * @arg @ref LL_RCC_MSIRANGE_5 01839 * @arg @ref LL_RCC_MSIRANGE_6 01840 * @arg @ref LL_RCC_MSIRANGE_7 01841 * @arg @ref LL_RCC_MSIRANGE_8 01842 * @arg @ref LL_RCC_MSIRANGE_9 01843 * @arg @ref LL_RCC_MSIRANGE_10 01844 * @arg @ref LL_RCC_MSIRANGE_11 01845 * @retval None 01846 */ 01847 __STATIC_INLINE void LL_RCC_MSI_SetRange(uint32_t Range) 01848 { 01849 MODIFY_REG(RCC->CR, RCC_CR_MSIRANGE, Range); 01850 } 01851 01852 /** 01853 * @brief Get the Internal Multi Speed oscillator (MSI) clock range in run mode. 01854 * @rmtoll CR MSIRANGE LL_RCC_MSI_GetRange 01855 * @retval Returned value can be one of the following values: 01856 * @arg @ref LL_RCC_MSIRANGE_0 01857 * @arg @ref LL_RCC_MSIRANGE_1 01858 * @arg @ref LL_RCC_MSIRANGE_2 01859 * @arg @ref LL_RCC_MSIRANGE_3 01860 * @arg @ref LL_RCC_MSIRANGE_4 01861 * @arg @ref LL_RCC_MSIRANGE_5 01862 * @arg @ref LL_RCC_MSIRANGE_6 01863 * @arg @ref LL_RCC_MSIRANGE_7 01864 * @arg @ref LL_RCC_MSIRANGE_8 01865 * @arg @ref LL_RCC_MSIRANGE_9 01866 * @arg @ref LL_RCC_MSIRANGE_10 01867 * @arg @ref LL_RCC_MSIRANGE_11 01868 */ 01869 __STATIC_INLINE uint32_t LL_RCC_MSI_GetRange(void) 01870 { 01871 return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_MSIRANGE)); 01872 } 01873 01874 /** 01875 * @brief Configure MSI range used after standby 01876 * @rmtoll CSR MSISRANGE LL_RCC_MSI_SetRangeAfterStandby 01877 * @param Range This parameter can be one of the following values: 01878 * @arg @ref LL_RCC_MSISRANGE_4 01879 * @arg @ref LL_RCC_MSISRANGE_5 01880 * @arg @ref LL_RCC_MSISRANGE_6 01881 * @arg @ref LL_RCC_MSISRANGE_7 01882 * @retval None 01883 */ 01884 __STATIC_INLINE void LL_RCC_MSI_SetRangeAfterStandby(uint32_t Range) 01885 { 01886 MODIFY_REG(RCC->CSR, RCC_CSR_MSISRANGE, Range); 01887 } 01888 01889 /** 01890 * @brief Get MSI range used after standby 01891 * @rmtoll CSR MSISRANGE LL_RCC_MSI_GetRangeAfterStandby 01892 * @retval Returned value can be one of the following values: 01893 * @arg @ref LL_RCC_MSISRANGE_4 01894 * @arg @ref LL_RCC_MSISRANGE_5 01895 * @arg @ref LL_RCC_MSISRANGE_6 01896 * @arg @ref LL_RCC_MSISRANGE_7 01897 */ 01898 __STATIC_INLINE uint32_t LL_RCC_MSI_GetRangeAfterStandby(void) 01899 { 01900 return (uint32_t)(READ_BIT(RCC->CSR, RCC_CSR_MSISRANGE)); 01901 } 01902 01903 /** 01904 * @brief Get MSI Calibration value 01905 * @note When MSITRIM is written, MSICAL is updated with the sum of 01906 * MSITRIM and the factory trim value 01907 * @rmtoll ICSCR MSICAL LL_RCC_MSI_GetCalibration 01908 * @retval Between Min_Data = 0 and Max_Data = 255 01909 */ 01910 __STATIC_INLINE uint32_t LL_RCC_MSI_GetCalibration(void) 01911 { 01912 return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_MSICAL) >> RCC_POSITION_MSICAL); 01913 } 01914 01915 /** 01916 * @brief Set MSI Calibration trimming 01917 * @note user-programmable trimming value that is added to the MSICAL 01918 * @rmtoll ICSCR MSITRIM LL_RCC_MSI_SetCalibTrimming 01919 * @param Value Between Min_Data = 0 and Max_Data = 255 01920 * @retval None 01921 */ 01922 __STATIC_INLINE void LL_RCC_MSI_SetCalibTrimming(uint32_t Value) 01923 { 01924 MODIFY_REG(RCC->ICSCR, RCC_ICSCR_MSITRIM, Value << RCC_POSITION_MSITRIM); 01925 } 01926 01927 /** 01928 * @brief Get MSI Calibration trimming 01929 * @rmtoll ICSCR MSITRIM LL_RCC_MSI_GetCalibTrimming 01930 * @retval Between 0 and 255 01931 */ 01932 __STATIC_INLINE uint32_t LL_RCC_MSI_GetCalibTrimming(void) 01933 { 01934 return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_MSITRIM) >> RCC_POSITION_MSITRIM); 01935 } 01936 01937 /** 01938 * @} 01939 */ 01940 01941 /** @defgroup RCC_LL_EF_LSCO LSCO 01942 * @{ 01943 */ 01944 01945 /** 01946 * @brief Enable Low speed clock 01947 * @rmtoll BDCR LSCOEN LL_RCC_LSCO_Enable 01948 * @retval None 01949 */ 01950 __STATIC_INLINE void LL_RCC_LSCO_Enable(void) 01951 { 01952 SET_BIT(RCC->BDCR, RCC_BDCR_LSCOEN); 01953 } 01954 01955 /** 01956 * @brief Disable Low speed clock 01957 * @rmtoll BDCR LSCOEN LL_RCC_LSCO_Disable 01958 * @retval None 01959 */ 01960 __STATIC_INLINE void LL_RCC_LSCO_Disable(void) 01961 { 01962 CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSCOEN); 01963 } 01964 01965 /** 01966 * @brief Configure Low speed clock selection 01967 * @rmtoll BDCR LSCOSEL LL_RCC_LSCO_SetSource 01968 * @param Source This parameter can be one of the following values: 01969 * @arg @ref LL_RCC_LSCO_CLKSOURCE_LSI 01970 * @arg @ref LL_RCC_LSCO_CLKSOURCE_LSE 01971 * @retval None 01972 */ 01973 __STATIC_INLINE void LL_RCC_LSCO_SetSource(uint32_t Source) 01974 { 01975 MODIFY_REG(RCC->BDCR, RCC_BDCR_LSCOSEL, Source); 01976 } 01977 01978 /** 01979 * @brief Get Low speed clock selection 01980 * @rmtoll BDCR LSCOSEL LL_RCC_LSCO_GetSource 01981 * @retval Returned value can be one of the following values: 01982 * @arg @ref LL_RCC_LSCO_CLKSOURCE_LSI 01983 * @arg @ref LL_RCC_LSCO_CLKSOURCE_LSE 01984 */ 01985 __STATIC_INLINE uint32_t LL_RCC_LSCO_GetSource(void) 01986 { 01987 return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_LSCOSEL)); 01988 } 01989 01990 /** 01991 * @} 01992 */ 01993 01994 /** @defgroup RCC_LL_EF_System System 01995 * @{ 01996 */ 01997 01998 /** 01999 * @brief Configure the system clock source 02000 * @rmtoll CFGR SW LL_RCC_SetSysClkSource 02001 * @param Source This parameter can be one of the following values: 02002 * @arg @ref LL_RCC_SYS_CLKSOURCE_MSI 02003 * @arg @ref LL_RCC_SYS_CLKSOURCE_HSI 02004 * @arg @ref LL_RCC_SYS_CLKSOURCE_HSE 02005 * @arg @ref LL_RCC_SYS_CLKSOURCE_PLL 02006 * @retval None 02007 */ 02008 __STATIC_INLINE void LL_RCC_SetSysClkSource(uint32_t Source) 02009 { 02010 MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, Source); 02011 } 02012 02013 /** 02014 * @brief Get the system clock source 02015 * @rmtoll CFGR SWS LL_RCC_GetSysClkSource 02016 * @retval Returned value can be one of the following values: 02017 * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_MSI 02018 * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSI 02019 * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSE 02020 * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_PLL 02021 */ 02022 __STATIC_INLINE uint32_t LL_RCC_GetSysClkSource(void) 02023 { 02024 return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS)); 02025 } 02026 02027 /** 02028 * @brief Set AHB prescaler 02029 * @rmtoll CFGR HPRE LL_RCC_SetAHBPrescaler 02030 * @param Prescaler This parameter can be one of the following values: 02031 * @arg @ref LL_RCC_SYSCLK_DIV_1 02032 * @arg @ref LL_RCC_SYSCLK_DIV_2 02033 * @arg @ref LL_RCC_SYSCLK_DIV_4 02034 * @arg @ref LL_RCC_SYSCLK_DIV_8 02035 * @arg @ref LL_RCC_SYSCLK_DIV_16 02036 * @arg @ref LL_RCC_SYSCLK_DIV_64 02037 * @arg @ref LL_RCC_SYSCLK_DIV_128 02038 * @arg @ref LL_RCC_SYSCLK_DIV_256 02039 * @arg @ref LL_RCC_SYSCLK_DIV_512 02040 * @retval None 02041 */ 02042 __STATIC_INLINE void LL_RCC_SetAHBPrescaler(uint32_t Prescaler) 02043 { 02044 MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, Prescaler); 02045 } 02046 02047 /** 02048 * @brief Set APB1 prescaler 02049 * @rmtoll CFGR PPRE1 LL_RCC_SetAPB1Prescaler 02050 * @param Prescaler This parameter can be one of the following values: 02051 * @arg @ref LL_RCC_APB1_DIV_1 02052 * @arg @ref LL_RCC_APB1_DIV_2 02053 * @arg @ref LL_RCC_APB1_DIV_4 02054 * @arg @ref LL_RCC_APB1_DIV_8 02055 * @arg @ref LL_RCC_APB1_DIV_16 02056 * @retval None 02057 */ 02058 __STATIC_INLINE void LL_RCC_SetAPB1Prescaler(uint32_t Prescaler) 02059 { 02060 MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, Prescaler); 02061 } 02062 02063 /** 02064 * @brief Set APB2 prescaler 02065 * @rmtoll CFGR PPRE2 LL_RCC_SetAPB2Prescaler 02066 * @param Prescaler This parameter can be one of the following values: 02067 * @arg @ref LL_RCC_APB2_DIV_1 02068 * @arg @ref LL_RCC_APB2_DIV_2 02069 * @arg @ref LL_RCC_APB2_DIV_4 02070 * @arg @ref LL_RCC_APB2_DIV_8 02071 * @arg @ref LL_RCC_APB2_DIV_16 02072 * @retval None 02073 */ 02074 __STATIC_INLINE void LL_RCC_SetAPB2Prescaler(uint32_t Prescaler) 02075 { 02076 MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, Prescaler); 02077 } 02078 02079 /** 02080 * @brief Get AHB prescaler 02081 * @rmtoll CFGR HPRE LL_RCC_GetAHBPrescaler 02082 * @retval Returned value can be one of the following values: 02083 * @arg @ref LL_RCC_SYSCLK_DIV_1 02084 * @arg @ref LL_RCC_SYSCLK_DIV_2 02085 * @arg @ref LL_RCC_SYSCLK_DIV_4 02086 * @arg @ref LL_RCC_SYSCLK_DIV_8 02087 * @arg @ref LL_RCC_SYSCLK_DIV_16 02088 * @arg @ref LL_RCC_SYSCLK_DIV_64 02089 * @arg @ref LL_RCC_SYSCLK_DIV_128 02090 * @arg @ref LL_RCC_SYSCLK_DIV_256 02091 * @arg @ref LL_RCC_SYSCLK_DIV_512 02092 */ 02093 __STATIC_INLINE uint32_t LL_RCC_GetAHBPrescaler(void) 02094 { 02095 return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_HPRE)); 02096 } 02097 02098 /** 02099 * @brief Get APB1 prescaler 02100 * @rmtoll CFGR PPRE1 LL_RCC_GetAPB1Prescaler 02101 * @retval Returned value can be one of the following values: 02102 * @arg @ref LL_RCC_APB1_DIV_1 02103 * @arg @ref LL_RCC_APB1_DIV_2 02104 * @arg @ref LL_RCC_APB1_DIV_4 02105 * @arg @ref LL_RCC_APB1_DIV_8 02106 * @arg @ref LL_RCC_APB1_DIV_16 02107 */ 02108 __STATIC_INLINE uint32_t LL_RCC_GetAPB1Prescaler(void) 02109 { 02110 return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE1)); 02111 } 02112 02113 /** 02114 * @brief Get APB2 prescaler 02115 * @rmtoll CFGR PPRE2 LL_RCC_GetAPB2Prescaler 02116 * @retval Returned value can be one of the following values: 02117 * @arg @ref LL_RCC_APB2_DIV_1 02118 * @arg @ref LL_RCC_APB2_DIV_2 02119 * @arg @ref LL_RCC_APB2_DIV_4 02120 * @arg @ref LL_RCC_APB2_DIV_8 02121 * @arg @ref LL_RCC_APB2_DIV_16 02122 */ 02123 __STATIC_INLINE uint32_t LL_RCC_GetAPB2Prescaler(void) 02124 { 02125 return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE2)); 02126 } 02127 02128 02129 /** 02130 * @brief Set Clock After Wake-Up From Stop mode 02131 * @rmtoll CFGR STOPWUCK LL_RCC_SetClkAfterWakeFromStop 02132 * @param Clock This parameter can be one of the following values: 02133 * @arg @ref LL_RCC_STOP_WAKEUPCLOCK_MSI 02134 * @arg @ref LL_RCC_STOP_WAKEUPCLOCK_HSI 02135 * @retval None 02136 */ 02137 __STATIC_INLINE void LL_RCC_SetClkAfterWakeFromStop(uint32_t Clock) 02138 { 02139 MODIFY_REG(RCC->CFGR, RCC_CFGR_STOPWUCK, Clock); 02140 } 02141 02142 /** 02143 * @brief Get Clock After Wake-Up From Stop mode 02144 * @rmtoll CFGR STOPWUCK LL_RCC_GetClkAfterWakeFromStop 02145 * @retval Returned value can be one of the following values: 02146 * @arg @ref LL_RCC_STOP_WAKEUPCLOCK_MSI 02147 * @arg @ref LL_RCC_STOP_WAKEUPCLOCK_HSI 02148 */ 02149 __STATIC_INLINE uint32_t LL_RCC_GetClkAfterWakeFromStop(void) 02150 { 02151 return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_STOPWUCK)); 02152 } 02153 02154 /** 02155 * @} 02156 */ 02157 02158 /** @defgroup RCC_LL_EF_MCO MCO 02159 * @{ 02160 */ 02161 02162 /** 02163 * @brief Configure MCOx 02164 * @rmtoll CFGR MCOSEL LL_RCC_ConfigMCO\n 02165 * CFGR MCOPRE LL_RCC_ConfigMCO 02166 * @param MCOxSource This parameter can be one of the following values: 02167 * @arg @ref LL_RCC_MCO1SOURCE_NOCLOCK 02168 * @arg @ref LL_RCC_MCO1SOURCE_SYSCLK 02169 * @arg @ref LL_RCC_MCO1SOURCE_MSI 02170 * @arg @ref LL_RCC_MCO1SOURCE_HSI 02171 * @arg @ref LL_RCC_MCO1SOURCE_HSE 02172 * @arg @ref LL_RCC_MCO1SOURCE_HSI48 (*) 02173 * @arg @ref LL_RCC_MCO1SOURCE_PLLCLK 02174 * @arg @ref LL_RCC_MCO1SOURCE_LSI 02175 * @arg @ref LL_RCC_MCO1SOURCE_LSE 02176 * 02177 * (*) value not defined in all devices. 02178 * @param MCOxPrescaler This parameter can be one of the following values: 02179 * @arg @ref LL_RCC_MCO1_DIV_1 02180 * @arg @ref LL_RCC_MCO1_DIV_2 02181 * @arg @ref LL_RCC_MCO1_DIV_4 02182 * @arg @ref LL_RCC_MCO1_DIV_8 02183 * @arg @ref LL_RCC_MCO1_DIV_16 02184 * @retval None 02185 */ 02186 __STATIC_INLINE void LL_RCC_ConfigMCO(uint32_t MCOxSource, uint32_t MCOxPrescaler) 02187 { 02188 MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL | RCC_CFGR_MCOPRE, MCOxSource | MCOxPrescaler); 02189 } 02190 02191 /** 02192 * @} 02193 */ 02194 02195 /** @defgroup RCC_LL_EF_Peripheral_Clock_Source Peripheral Clock Source 02196 * @{ 02197 */ 02198 02199 /** 02200 * @brief Configure USARTx clock source 02201 * @rmtoll CCIPR USARTxSEL LL_RCC_SetUSARTClockSource 02202 * @param USARTxSource This parameter can be one of the following values: 02203 * @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK2 02204 * @arg @ref LL_RCC_USART1_CLKSOURCE_SYSCLK 02205 * @arg @ref LL_RCC_USART1_CLKSOURCE_HSI 02206 * @arg @ref LL_RCC_USART1_CLKSOURCE_LSE 02207 * @arg @ref LL_RCC_USART2_CLKSOURCE_PCLK1 02208 * @arg @ref LL_RCC_USART2_CLKSOURCE_SYSCLK 02209 * @arg @ref LL_RCC_USART2_CLKSOURCE_HSI 02210 * @arg @ref LL_RCC_USART2_CLKSOURCE_LSE 02211 * @arg @ref LL_RCC_USART3_CLKSOURCE_PCLK1 (*) 02212 * @arg @ref LL_RCC_USART3_CLKSOURCE_SYSCLK (*) 02213 * @arg @ref LL_RCC_USART3_CLKSOURCE_HSI (*) 02214 * @arg @ref LL_RCC_USART3_CLKSOURCE_LSE (*) 02215 * 02216 * (*) value not defined in all devices. 02217 * @retval None 02218 */ 02219 __STATIC_INLINE void LL_RCC_SetUSARTClockSource(uint32_t USARTxSource) 02220 { 02221 MODIFY_REG(RCC->CCIPR, (USARTxSource >> 16), (USARTxSource & 0x0000FFFF)); 02222 } 02223 02224 #if defined(UART4) || defined(UART5) 02225 /** 02226 * @brief Configure UARTx clock source 02227 * @rmtoll CCIPR UARTxSEL LL_RCC_SetUARTClockSource 02228 * @param UARTxSource This parameter can be one of the following values: 02229 * @arg @ref LL_RCC_UART4_CLKSOURCE_PCLK1 02230 * @arg @ref LL_RCC_UART4_CLKSOURCE_SYSCLK 02231 * @arg @ref LL_RCC_UART4_CLKSOURCE_HSI 02232 * @arg @ref LL_RCC_UART4_CLKSOURCE_LSE 02233 * @arg @ref LL_RCC_UART5_CLKSOURCE_PCLK1 02234 * @arg @ref LL_RCC_UART5_CLKSOURCE_SYSCLK 02235 * @arg @ref LL_RCC_UART5_CLKSOURCE_HSI 02236 * @arg @ref LL_RCC_UART5_CLKSOURCE_LSE 02237 * @retval None 02238 */ 02239 __STATIC_INLINE void LL_RCC_SetUARTClockSource(uint32_t UARTxSource) 02240 { 02241 MODIFY_REG(RCC->CCIPR, (UARTxSource >> 16), (UARTxSource & 0x0000FFFF)); 02242 } 02243 #endif /* UART4 || UART5 */ 02244 02245 /** 02246 * @brief Configure LPUART1x clock source 02247 * @rmtoll CCIPR LPUART1SEL LL_RCC_SetLPUARTClockSource 02248 * @param LPUARTxSource This parameter can be one of the following values: 02249 * @arg @ref LL_RCC_LPUART1_CLKSOURCE_PCLK1 02250 * @arg @ref LL_RCC_LPUART1_CLKSOURCE_SYSCLK 02251 * @arg @ref LL_RCC_LPUART1_CLKSOURCE_HSI 02252 * @arg @ref LL_RCC_LPUART1_CLKSOURCE_LSE 02253 * @retval None 02254 */ 02255 __STATIC_INLINE void LL_RCC_SetLPUARTClockSource(uint32_t LPUARTxSource) 02256 { 02257 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_LPUART1SEL, LPUARTxSource); 02258 } 02259 02260 /** 02261 * @brief Configure I2Cx clock source 02262 * @rmtoll CCIPR I2CxSEL LL_RCC_SetI2CClockSource 02263 * @param I2CxSource This parameter can be one of the following values: 02264 * @arg @ref LL_RCC_I2C1_CLKSOURCE_PCLK1 02265 * @arg @ref LL_RCC_I2C1_CLKSOURCE_SYSCLK 02266 * @arg @ref LL_RCC_I2C1_CLKSOURCE_HSI 02267 * @arg @ref LL_RCC_I2C2_CLKSOURCE_PCLK1 (*) 02268 * @arg @ref LL_RCC_I2C2_CLKSOURCE_SYSCLK (*) 02269 * @arg @ref LL_RCC_I2C2_CLKSOURCE_HSI (*) 02270 * @arg @ref LL_RCC_I2C3_CLKSOURCE_PCLK1 02271 * @arg @ref LL_RCC_I2C3_CLKSOURCE_SYSCLK 02272 * @arg @ref LL_RCC_I2C3_CLKSOURCE_HSI 02273 * 02274 * (*) value not defined in all devices. 02275 * @retval None 02276 */ 02277 __STATIC_INLINE void LL_RCC_SetI2CClockSource(uint32_t I2CxSource) 02278 { 02279 MODIFY_REG(RCC->CCIPR, ((I2CxSource >> 4) & 0x000FF000), ((I2CxSource << 4) & 0x000FF000)); 02280 } 02281 02282 /** 02283 * @brief Configure LPTIMx clock source 02284 * @rmtoll CCIPR LPTIMxSEL LL_RCC_SetLPTIMClockSource 02285 * @param LPTIMxSource This parameter can be one of the following values: 02286 * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK1 02287 * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI 02288 * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_HSI 02289 * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE 02290 * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PCLK1 02291 * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSI 02292 * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_HSI 02293 * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSE 02294 * @retval None 02295 */ 02296 __STATIC_INLINE void LL_RCC_SetLPTIMClockSource(uint32_t LPTIMxSource) 02297 { 02298 MODIFY_REG(RCC->CCIPR, (LPTIMxSource & 0xFFFF0000U), (LPTIMxSource << 16)); 02299 } 02300 02301 /** 02302 * @brief Configure SAIx clock source 02303 * @rmtoll CCIPR SAIxSEL LL_RCC_SetSAIClockSource 02304 * @param SAIxSource This parameter can be one of the following values: 02305 * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLLSAI1 02306 * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLLSAI2 (*) 02307 * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL 02308 * @arg @ref LL_RCC_SAI1_CLKSOURCE_PIN 02309 * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLSAI1 (*) 02310 * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLSAI2 (*) 02311 * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLL (*) 02312 * @arg @ref LL_RCC_SAI2_CLKSOURCE_PIN (*) 02313 * 02314 * (*) value not defined in all devices. 02315 * @retval None 02316 */ 02317 __STATIC_INLINE void LL_RCC_SetSAIClockSource(uint32_t SAIxSource) 02318 { 02319 MODIFY_REG(RCC->CCIPR, (SAIxSource & 0xFFFF0000U), (SAIxSource << 16)); 02320 } 02321 02322 /** 02323 * @brief Configure SDMMC1 clock source 02324 * @rmtoll CCIPR CLK48SEL LL_RCC_SetSDMMCClockSource 02325 * @param SDMMCxSource This parameter can be one of the following values: 02326 * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_NONE 02327 * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_PLLSAI1 02328 * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_PLL 02329 * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_MSI 02330 * @retval None 02331 */ 02332 __STATIC_INLINE void LL_RCC_SetSDMMCClockSource(uint32_t SDMMCxSource) 02333 { 02334 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, SDMMCxSource); 02335 } 02336 02337 /** 02338 * @brief Configure RNG clock source 02339 * @rmtoll CCIPR CLK48SEL LL_RCC_SetRNGClockSource 02340 * @param RNGxSource This parameter can be one of the following values: 02341 * @arg @ref LL_RCC_RNG_CLKSOURCE_NONE 02342 * @arg @ref LL_RCC_RNG_CLKSOURCE_PLLSAI1 02343 * @arg @ref LL_RCC_RNG_CLKSOURCE_PLL 02344 * @arg @ref LL_RCC_RNG_CLKSOURCE_MSI 02345 * @retval None 02346 */ 02347 __STATIC_INLINE void LL_RCC_SetRNGClockSource(uint32_t RNGxSource) 02348 { 02349 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, RNGxSource); 02350 } 02351 02352 #if defined(USB_OTG_FS) || defined(USB) 02353 /** 02354 * @brief Configure USB clock source 02355 * @rmtoll CCIPR CLK48SEL LL_RCC_SetUSBClockSource 02356 * @param USBxSource This parameter can be one of the following values: 02357 * @arg @ref LL_RCC_USB_CLKSOURCE_NONE 02358 * @arg @ref LL_RCC_USB_CLKSOURCE_PLLSAI1 02359 * @arg @ref LL_RCC_USB_CLKSOURCE_PLL 02360 * @arg @ref LL_RCC_USB_CLKSOURCE_MSI 02361 * @retval None 02362 */ 02363 __STATIC_INLINE void LL_RCC_SetUSBClockSource(uint32_t USBxSource) 02364 { 02365 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, USBxSource); 02366 } 02367 #endif /* USB_OTG_FS || USB */ 02368 02369 /** 02370 * @brief Configure ADC clock source 02371 * @rmtoll CCIPR ADCSEL LL_RCC_SetADCClockSource 02372 * @param ADCxSource This parameter can be one of the following values: 02373 * @arg @ref LL_RCC_ADC_CLKSOURCE_NONE 02374 * @arg @ref LL_RCC_ADC_CLKSOURCE_PLLSAI1 02375 * @arg @ref LL_RCC_ADC_CLKSOURCE_PLLSAI2 (*) 02376 * @arg @ref LL_RCC_ADC_CLKSOURCE_SYSCLK 02377 * 02378 * (*) value not defined in all devices. 02379 * @retval None 02380 */ 02381 __STATIC_INLINE void LL_RCC_SetADCClockSource(uint32_t ADCxSource) 02382 { 02383 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_ADCSEL, ADCxSource); 02384 } 02385 02386 /** 02387 * @brief Configure SWPMI clock source 02388 * @rmtoll CCIPR SWPMI1SEL LL_RCC_SetSWPMIClockSource 02389 * @param SWPMIxSource This parameter can be one of the following values: 02390 * @arg @ref LL_RCC_SWPMI1_CLKSOURCE_PCLK 02391 * @arg @ref LL_RCC_SWPMI1_CLKSOURCE_HSI 02392 * @retval None 02393 */ 02394 __STATIC_INLINE void LL_RCC_SetSWPMIClockSource(uint32_t SWPMIxSource) 02395 { 02396 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_SWPMI1SEL, SWPMIxSource); 02397 } 02398 02399 #if defined(DFSDM1_Channel0) 02400 /** 02401 * @brief Configure DFSDM clock source 02402 * @rmtoll CCIPR DFSDM1SEL LL_RCC_SetDFSDMClockSource 02403 * @param DFSDMxSource This parameter can be one of the following values: 02404 * @arg @ref LL_RCC_DFSDM1_CLKSOURCE_PCLK 02405 * @arg @ref LL_RCC_DFSDM1_CLKSOURCE_SYSCLK 02406 * @retval None 02407 */ 02408 __STATIC_INLINE void LL_RCC_SetDFSDMClockSource(uint32_t DFSDMxSource) 02409 { 02410 MODIFY_REG(RCC->CCIPR, RCC_CCIPR_DFSDM1SEL, DFSDMxSource); 02411 } 02412 #endif /* DFSDM1_Channel0 */ 02413 02414 /** 02415 * @brief Get USARTx clock source 02416 * @rmtoll CCIPR USARTxSEL LL_RCC_GetUSARTClockSource 02417 * @param USARTx This parameter can be one of the following values: 02418 * @arg @ref LL_RCC_USART1_CLKSOURCE 02419 * @arg @ref LL_RCC_USART2_CLKSOURCE 02420 * @arg @ref LL_RCC_USART3_CLKSOURCE (*) 02421 * 02422 * (*) value not defined in all devices. 02423 * @retval Returned value can be one of the following values: 02424 * @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK2 02425 * @arg @ref LL_RCC_USART1_CLKSOURCE_SYSCLK 02426 * @arg @ref LL_RCC_USART1_CLKSOURCE_HSI 02427 * @arg @ref LL_RCC_USART1_CLKSOURCE_LSE 02428 * @arg @ref LL_RCC_USART2_CLKSOURCE_PCLK1 02429 * @arg @ref LL_RCC_USART2_CLKSOURCE_SYSCLK 02430 * @arg @ref LL_RCC_USART2_CLKSOURCE_HSI 02431 * @arg @ref LL_RCC_USART2_CLKSOURCE_LSE 02432 * @arg @ref LL_RCC_USART3_CLKSOURCE_PCLK1 (*) 02433 * @arg @ref LL_RCC_USART3_CLKSOURCE_SYSCLK (*) 02434 * @arg @ref LL_RCC_USART3_CLKSOURCE_HSI (*) 02435 * @arg @ref LL_RCC_USART3_CLKSOURCE_LSE (*) 02436 * 02437 * (*) value not defined in all devices. 02438 */ 02439 __STATIC_INLINE uint32_t LL_RCC_GetUSARTClockSource(uint32_t USARTx) 02440 { 02441 return (uint32_t)(READ_BIT(RCC->CCIPR, USARTx) | (USARTx << 16)); 02442 } 02443 02444 #if defined(UART4) || defined(UART5) 02445 /** 02446 * @brief Get UARTx clock source 02447 * @rmtoll CCIPR UARTxSEL LL_RCC_GetUARTClockSource 02448 * @param UARTx This parameter can be one of the following values: 02449 * @arg @ref LL_RCC_UART4_CLKSOURCE 02450 * @arg @ref LL_RCC_UART5_CLKSOURCE 02451 * @retval Returned value can be one of the following values: 02452 * @arg @ref LL_RCC_UART4_CLKSOURCE_PCLK1 02453 * @arg @ref LL_RCC_UART4_CLKSOURCE_SYSCLK 02454 * @arg @ref LL_RCC_UART4_CLKSOURCE_HSI 02455 * @arg @ref LL_RCC_UART4_CLKSOURCE_LSE 02456 * @arg @ref LL_RCC_UART5_CLKSOURCE_PCLK1 02457 * @arg @ref LL_RCC_UART5_CLKSOURCE_SYSCLK 02458 * @arg @ref LL_RCC_UART5_CLKSOURCE_HSI 02459 * @arg @ref LL_RCC_UART5_CLKSOURCE_LSE 02460 */ 02461 __STATIC_INLINE uint32_t LL_RCC_GetUARTClockSource(uint32_t UARTx) 02462 { 02463 return (uint32_t)(READ_BIT(RCC->CCIPR, UARTx) | (UARTx << 16)); 02464 } 02465 #endif /* UART4 || UART5 */ 02466 02467 /** 02468 * @brief Get LPUARTx clock source 02469 * @rmtoll CCIPR LPUART1SEL LL_RCC_GetLPUARTClockSource 02470 * @param LPUARTx This parameter can be one of the following values: 02471 * @arg @ref LL_RCC_LPUART1_CLKSOURCE 02472 * @retval Returned value can be one of the following values: 02473 * @arg @ref LL_RCC_LPUART1_CLKSOURCE_PCLK1 02474 * @arg @ref LL_RCC_LPUART1_CLKSOURCE_SYSCLK 02475 * @arg @ref LL_RCC_LPUART1_CLKSOURCE_HSI 02476 * @arg @ref LL_RCC_LPUART1_CLKSOURCE_LSE 02477 */ 02478 __STATIC_INLINE uint32_t LL_RCC_GetLPUARTClockSource(uint32_t LPUARTx) 02479 { 02480 return (uint32_t)(READ_BIT(RCC->CCIPR, LPUARTx)); 02481 } 02482 02483 /** 02484 * @brief Get I2Cx clock source 02485 * @rmtoll CCIPR I2CxSEL LL_RCC_GetI2CClockSource 02486 * @param I2Cx This parameter can be one of the following values: 02487 * @arg @ref LL_RCC_I2C1_CLKSOURCE 02488 * @arg @ref LL_RCC_I2C2_CLKSOURCE (*) 02489 * @arg @ref LL_RCC_I2C3_CLKSOURCE 02490 * 02491 * (*) value not defined in all devices. 02492 * @retval Returned value can be one of the following values: 02493 * @arg @ref LL_RCC_I2C1_CLKSOURCE_PCLK1 02494 * @arg @ref LL_RCC_I2C1_CLKSOURCE_SYSCLK 02495 * @arg @ref LL_RCC_I2C1_CLKSOURCE_HSI 02496 * @arg @ref LL_RCC_I2C2_CLKSOURCE_PCLK1 (*) 02497 * @arg @ref LL_RCC_I2C2_CLKSOURCE_SYSCLK (*) 02498 * @arg @ref LL_RCC_I2C2_CLKSOURCE_HSI (*) 02499 * @arg @ref LL_RCC_I2C3_CLKSOURCE_PCLK1 02500 * @arg @ref LL_RCC_I2C3_CLKSOURCE_SYSCLK 02501 * @arg @ref LL_RCC_I2C3_CLKSOURCE_HSI 02502 * 02503 * (*) value not defined in all devices. 02504 */ 02505 __STATIC_INLINE uint32_t LL_RCC_GetI2CClockSource(uint32_t I2Cx) 02506 { 02507 return (uint32_t)((READ_BIT(RCC->CCIPR, I2Cx) >> 4) | (I2Cx << 4)); 02508 } 02509 02510 /** 02511 * @brief Get LPTIMx clock source 02512 * @rmtoll CCIPR LPTIMxSEL LL_RCC_GetLPTIMClockSource 02513 * @param LPTIMx This parameter can be one of the following values: 02514 * @arg @ref LL_RCC_LPTIM1_CLKSOURCE 02515 * @arg @ref LL_RCC_LPTIM2_CLKSOURCE 02516 * @retval Returned value can be one of the following values: 02517 * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK1 02518 * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI 02519 * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_HSI 02520 * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE 02521 * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PCLK1 02522 * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSI 02523 * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_HSI 02524 * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSE 02525 */ 02526 __STATIC_INLINE uint32_t LL_RCC_GetLPTIMClockSource(uint32_t LPTIMx) 02527 { 02528 return (uint32_t)(READ_BIT(RCC->CCIPR, LPTIMx) >> 16 | LPTIMx); 02529 } 02530 02531 /** 02532 * @brief Get SAIx clock source 02533 * @rmtoll CCIPR SAIxSEL LL_RCC_GetSAIClockSource 02534 * @param SAIx This parameter can be one of the following values: 02535 * @arg @ref LL_RCC_SAI1_CLKSOURCE 02536 * @arg @ref LL_RCC_SAI2_CLKSOURCE (*) 02537 * 02538 * (*) value not defined in all devices. 02539 * @retval Returned value can be one of the following values: 02540 * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLLSAI1 02541 * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLLSAI2 (*) 02542 * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL 02543 * @arg @ref LL_RCC_SAI1_CLKSOURCE_PIN 02544 * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLSAI1 (*) 02545 * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLSAI2 (*) 02546 * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLL (*) 02547 * @arg @ref LL_RCC_SAI2_CLKSOURCE_PIN (*) 02548 * 02549 * (*) value not defined in all devices. 02550 */ 02551 __STATIC_INLINE uint32_t LL_RCC_GetSAIClockSource(uint32_t SAIx) 02552 { 02553 return (uint32_t)(READ_BIT(RCC->CCIPR, SAIx) >> 16 | SAIx); 02554 } 02555 02556 /** 02557 * @brief Get SDMMCx clock source 02558 * @rmtoll CCIPR CLK48SEL LL_RCC_GetSDMMCClockSource 02559 * @param SDMMCx This parameter can be one of the following values: 02560 * @arg @ref LL_RCC_SDMMC1_CLKSOURCE 02561 * @retval Returned value can be one of the following values: 02562 * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_NONE 02563 * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_PLLSAI1 02564 * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_PLL 02565 * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_MSI 02566 */ 02567 __STATIC_INLINE uint32_t LL_RCC_GetSDMMCClockSource(uint32_t SDMMCx) 02568 { 02569 return (uint32_t)(READ_BIT(RCC->CCIPR, SDMMCx)); 02570 } 02571 02572 /** 02573 * @brief Get RNGx clock source 02574 * @rmtoll CCIPR CLK48SEL LL_RCC_GetRNGClockSource 02575 * @param RNGx This parameter can be one of the following values: 02576 * @arg @ref LL_RCC_RNG_CLKSOURCE 02577 * @retval Returned value can be one of the following values: 02578 * @arg @ref LL_RCC_RNG_CLKSOURCE_NONE 02579 * @arg @ref LL_RCC_RNG_CLKSOURCE_PLLSAI1 02580 * @arg @ref LL_RCC_RNG_CLKSOURCE_PLL 02581 * @arg @ref LL_RCC_RNG_CLKSOURCE_MSI 02582 */ 02583 __STATIC_INLINE uint32_t LL_RCC_GetRNGClockSource(uint32_t RNGx) 02584 { 02585 return (uint32_t)(READ_BIT(RCC->CCIPR, RNGx)); 02586 } 02587 02588 #if defined(USB_OTG_FS) || defined(USB) 02589 /** 02590 * @brief Get USBx clock source 02591 * @rmtoll CCIPR CLK48SEL LL_RCC_GetUSBClockSource 02592 * @param USBx This parameter can be one of the following values: 02593 * @arg @ref LL_RCC_USB_CLKSOURCE 02594 * @retval Returned value can be one of the following values: 02595 * @arg @ref LL_RCC_USB_CLKSOURCE_NONE 02596 * @arg @ref LL_RCC_USB_CLKSOURCE_PLLSAI1 02597 * @arg @ref LL_RCC_USB_CLKSOURCE_PLL 02598 * @arg @ref LL_RCC_USB_CLKSOURCE_MSI 02599 */ 02600 __STATIC_INLINE uint32_t LL_RCC_GetUSBClockSource(uint32_t USBx) 02601 { 02602 return (uint32_t)(READ_BIT(RCC->CCIPR, USBx)); 02603 } 02604 #endif /* USB_OTG_FS || USB */ 02605 02606 /** 02607 * @brief Get ADCx clock source 02608 * @rmtoll CCIPR ADCSEL LL_RCC_GetADCClockSource 02609 * @param ADCx This parameter can be one of the following values: 02610 * @arg @ref LL_RCC_ADC_CLKSOURCE 02611 * @retval Returned value can be one of the following values: 02612 * @arg @ref LL_RCC_ADC_CLKSOURCE_NONE 02613 * @arg @ref LL_RCC_ADC_CLKSOURCE_PLLSAI1 02614 * @arg @ref LL_RCC_ADC_CLKSOURCE_PLLSAI2 (*) 02615 * @arg @ref LL_RCC_ADC_CLKSOURCE_SYSCLK 02616 * 02617 * (*) value not defined in all devices. 02618 */ 02619 __STATIC_INLINE uint32_t LL_RCC_GetADCClockSource(uint32_t ADCx) 02620 { 02621 return (uint32_t)(READ_BIT(RCC->CCIPR, ADCx)); 02622 } 02623 02624 /** 02625 * @brief Get SWPMIx clock source 02626 * @rmtoll CCIPR SWPMI1SEL LL_RCC_GetSWPMIClockSource 02627 * @param SPWMIx This parameter can be one of the following values: 02628 * @arg @ref LL_RCC_SWPMI1_CLKSOURCE 02629 * @retval Returned value can be one of the following values: 02630 * @arg @ref LL_RCC_SWPMI1_CLKSOURCE_PCLK 02631 * @arg @ref LL_RCC_SWPMI1_CLKSOURCE_HSI 02632 */ 02633 __STATIC_INLINE uint32_t LL_RCC_GetSWPMIClockSource(uint32_t SPWMIx) 02634 { 02635 return (uint32_t)(READ_BIT(RCC->CCIPR, SPWMIx)); 02636 } 02637 02638 #if defined(DFSDM1_Channel0) 02639 /** 02640 * @brief Get DFSDMx clock source 02641 * @rmtoll CCIPR DFSDM1SEL LL_RCC_GetDFSDMClockSource 02642 * @param DFSDMx This parameter can be one of the following values: 02643 * @arg @ref LL_RCC_DFSDM1_CLKSOURCE 02644 * @retval Returned value can be one of the following values: 02645 * @arg @ref LL_RCC_DFSDM1_CLKSOURCE_PCLK 02646 * @arg @ref LL_RCC_DFSDM1_CLKSOURCE_SYSCLK 02647 */ 02648 __STATIC_INLINE uint32_t LL_RCC_GetDFSDMClockSource(uint32_t DFSDMx) 02649 { 02650 return (uint32_t)(READ_BIT(RCC->CCIPR, DFSDMx)); 02651 } 02652 #endif /* DFSDM1_Channel0 */ 02653 02654 /** 02655 * @} 02656 */ 02657 02658 /** @defgroup RCC_LL_EF_RTC RTC 02659 * @{ 02660 */ 02661 02662 /** 02663 * @brief Set RTC Clock Source 02664 * @note Once the RTC clock source has been selected, it cannot be changed anymore unless 02665 * the Backup domain is reset, or unless a failure is detected on LSE (LSECSSD is 02666 * set). The BDRST bit can be used to reset them. 02667 * @rmtoll BDCR RTCSEL LL_RCC_SetRTCClockSource 02668 * @param Source This parameter can be one of the following values: 02669 * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE 02670 * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE 02671 * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI 02672 * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV32 02673 * @retval None 02674 */ 02675 __STATIC_INLINE void LL_RCC_SetRTCClockSource(uint32_t Source) 02676 { 02677 MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, Source); 02678 } 02679 02680 /** 02681 * @brief Get RTC Clock Source 02682 * @rmtoll BDCR RTCSEL LL_RCC_GetRTCClockSource 02683 * @retval Returned value can be one of the following values: 02684 * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE 02685 * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE 02686 * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI 02687 * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV32 02688 */ 02689 __STATIC_INLINE uint32_t LL_RCC_GetRTCClockSource(void) 02690 { 02691 return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL)); 02692 } 02693 02694 /** 02695 * @brief Enable RTC 02696 * @rmtoll BDCR RTCEN LL_RCC_EnableRTC 02697 * @retval None 02698 */ 02699 __STATIC_INLINE void LL_RCC_EnableRTC(void) 02700 { 02701 SET_BIT(RCC->BDCR, RCC_BDCR_RTCEN); 02702 } 02703 02704 /** 02705 * @brief Disable RTC 02706 * @rmtoll BDCR RTCEN LL_RCC_DisableRTC 02707 * @retval None 02708 */ 02709 __STATIC_INLINE void LL_RCC_DisableRTC(void) 02710 { 02711 CLEAR_BIT(RCC->BDCR, RCC_BDCR_RTCEN); 02712 } 02713 02714 /** 02715 * @brief Check if RTC has been enabled or not 02716 * @rmtoll BDCR RTCEN LL_RCC_IsEnabledRTC 02717 * @retval State of bit (1 or 0). 02718 */ 02719 __STATIC_INLINE uint32_t LL_RCC_IsEnabledRTC(void) 02720 { 02721 return (READ_BIT(RCC->BDCR, RCC_BDCR_RTCEN) == (RCC_BDCR_RTCEN)); 02722 } 02723 02724 /** 02725 * @brief Force the Backup domain reset 02726 * @rmtoll BDCR BDRST LL_RCC_ForceBackupDomainReset 02727 * @retval None 02728 */ 02729 __STATIC_INLINE void LL_RCC_ForceBackupDomainReset(void) 02730 { 02731 SET_BIT(RCC->BDCR, RCC_BDCR_BDRST); 02732 } 02733 02734 /** 02735 * @brief Release the Backup domain reset 02736 * @rmtoll BDCR BDRST LL_RCC_ReleaseBackupDomainReset 02737 * @retval None 02738 */ 02739 __STATIC_INLINE void LL_RCC_ReleaseBackupDomainReset(void) 02740 { 02741 CLEAR_BIT(RCC->BDCR, RCC_BDCR_BDRST); 02742 } 02743 02744 /** 02745 * @} 02746 */ 02747 02748 /** @defgroup RCC_LL_EF_PLL PLL 02749 * @{ 02750 */ 02751 02752 /** 02753 * @brief Enable PLL 02754 * @rmtoll CR PLLON LL_RCC_PLL_Enable 02755 * @retval None 02756 */ 02757 __STATIC_INLINE void LL_RCC_PLL_Enable(void) 02758 { 02759 SET_BIT(RCC->CR, RCC_CR_PLLON); 02760 } 02761 02762 /** 02763 * @brief Disable PLL 02764 * @note Cannot be disabled if the PLL clock is used as the system clock 02765 * @rmtoll CR PLLON LL_RCC_PLL_Disable 02766 * @retval None 02767 */ 02768 __STATIC_INLINE void LL_RCC_PLL_Disable(void) 02769 { 02770 CLEAR_BIT(RCC->CR, RCC_CR_PLLON); 02771 } 02772 02773 /** 02774 * @brief Check if PLL Ready 02775 * @rmtoll CR PLLRDY LL_RCC_PLL_IsReady 02776 * @retval State of bit (1 or 0). 02777 */ 02778 __STATIC_INLINE uint32_t LL_RCC_PLL_IsReady(void) 02779 { 02780 return (READ_BIT(RCC->CR, RCC_CR_PLLRDY) == (RCC_CR_PLLRDY)); 02781 } 02782 02783 /** 02784 * @brief Configure PLL used for SYSCLK Domain 02785 * @note PLL Source and PLLM Divider can be written only when PLL, 02786 * PLLSAI1 and PLLSAI2 (*) are disabled 02787 * @note PLLN/PLLR can be written only when PLL is disabled 02788 * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_SYS\n 02789 * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_SYS\n 02790 * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_SYS\n 02791 * PLLCFGR PLLR LL_RCC_PLL_ConfigDomain_SYS 02792 * @param Source This parameter can be one of the following values: 02793 * @arg @ref LL_RCC_PLLSOURCE_NONE 02794 * @arg @ref LL_RCC_PLLSOURCE_MSI 02795 * @arg @ref LL_RCC_PLLSOURCE_HSI 02796 * @arg @ref LL_RCC_PLLSOURCE_HSE 02797 * @param PLLM This parameter can be one of the following values: 02798 * @arg @ref LL_RCC_PLLM_DIV_1 02799 * @arg @ref LL_RCC_PLLM_DIV_2 02800 * @arg @ref LL_RCC_PLLM_DIV_3 02801 * @arg @ref LL_RCC_PLLM_DIV_4 02802 * @arg @ref LL_RCC_PLLM_DIV_5 02803 * @arg @ref LL_RCC_PLLM_DIV_6 02804 * @arg @ref LL_RCC_PLLM_DIV_7 02805 * @arg @ref LL_RCC_PLLM_DIV_8 02806 * @param PLLN Between 8 and 86 02807 * @param PLLR This parameter can be one of the following values: 02808 * @arg @ref LL_RCC_PLLR_DIV_2 02809 * @arg @ref LL_RCC_PLLR_DIV_4 02810 * @arg @ref LL_RCC_PLLR_DIV_6 02811 * @arg @ref LL_RCC_PLLR_DIV_8 02812 * @retval None 02813 */ 02814 __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR) 02815 { 02816 MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLR, 02817 Source | PLLM | PLLN << RCC_POSITION_PLLN | PLLR); 02818 } 02819 02820 #if defined(RCC_PLLP_DIV_2_31_SUPPORT) 02821 /** 02822 * @brief Configure PLL used for SAI domain clock 02823 * @note PLL Source and PLLM Divider can be written only when PLL, 02824 * PLLSAI1 and PLLSAI2 (*) are disabled 02825 * @note PLLN/PLLP can be written only when PLL is disabled 02826 * @note This can be selected for SAI1 or SAI2 (*) 02827 * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_SAI\n 02828 * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_SAI\n 02829 * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_SAI\n 02830 * PLLCFGR PLLPDIV LL_RCC_PLL_ConfigDomain_SAI 02831 * @param Source This parameter can be one of the following values: 02832 * @arg @ref LL_RCC_PLLSOURCE_NONE 02833 * @arg @ref LL_RCC_PLLSOURCE_MSI 02834 * @arg @ref LL_RCC_PLLSOURCE_HSI 02835 * @arg @ref LL_RCC_PLLSOURCE_HSE 02836 * @param PLLM This parameter can be one of the following values: 02837 * @arg @ref LL_RCC_PLLM_DIV_1 02838 * @arg @ref LL_RCC_PLLM_DIV_2 02839 * @arg @ref LL_RCC_PLLM_DIV_3 02840 * @arg @ref LL_RCC_PLLM_DIV_4 02841 * @arg @ref LL_RCC_PLLM_DIV_5 02842 * @arg @ref LL_RCC_PLLM_DIV_6 02843 * @arg @ref LL_RCC_PLLM_DIV_7 02844 * @arg @ref LL_RCC_PLLM_DIV_8 02845 * @param PLLN Between 8 and 86 02846 * @param PLLP This parameter can be one of the following values: 02847 * @arg @ref LL_RCC_PLLP_DIV_2 02848 * @arg @ref LL_RCC_PLLP_DIV_3 02849 * @arg @ref LL_RCC_PLLP_DIV_4 02850 * @arg @ref LL_RCC_PLLP_DIV_5 02851 * @arg @ref LL_RCC_PLLP_DIV_6 02852 * @arg @ref LL_RCC_PLLP_DIV_7 02853 * @arg @ref LL_RCC_PLLP_DIV_8 02854 * @arg @ref LL_RCC_PLLP_DIV_9 02855 * @arg @ref LL_RCC_PLLP_DIV_10 02856 * @arg @ref LL_RCC_PLLP_DIV_11 02857 * @arg @ref LL_RCC_PLLP_DIV_12 02858 * @arg @ref LL_RCC_PLLP_DIV_13 02859 * @arg @ref LL_RCC_PLLP_DIV_14 02860 * @arg @ref LL_RCC_PLLP_DIV_15 02861 * @arg @ref LL_RCC_PLLP_DIV_16 02862 * @arg @ref LL_RCC_PLLP_DIV_17 02863 * @arg @ref LL_RCC_PLLP_DIV_18 02864 * @arg @ref LL_RCC_PLLP_DIV_19 02865 * @arg @ref LL_RCC_PLLP_DIV_20 02866 * @arg @ref LL_RCC_PLLP_DIV_21 02867 * @arg @ref LL_RCC_PLLP_DIV_22 02868 * @arg @ref LL_RCC_PLLP_DIV_23 02869 * @arg @ref LL_RCC_PLLP_DIV_24 02870 * @arg @ref LL_RCC_PLLP_DIV_25 02871 * @arg @ref LL_RCC_PLLP_DIV_26 02872 * @arg @ref LL_RCC_PLLP_DIV_27 02873 * @arg @ref LL_RCC_PLLP_DIV_28 02874 * @arg @ref LL_RCC_PLLP_DIV_29 02875 * @arg @ref LL_RCC_PLLP_DIV_30 02876 * @arg @ref LL_RCC_PLLP_DIV_31 02877 * @retval None 02878 */ 02879 #else 02880 /** 02881 * @brief Configure PLL used for SAI domain clock 02882 * @note PLL Source and PLLM Divider can be written only when PLL, 02883 * PLLSAI1 and PLLSAI2 (*) are disabled 02884 * @note PLLN/PLLP can be written only when PLL is disabled 02885 * @note This can be selected for SAI1 or SAI2 (*) 02886 * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_SAI\n 02887 * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_SAI\n 02888 * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_SAI\n 02889 * PLLCFGR PLLP LL_RCC_PLL_ConfigDomain_SAI 02890 * @param Source This parameter can be one of the following values: 02891 * @arg @ref LL_RCC_PLLSOURCE_NONE 02892 * @arg @ref LL_RCC_PLLSOURCE_MSI 02893 * @arg @ref LL_RCC_PLLSOURCE_HSI 02894 * @arg @ref LL_RCC_PLLSOURCE_HSE 02895 * @param PLLM This parameter can be one of the following values: 02896 * @arg @ref LL_RCC_PLLM_DIV_1 02897 * @arg @ref LL_RCC_PLLM_DIV_2 02898 * @arg @ref LL_RCC_PLLM_DIV_3 02899 * @arg @ref LL_RCC_PLLM_DIV_4 02900 * @arg @ref LL_RCC_PLLM_DIV_5 02901 * @arg @ref LL_RCC_PLLM_DIV_6 02902 * @arg @ref LL_RCC_PLLM_DIV_7 02903 * @arg @ref LL_RCC_PLLM_DIV_8 02904 * @param PLLN Between 8 and 86 02905 * @param PLLP This parameter can be one of the following values: 02906 * @arg @ref LL_RCC_PLLP_DIV_7 02907 * @arg @ref LL_RCC_PLLP_DIV_17 02908 * @retval None 02909 */ 02910 #endif /* RCC_PLLP_DIV_2_31_SUPPORT */ 02911 __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP) 02912 { 02913 #if defined(RCC_PLLP_DIV_2_31_SUPPORT) 02914 MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLPDIV, 02915 Source | PLLM | PLLN << RCC_POSITION_PLLN | PLLP); 02916 #else 02917 MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLP, 02918 Source | PLLM | PLLN << RCC_POSITION_PLLN | PLLP); 02919 #endif /* RCC_PLLP_DIV_2_31_SUPPORT */ 02920 } 02921 02922 /** 02923 * @brief Configure PLL used for 48Mhz domain clock 02924 * @note PLL Source and PLLM Divider can be written only when PLL, 02925 * PLLSAI1 and PLLSAI2 (*) are disabled 02926 * @note PLLN/PLLQ can be written only when PLL is disabled 02927 * @note This can be selected for USB, RNG, SDMMC 02928 * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_48M\n 02929 * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_48M\n 02930 * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_48M\n 02931 * PLLCFGR PLLQ LL_RCC_PLL_ConfigDomain_48M 02932 * @param Source This parameter can be one of the following values: 02933 * @arg @ref LL_RCC_PLLSOURCE_NONE 02934 * @arg @ref LL_RCC_PLLSOURCE_MSI 02935 * @arg @ref LL_RCC_PLLSOURCE_HSI 02936 * @arg @ref LL_RCC_PLLSOURCE_HSE 02937 * @param PLLM This parameter can be one of the following values: 02938 * @arg @ref LL_RCC_PLLM_DIV_1 02939 * @arg @ref LL_RCC_PLLM_DIV_2 02940 * @arg @ref LL_RCC_PLLM_DIV_3 02941 * @arg @ref LL_RCC_PLLM_DIV_4 02942 * @arg @ref LL_RCC_PLLM_DIV_5 02943 * @arg @ref LL_RCC_PLLM_DIV_6 02944 * @arg @ref LL_RCC_PLLM_DIV_7 02945 * @arg @ref LL_RCC_PLLM_DIV_8 02946 * @param PLLN Between 8 and 86 02947 * @param PLLQ This parameter can be one of the following values: 02948 * @arg @ref LL_RCC_PLLQ_DIV_2 02949 * @arg @ref LL_RCC_PLLQ_DIV_4 02950 * @arg @ref LL_RCC_PLLQ_DIV_6 02951 * @arg @ref LL_RCC_PLLQ_DIV_8 02952 * @retval None 02953 */ 02954 __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_48M(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLQ) 02955 { 02956 MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLQ, 02957 Source | PLLM | PLLN << RCC_POSITION_PLLN | PLLQ); 02958 } 02959 02960 /** 02961 * @brief Get Main PLL multiplication factor for VCO 02962 * @rmtoll PLLCFGR PLLN LL_RCC_PLL_GetN 02963 * @retval Between 8 and 86 02964 */ 02965 __STATIC_INLINE uint32_t LL_RCC_PLL_GetN(void) 02966 { 02967 return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> RCC_POSITION_PLLN); 02968 } 02969 02970 #if defined(RCC_PLLP_DIV_2_31_SUPPORT) 02971 /** 02972 * @brief Get Main PLL division factor for PLLP 02973 * @note used for PLLSAI3CLK (SAI1 and SAI2 clock) 02974 * @rmtoll PLLCFGR PLLPDIV LL_RCC_PLL_GetP 02975 * @retval Returned value can be one of the following values: 02976 * @arg @ref LL_RCC_PLLP_DIV_2 02977 * @arg @ref LL_RCC_PLLP_DIV_3 02978 * @arg @ref LL_RCC_PLLP_DIV_4 02979 * @arg @ref LL_RCC_PLLP_DIV_5 02980 * @arg @ref LL_RCC_PLLP_DIV_6 02981 * @arg @ref LL_RCC_PLLP_DIV_7 02982 * @arg @ref LL_RCC_PLLP_DIV_8 02983 * @arg @ref LL_RCC_PLLP_DIV_9 02984 * @arg @ref LL_RCC_PLLP_DIV_10 02985 * @arg @ref LL_RCC_PLLP_DIV_11 02986 * @arg @ref LL_RCC_PLLP_DIV_12 02987 * @arg @ref LL_RCC_PLLP_DIV_13 02988 * @arg @ref LL_RCC_PLLP_DIV_14 02989 * @arg @ref LL_RCC_PLLP_DIV_15 02990 * @arg @ref LL_RCC_PLLP_DIV_16 02991 * @arg @ref LL_RCC_PLLP_DIV_17 02992 * @arg @ref LL_RCC_PLLP_DIV_18 02993 * @arg @ref LL_RCC_PLLP_DIV_19 02994 * @arg @ref LL_RCC_PLLP_DIV_20 02995 * @arg @ref LL_RCC_PLLP_DIV_21 02996 * @arg @ref LL_RCC_PLLP_DIV_22 02997 * @arg @ref LL_RCC_PLLP_DIV_23 02998 * @arg @ref LL_RCC_PLLP_DIV_24 02999 * @arg @ref LL_RCC_PLLP_DIV_25 03000 * @arg @ref LL_RCC_PLLP_DIV_26 03001 * @arg @ref LL_RCC_PLLP_DIV_27 03002 * @arg @ref LL_RCC_PLLP_DIV_28 03003 * @arg @ref LL_RCC_PLLP_DIV_29 03004 * @arg @ref LL_RCC_PLLP_DIV_30 03005 * @arg @ref LL_RCC_PLLP_DIV_31 03006 */ 03007 __STATIC_INLINE uint32_t LL_RCC_PLL_GetP(void) 03008 { 03009 return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLPDIV)); 03010 } 03011 #else 03012 /** 03013 * @brief Get Main PLL division factor for PLLP 03014 * @note used for PLLSAI3CLK (SAI1 and SAI2 clock) 03015 * @rmtoll PLLCFGR PLLP LL_RCC_PLL_GetP 03016 * @retval Returned value can be one of the following values: 03017 * @arg @ref LL_RCC_PLLP_DIV_7 03018 * @arg @ref LL_RCC_PLLP_DIV_17 03019 */ 03020 __STATIC_INLINE uint32_t LL_RCC_PLL_GetP(void) 03021 { 03022 return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLP)); 03023 } 03024 #endif /* RCC_PLLP_DIV_2_31_SUPPORT */ 03025 03026 /** 03027 * @brief Get Main PLL division factor for PLLQ 03028 * @note used for PLL48M1CLK selected for USB, RNG, SDMMC (48 MHz clock) 03029 * @rmtoll PLLCFGR PLLQ LL_RCC_PLL_GetQ 03030 * @retval Returned value can be one of the following values: 03031 * @arg @ref LL_RCC_PLLQ_DIV_2 03032 * @arg @ref LL_RCC_PLLQ_DIV_4 03033 * @arg @ref LL_RCC_PLLQ_DIV_6 03034 * @arg @ref LL_RCC_PLLQ_DIV_8 03035 */ 03036 __STATIC_INLINE uint32_t LL_RCC_PLL_GetQ(void) 03037 { 03038 return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQ)); 03039 } 03040 03041 /** 03042 * @brief Get Main PLL division factor for PLLR 03043 * @note used for PLLCLK (system clock) 03044 * @rmtoll PLLCFGR PLLR LL_RCC_PLL_GetR 03045 * @retval Returned value can be one of the following values: 03046 * @arg @ref LL_RCC_PLLR_DIV_2 03047 * @arg @ref LL_RCC_PLLR_DIV_4 03048 * @arg @ref LL_RCC_PLLR_DIV_6 03049 * @arg @ref LL_RCC_PLLR_DIV_8 03050 */ 03051 __STATIC_INLINE uint32_t LL_RCC_PLL_GetR(void) 03052 { 03053 return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLR)); 03054 } 03055 03056 /** 03057 * @brief Get the oscillator used as PLL clock source. 03058 * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_GetMainSource 03059 * @retval Returned value can be one of the following values: 03060 * @arg @ref LL_RCC_PLLSOURCE_NONE 03061 * @arg @ref LL_RCC_PLLSOURCE_MSI 03062 * @arg @ref LL_RCC_PLLSOURCE_HSI 03063 * @arg @ref LL_RCC_PLLSOURCE_HSE 03064 */ 03065 __STATIC_INLINE uint32_t LL_RCC_PLL_GetMainSource(void) 03066 { 03067 return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC)); 03068 } 03069 03070 /** 03071 * @brief Get Division factor for the main PLL and other PLL 03072 * @rmtoll PLLCFGR PLLM LL_RCC_PLL_GetDivider 03073 * @retval Returned value can be one of the following values: 03074 * @arg @ref LL_RCC_PLLM_DIV_1 03075 * @arg @ref LL_RCC_PLLM_DIV_2 03076 * @arg @ref LL_RCC_PLLM_DIV_3 03077 * @arg @ref LL_RCC_PLLM_DIV_4 03078 * @arg @ref LL_RCC_PLLM_DIV_5 03079 * @arg @ref LL_RCC_PLLM_DIV_6 03080 * @arg @ref LL_RCC_PLLM_DIV_7 03081 * @arg @ref LL_RCC_PLLM_DIV_8 03082 */ 03083 __STATIC_INLINE uint32_t LL_RCC_PLL_GetDivider(void) 03084 { 03085 return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM)); 03086 } 03087 03088 /** 03089 * @brief Enable PLL output mapped on SAI domain clock 03090 * @rmtoll PLLCFGR PLLPEN LL_RCC_PLL_EnableDomain_SAI 03091 * @retval None 03092 */ 03093 __STATIC_INLINE void LL_RCC_PLL_EnableDomain_SAI(void) 03094 { 03095 SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLPEN); 03096 } 03097 03098 /** 03099 * @brief Disable PLL output mapped on SAI domain clock 03100 * @note Cannot be disabled if the PLL clock is used as the system 03101 * clock 03102 * @note In order to save power, when the PLLCLK of the PLL is 03103 * not used, should be 0 03104 * @rmtoll PLLCFGR PLLPEN LL_RCC_PLL_DisableDomain_SAI 03105 * @retval None 03106 */ 03107 __STATIC_INLINE void LL_RCC_PLL_DisableDomain_SAI(void) 03108 { 03109 CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLPEN); 03110 } 03111 03112 /** 03113 * @brief Enable PLL output mapped on 48MHz domain clock 03114 * @rmtoll PLLCFGR PLLQEN LL_RCC_PLL_EnableDomain_48M 03115 * @retval None 03116 */ 03117 __STATIC_INLINE void LL_RCC_PLL_EnableDomain_48M(void) 03118 { 03119 SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQEN); 03120 } 03121 03122 /** 03123 * @brief Disable PLL output mapped on 48MHz domain clock 03124 * @note Cannot be disabled if the PLL clock is used as the system 03125 * clock 03126 * @note In order to save power, when the PLLCLK of the PLL is 03127 * not used, should be 0 03128 * @rmtoll PLLCFGR PLLQEN LL_RCC_PLL_DisableDomain_48M 03129 * @retval None 03130 */ 03131 __STATIC_INLINE void LL_RCC_PLL_DisableDomain_48M(void) 03132 { 03133 CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQEN); 03134 } 03135 03136 /** 03137 * @brief Enable PLL output mapped on SYSCLK domain 03138 * @rmtoll PLLCFGR PLLREN LL_RCC_PLL_EnableDomain_SYS 03139 * @retval None 03140 */ 03141 __STATIC_INLINE void LL_RCC_PLL_EnableDomain_SYS(void) 03142 { 03143 SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLREN); 03144 } 03145 03146 /** 03147 * @brief Disable PLL output mapped on SYSCLK domain 03148 * @note Cannot be disabled if the PLL clock is used as the system 03149 * clock 03150 * @note In order to save power, when the PLLCLK of the PLL is 03151 * not used, Main PLL should be 0 03152 * @rmtoll PLLCFGR PLLREN LL_RCC_PLL_DisableDomain_SYS 03153 * @retval None 03154 */ 03155 __STATIC_INLINE void LL_RCC_PLL_DisableDomain_SYS(void) 03156 { 03157 CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLREN); 03158 } 03159 03160 /** 03161 * @} 03162 */ 03163 03164 /** @defgroup RCC_LL_EF_PLLSAI1 PLLSAI1 03165 * @{ 03166 */ 03167 03168 /** 03169 * @brief Enable PLLSAI1 03170 * @rmtoll CR PLLSAI1ON LL_RCC_PLLSAI1_Enable 03171 * @retval None 03172 */ 03173 __STATIC_INLINE void LL_RCC_PLLSAI1_Enable(void) 03174 { 03175 SET_BIT(RCC->CR, RCC_CR_PLLSAI1ON); 03176 } 03177 03178 /** 03179 * @brief Disable PLLSAI1 03180 * @rmtoll CR PLLSAI1ON LL_RCC_PLLSAI1_Disable 03181 * @retval None 03182 */ 03183 __STATIC_INLINE void LL_RCC_PLLSAI1_Disable(void) 03184 { 03185 CLEAR_BIT(RCC->CR, RCC_CR_PLLSAI1ON); 03186 } 03187 03188 /** 03189 * @brief Check if PLLSAI1 Ready 03190 * @rmtoll CR PLLSAI1RDY LL_RCC_PLLSAI1_IsReady 03191 * @retval State of bit (1 or 0). 03192 */ 03193 __STATIC_INLINE uint32_t LL_RCC_PLLSAI1_IsReady(void) 03194 { 03195 return (READ_BIT(RCC->CR, RCC_CR_PLLSAI1RDY) == (RCC_CR_PLLSAI1RDY)); 03196 } 03197 03198 /** 03199 * @brief Configure PLLSAI1 used for 48Mhz domain clock 03200 * @note PLL Source and PLLM Divider can be written only when PLL, 03201 * PLLSAI1 and PLLSAI2 (*) are disabled 03202 * @note PLLN/PLLQ can be written only when PLLSAI1 is disabled 03203 * @note This can be selected for USB, RNG, SDMMC 03204 * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI1_ConfigDomain_48M\n 03205 * PLLCFGR PLLM LL_RCC_PLLSAI1_ConfigDomain_48M\n 03206 * PLLSAI1CFGR PLLSAI1N LL_RCC_PLLSAI1_ConfigDomain_48M\n 03207 * PLLSAI1CFGR PLLSAI1Q LL_RCC_PLLSAI1_ConfigDomain_48M 03208 * @param Source This parameter can be one of the following values: 03209 * @arg @ref LL_RCC_PLLSOURCE_NONE 03210 * @arg @ref LL_RCC_PLLSOURCE_MSI 03211 * @arg @ref LL_RCC_PLLSOURCE_HSI 03212 * @arg @ref LL_RCC_PLLSOURCE_HSE 03213 * @param PLLM This parameter can be one of the following values: 03214 * @arg @ref LL_RCC_PLLM_DIV_1 03215 * @arg @ref LL_RCC_PLLM_DIV_2 03216 * @arg @ref LL_RCC_PLLM_DIV_3 03217 * @arg @ref LL_RCC_PLLM_DIV_4 03218 * @arg @ref LL_RCC_PLLM_DIV_5 03219 * @arg @ref LL_RCC_PLLM_DIV_6 03220 * @arg @ref LL_RCC_PLLM_DIV_7 03221 * @arg @ref LL_RCC_PLLM_DIV_8 03222 * @param PLLN Between 8 and 86 03223 * @param PLLQ This parameter can be one of the following values: 03224 * @arg @ref LL_RCC_PLLSAI1Q_DIV_2 03225 * @arg @ref LL_RCC_PLLSAI1Q_DIV_4 03226 * @arg @ref LL_RCC_PLLSAI1Q_DIV_6 03227 * @arg @ref LL_RCC_PLLSAI1Q_DIV_8 03228 * @retval None 03229 */ 03230 __STATIC_INLINE void LL_RCC_PLLSAI1_ConfigDomain_48M(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLQ) 03231 { 03232 MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, Source | PLLM); 03233 MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1Q, PLLN << RCC_POSITION_PLLSAI1N | PLLQ); 03234 } 03235 03236 #if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) 03237 /** 03238 * @brief Configure PLLSAI1 used for SAI domain clock 03239 * @note PLL Source and PLLM Divider can be written only when PLL, 03240 * PLLSAI1 and PLLSAI2 (*) are disabled 03241 * @note PLLN/PLLP can be written only when PLLSAI1 is disabled 03242 * @note This can be selected for SAI1 or SAI2 (*) 03243 * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI1_ConfigDomain_SAI\n 03244 * PLLCFGR PLLM LL_RCC_PLLSAI1_ConfigDomain_SAI\n 03245 * PLLSAI1CFGR PLLSAI1N LL_RCC_PLLSAI1_ConfigDomain_SAI\n 03246 * PLLSAI1CFGR PLLSAI1PDIV LL_RCC_PLLSAI1_ConfigDomain_SAI 03247 * @param Source This parameter can be one of the following values: 03248 * @arg @ref LL_RCC_PLLSOURCE_NONE 03249 * @arg @ref LL_RCC_PLLSOURCE_MSI 03250 * @arg @ref LL_RCC_PLLSOURCE_HSI 03251 * @arg @ref LL_RCC_PLLSOURCE_HSE 03252 * @param PLLM This parameter can be one of the following values: 03253 * @arg @ref LL_RCC_PLLM_DIV_1 03254 * @arg @ref LL_RCC_PLLM_DIV_2 03255 * @arg @ref LL_RCC_PLLM_DIV_3 03256 * @arg @ref LL_RCC_PLLM_DIV_4 03257 * @arg @ref LL_RCC_PLLM_DIV_5 03258 * @arg @ref LL_RCC_PLLM_DIV_6 03259 * @arg @ref LL_RCC_PLLM_DIV_7 03260 * @arg @ref LL_RCC_PLLM_DIV_8 03261 * @param PLLN Between 8 and 86 03262 * @param PLLP This parameter can be one of the following values: 03263 * @arg @ref LL_RCC_PLLSAI1P_DIV_2 03264 * @arg @ref LL_RCC_PLLSAI1P_DIV_3 03265 * @arg @ref LL_RCC_PLLSAI1P_DIV_4 03266 * @arg @ref LL_RCC_PLLSAI1P_DIV_5 03267 * @arg @ref LL_RCC_PLLSAI1P_DIV_6 03268 * @arg @ref LL_RCC_PLLSAI1P_DIV_7 03269 * @arg @ref LL_RCC_PLLSAI1P_DIV_8 03270 * @arg @ref LL_RCC_PLLSAI1P_DIV_9 03271 * @arg @ref LL_RCC_PLLSAI1P_DIV_10 03272 * @arg @ref LL_RCC_PLLSAI1P_DIV_11 03273 * @arg @ref LL_RCC_PLLSAI1P_DIV_12 03274 * @arg @ref LL_RCC_PLLSAI1P_DIV_13 03275 * @arg @ref LL_RCC_PLLSAI1P_DIV_14 03276 * @arg @ref LL_RCC_PLLSAI1P_DIV_15 03277 * @arg @ref LL_RCC_PLLSAI1P_DIV_16 03278 * @arg @ref LL_RCC_PLLSAI1P_DIV_17 03279 * @arg @ref LL_RCC_PLLSAI1P_DIV_18 03280 * @arg @ref LL_RCC_PLLSAI1P_DIV_19 03281 * @arg @ref LL_RCC_PLLSAI1P_DIV_20 03282 * @arg @ref LL_RCC_PLLSAI1P_DIV_21 03283 * @arg @ref LL_RCC_PLLSAI1P_DIV_22 03284 * @arg @ref LL_RCC_PLLSAI1P_DIV_23 03285 * @arg @ref LL_RCC_PLLSAI1P_DIV_24 03286 * @arg @ref LL_RCC_PLLSAI1P_DIV_25 03287 * @arg @ref LL_RCC_PLLSAI1P_DIV_26 03288 * @arg @ref LL_RCC_PLLSAI1P_DIV_27 03289 * @arg @ref LL_RCC_PLLSAI1P_DIV_28 03290 * @arg @ref LL_RCC_PLLSAI1P_DIV_29 03291 * @arg @ref LL_RCC_PLLSAI1P_DIV_30 03292 * @arg @ref LL_RCC_PLLSAI1P_DIV_31 03293 * @retval None 03294 */ 03295 #else 03296 /** 03297 * @brief Configure PLLSAI1 used for SAI domain clock 03298 * @note PLL Source and PLLM Divider can be written only when PLL, 03299 * PLLSAI1 and PLLSAI2 (*) are disabled 03300 * @note PLLN/PLLP can be written only when PLLSAI1 is disabled 03301 * @note This can be selected for SAI1 or SAI2 (*) 03302 * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI1_ConfigDomain_SAI\n 03303 * PLLCFGR PLLM LL_RCC_PLLSAI1_ConfigDomain_SAI\n 03304 * PLLSAI1CFGR PLLSAI1N LL_RCC_PLLSAI1_ConfigDomain_SAI\n 03305 * PLLSAI1CFGR PLLSAI1P LL_RCC_PLLSAI1_ConfigDomain_SAI 03306 * @param Source This parameter can be one of the following values: 03307 * @arg @ref LL_RCC_PLLSOURCE_NONE 03308 * @arg @ref LL_RCC_PLLSOURCE_MSI 03309 * @arg @ref LL_RCC_PLLSOURCE_HSI 03310 * @arg @ref LL_RCC_PLLSOURCE_HSE 03311 * @param PLLM This parameter can be one of the following values: 03312 * @arg @ref LL_RCC_PLLM_DIV_1 03313 * @arg @ref LL_RCC_PLLM_DIV_2 03314 * @arg @ref LL_RCC_PLLM_DIV_3 03315 * @arg @ref LL_RCC_PLLM_DIV_4 03316 * @arg @ref LL_RCC_PLLM_DIV_5 03317 * @arg @ref LL_RCC_PLLM_DIV_6 03318 * @arg @ref LL_RCC_PLLM_DIV_7 03319 * @arg @ref LL_RCC_PLLM_DIV_8 03320 * @param PLLN Between 8 and 86 03321 * @param PLLP This parameter can be one of the following values: 03322 * @arg @ref LL_RCC_PLLSAI1P_DIV_7 03323 * @arg @ref LL_RCC_PLLSAI1P_DIV_17 03324 * @retval None 03325 */ 03326 #endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */ 03327 __STATIC_INLINE void LL_RCC_PLLSAI1_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP) 03328 { 03329 MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, Source | PLLM); 03330 #if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) 03331 MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1PDIV, 03332 PLLN << RCC_POSITION_PLLSAI1N | PLLP); 03333 #else 03334 MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1P, PLLN << RCC_POSITION_PLLSAI1N | PLLP); 03335 #endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */ 03336 } 03337 03338 /** 03339 * @brief Configure PLLSAI1 used for ADC domain clock 03340 * @note PLL Source and PLLM Divider can be written only when PLL, 03341 * PLLSAI1 and PLLSAI2 (*) are disabled 03342 * @note PLLN/PLLR can be written only when PLLSAI1 is disabled 03343 * @note This can be selected for ADC 03344 * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI1_ConfigDomain_ADC\n 03345 * PLLCFGR PLLM LL_RCC_PLLSAI1_ConfigDomain_ADC\n 03346 * PLLSAI1CFGR PLLSAI1N LL_RCC_PLLSAI1_ConfigDomain_ADC\n 03347 * PLLSAI1CFGR PLLSAI1R LL_RCC_PLLSAI1_ConfigDomain_ADC 03348 * @param Source This parameter can be one of the following values: 03349 * @arg @ref LL_RCC_PLLSOURCE_NONE 03350 * @arg @ref LL_RCC_PLLSOURCE_MSI 03351 * @arg @ref LL_RCC_PLLSOURCE_HSI 03352 * @arg @ref LL_RCC_PLLSOURCE_HSE 03353 * @param PLLM This parameter can be one of the following values: 03354 * @arg @ref LL_RCC_PLLM_DIV_1 03355 * @arg @ref LL_RCC_PLLM_DIV_2 03356 * @arg @ref LL_RCC_PLLM_DIV_3 03357 * @arg @ref LL_RCC_PLLM_DIV_4 03358 * @arg @ref LL_RCC_PLLM_DIV_5 03359 * @arg @ref LL_RCC_PLLM_DIV_6 03360 * @arg @ref LL_RCC_PLLM_DIV_7 03361 * @arg @ref LL_RCC_PLLM_DIV_8 03362 * @param PLLN Between 8 and 86 03363 * @param PLLR This parameter can be one of the following values: 03364 * @arg @ref LL_RCC_PLLSAI1R_DIV_2 03365 * @arg @ref LL_RCC_PLLSAI1R_DIV_4 03366 * @arg @ref LL_RCC_PLLSAI1R_DIV_6 03367 * @arg @ref LL_RCC_PLLSAI1R_DIV_8 03368 * @retval None 03369 */ 03370 __STATIC_INLINE void LL_RCC_PLLSAI1_ConfigDomain_ADC(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR) 03371 { 03372 MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, Source | PLLM); 03373 MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1R, PLLN << RCC_POSITION_PLLSAI1N | PLLR); 03374 } 03375 03376 /** 03377 * @brief Get SAI1PLL multiplication factor for VCO 03378 * @rmtoll PLLSAI1CFGR PLLSAI1N LL_RCC_PLLSAI1_GetN 03379 * @retval Between 8 and 86 03380 */ 03381 __STATIC_INLINE uint32_t LL_RCC_PLLSAI1_GetN(void) 03382 { 03383 return (uint32_t)(READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N) >> RCC_POSITION_PLLSAI1N); 03384 } 03385 03386 #if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) 03387 /** 03388 * @brief Get SAI1PLL division factor for PLLSAI1P 03389 * @note used for PLLSAI1CLK (SAI1 or SAI2 (*) clock). 03390 * @rmtoll PLLSAI1CFGR PLLSAI1PDIV LL_RCC_PLLSAI1_GetP 03391 * @retval Returned value can be one of the following values: 03392 * @arg @ref LL_RCC_PLLSAI1P_DIV_2 03393 * @arg @ref LL_RCC_PLLSAI1P_DIV_3 03394 * @arg @ref LL_RCC_PLLSAI1P_DIV_4 03395 * @arg @ref LL_RCC_PLLSAI1P_DIV_5 03396 * @arg @ref LL_RCC_PLLSAI1P_DIV_6 03397 * @arg @ref LL_RCC_PLLSAI1P_DIV_7 03398 * @arg @ref LL_RCC_PLLSAI1P_DIV_8 03399 * @arg @ref LL_RCC_PLLSAI1P_DIV_9 03400 * @arg @ref LL_RCC_PLLSAI1P_DIV_10 03401 * @arg @ref LL_RCC_PLLSAI1P_DIV_11 03402 * @arg @ref LL_RCC_PLLSAI1P_DIV_12 03403 * @arg @ref LL_RCC_PLLSAI1P_DIV_13 03404 * @arg @ref LL_RCC_PLLSAI1P_DIV_14 03405 * @arg @ref LL_RCC_PLLSAI1P_DIV_15 03406 * @arg @ref LL_RCC_PLLSAI1P_DIV_16 03407 * @arg @ref LL_RCC_PLLSAI1P_DIV_17 03408 * @arg @ref LL_RCC_PLLSAI1P_DIV_18 03409 * @arg @ref LL_RCC_PLLSAI1P_DIV_19 03410 * @arg @ref LL_RCC_PLLSAI1P_DIV_20 03411 * @arg @ref LL_RCC_PLLSAI1P_DIV_21 03412 * @arg @ref LL_RCC_PLLSAI1P_DIV_22 03413 * @arg @ref LL_RCC_PLLSAI1P_DIV_23 03414 * @arg @ref LL_RCC_PLLSAI1P_DIV_24 03415 * @arg @ref LL_RCC_PLLSAI1P_DIV_25 03416 * @arg @ref LL_RCC_PLLSAI1P_DIV_26 03417 * @arg @ref LL_RCC_PLLSAI1P_DIV_27 03418 * @arg @ref LL_RCC_PLLSAI1P_DIV_28 03419 * @arg @ref LL_RCC_PLLSAI1P_DIV_29 03420 * @arg @ref LL_RCC_PLLSAI1P_DIV_30 03421 * @arg @ref LL_RCC_PLLSAI1P_DIV_31 03422 */ 03423 #else 03424 /** 03425 * @brief Get SAI1PLL division factor for PLLSAI1P 03426 * @note used for PLLSAI1CLK (SAI1 or SAI2 (*) clock). 03427 * @rmtoll PLLSAI1CFGR PLLSAI1P LL_RCC_PLLSAI1_GetP 03428 * @retval Returned value can be one of the following values: 03429 * @arg @ref LL_RCC_PLLSAI1P_DIV_7 03430 * @arg @ref LL_RCC_PLLSAI1P_DIV_17 03431 */ 03432 #endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */ 03433 __STATIC_INLINE uint32_t LL_RCC_PLLSAI1_GetP(void) 03434 { 03435 #if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) 03436 return (uint32_t)(READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1PDIV)); 03437 #else 03438 return (uint32_t)(READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1P)); 03439 #endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */ 03440 } 03441 03442 /** 03443 * @brief Get SAI1PLL division factor for PLLSAI1Q 03444 * @note used PLL48M2CLK selected for USB, RNG, SDMMC (48 MHz clock) 03445 * @rmtoll PLLSAI1CFGR PLLSAI1Q LL_RCC_PLLSAI1_GetQ 03446 * @retval Returned value can be one of the following values: 03447 * @arg @ref LL_RCC_PLLSAI1Q_DIV_2 03448 * @arg @ref LL_RCC_PLLSAI1Q_DIV_4 03449 * @arg @ref LL_RCC_PLLSAI1Q_DIV_6 03450 * @arg @ref LL_RCC_PLLSAI1Q_DIV_8 03451 */ 03452 __STATIC_INLINE uint32_t LL_RCC_PLLSAI1_GetQ(void) 03453 { 03454 return (uint32_t)(READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1Q)); 03455 } 03456 03457 /** 03458 * @brief Get PLLSAI1 division factor for PLLSAIR 03459 * @note used for PLLADC1CLK (ADC clock) 03460 * @rmtoll PLLSAI1CFGR PLLSAI1R LL_RCC_PLLSAI1_GetR 03461 * @retval Returned value can be one of the following values: 03462 * @arg @ref LL_RCC_PLLSAI1R_DIV_2 03463 * @arg @ref LL_RCC_PLLSAI1R_DIV_4 03464 * @arg @ref LL_RCC_PLLSAI1R_DIV_6 03465 * @arg @ref LL_RCC_PLLSAI1R_DIV_8 03466 */ 03467 __STATIC_INLINE uint32_t LL_RCC_PLLSAI1_GetR(void) 03468 { 03469 return (uint32_t)(READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1R)); 03470 } 03471 03472 /** 03473 * @brief Enable PLLSAI1 output mapped on SAI domain clock 03474 * @rmtoll PLLSAI1CFGR PLLSAI1PEN LL_RCC_PLLSAI1_EnableDomain_SAI 03475 * @retval None 03476 */ 03477 __STATIC_INLINE void LL_RCC_PLLSAI1_EnableDomain_SAI(void) 03478 { 03479 SET_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1PEN); 03480 } 03481 03482 /** 03483 * @brief Disable PLLSAI1 output mapped on SAI domain clock 03484 * @note In order to save power, when of the PLLSAI1 is 03485 * not used, should be 0 03486 * @rmtoll PLLSAI1CFGR PLLSAI1PEN LL_RCC_PLLSAI1_DisableDomain_SAI 03487 * @retval None 03488 */ 03489 __STATIC_INLINE void LL_RCC_PLLSAI1_DisableDomain_SAI(void) 03490 { 03491 CLEAR_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1PEN); 03492 } 03493 03494 /** 03495 * @brief Enable PLLSAI1 output mapped on 48MHz domain clock 03496 * @rmtoll PLLSAI1CFGR PLLSAI1QEN LL_RCC_PLLSAI1_EnableDomain_48M 03497 * @retval None 03498 */ 03499 __STATIC_INLINE void LL_RCC_PLLSAI1_EnableDomain_48M(void) 03500 { 03501 SET_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1QEN); 03502 } 03503 03504 /** 03505 * @brief Disable PLLSAI1 output mapped on 48MHz domain clock 03506 * @note In order to save power, when of the PLLSAI1 is 03507 * not used, should be 0 03508 * @rmtoll PLLSAI1CFGR PLLSAI1QEN LL_RCC_PLLSAI1_DisableDomain_48M 03509 * @retval None 03510 */ 03511 __STATIC_INLINE void LL_RCC_PLLSAI1_DisableDomain_48M(void) 03512 { 03513 CLEAR_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1QEN); 03514 } 03515 03516 /** 03517 * @brief Enable PLLSAI1 output mapped on ADC domain clock 03518 * @rmtoll PLLSAI1CFGR PLLSAI1REN LL_RCC_PLLSAI1_EnableDomain_ADC 03519 * @retval None 03520 */ 03521 __STATIC_INLINE void LL_RCC_PLLSAI1_EnableDomain_ADC(void) 03522 { 03523 SET_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1REN); 03524 } 03525 03526 /** 03527 * @brief Disable PLLSAI1 output mapped on ADC domain clock 03528 * @note In order to save power, when of the PLLSAI1 is 03529 * not used, Main PLLSAI1 should be 0 03530 * @rmtoll PLLSAI1CFGR PLLSAI1REN LL_RCC_PLLSAI1_DisableDomain_ADC 03531 * @retval None 03532 */ 03533 __STATIC_INLINE void LL_RCC_PLLSAI1_DisableDomain_ADC(void) 03534 { 03535 CLEAR_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1REN); 03536 } 03537 03538 /** 03539 * @} 03540 */ 03541 03542 #if defined(RCC_PLLSAI2_SUPPORT) 03543 /** @defgroup RCC_LL_EF_PLLSAI2 PLLSAI2 03544 * @{ 03545 */ 03546 03547 /** 03548 * @brief Enable PLLSAI2 03549 * @rmtoll CR PLLSAI2ON LL_RCC_PLLSAI2_Enable 03550 * @retval None 03551 */ 03552 __STATIC_INLINE void LL_RCC_PLLSAI2_Enable(void) 03553 { 03554 SET_BIT(RCC->CR, RCC_CR_PLLSAI2ON); 03555 } 03556 03557 /** 03558 * @brief Disable PLLSAI2 03559 * @rmtoll CR PLLSAI2ON LL_RCC_PLLSAI2_Disable 03560 * @retval None 03561 */ 03562 __STATIC_INLINE void LL_RCC_PLLSAI2_Disable(void) 03563 { 03564 CLEAR_BIT(RCC->CR, RCC_CR_PLLSAI2ON); 03565 } 03566 03567 /** 03568 * @brief Check if PLLSAI2 Ready 03569 * @rmtoll CR PLLSAI2RDY LL_RCC_PLLSAI2_IsReady 03570 * @retval State of bit (1 or 0). 03571 */ 03572 __STATIC_INLINE uint32_t LL_RCC_PLLSAI2_IsReady(void) 03573 { 03574 return (READ_BIT(RCC->CR, RCC_CR_PLLSAI2RDY) == (RCC_CR_PLLSAI2RDY)); 03575 } 03576 03577 /** 03578 * @brief Configure PLLSAI2 used for SAI domain clock 03579 * @note PLL Source and PLLM Divider can be written only when PLL, 03580 * PLLSAI2 and PLLSAI2 are disabled 03581 * @note PLLN/PLLP can be written only when PLLSAI2 is disabled 03582 * @note This can be selected for SAI1 or SAI2 03583 * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI2_ConfigDomain_SAI\n 03584 * PLLCFGR PLLM LL_RCC_PLLSAI2_ConfigDomain_SAI\n 03585 * PLLSAI2CFGR PLLSAI2N LL_RCC_PLLSAI2_ConfigDomain_SAI\n 03586 * PLLSAI2CFGR PLLSAI2P LL_RCC_PLLSAI2_ConfigDomain_SAI 03587 * @param Source This parameter can be one of the following values: 03588 * @arg @ref LL_RCC_PLLSOURCE_NONE 03589 * @arg @ref LL_RCC_PLLSOURCE_MSI 03590 * @arg @ref LL_RCC_PLLSOURCE_HSI 03591 * @arg @ref LL_RCC_PLLSOURCE_HSE 03592 * @param PLLM This parameter can be one of the following values: 03593 * @arg @ref LL_RCC_PLLM_DIV_1 03594 * @arg @ref LL_RCC_PLLM_DIV_2 03595 * @arg @ref LL_RCC_PLLM_DIV_3 03596 * @arg @ref LL_RCC_PLLM_DIV_4 03597 * @arg @ref LL_RCC_PLLM_DIV_5 03598 * @arg @ref LL_RCC_PLLM_DIV_6 03599 * @arg @ref LL_RCC_PLLM_DIV_7 03600 * @arg @ref LL_RCC_PLLM_DIV_8 03601 * @param PLLN Between 8 and 86 03602 * @param PLLP This parameter can be one of the following values: 03603 * @arg @ref LL_RCC_PLLSAI2P_DIV_7 03604 * @arg @ref LL_RCC_PLLSAI2P_DIV_17 03605 * @retval None 03606 */ 03607 __STATIC_INLINE void LL_RCC_PLLSAI2_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP) 03608 { 03609 MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, Source | PLLM); 03610 MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2P, PLLN << RCC_POSITION_PLLSAI2N | PLLP); 03611 } 03612 03613 /** 03614 * @brief Configure PLLSAI2 used for ADC domain clock 03615 * @note PLL Source and PLLM Divider can be written only when PLL, 03616 * PLLSAI2 and PLLSAI2 are disabled 03617 * @note PLLN/PLLR can be written only when PLLSAI2 is disabled 03618 * @note This can be selected for ADC 03619 * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI2_ConfigDomain_ADC\n 03620 * PLLCFGR PLLM LL_RCC_PLLSAI2_ConfigDomain_ADC\n 03621 * PLLSAI2CFGR PLLSAI2N LL_RCC_PLLSAI2_ConfigDomain_ADC\n 03622 * PLLSAI2CFGR PLLSAI2R LL_RCC_PLLSAI2_ConfigDomain_ADC 03623 * @param Source This parameter can be one of the following values: 03624 * @arg @ref LL_RCC_PLLSOURCE_NONE 03625 * @arg @ref LL_RCC_PLLSOURCE_MSI 03626 * @arg @ref LL_RCC_PLLSOURCE_HSI 03627 * @arg @ref LL_RCC_PLLSOURCE_HSE 03628 * @param PLLM This parameter can be one of the following values: 03629 * @arg @ref LL_RCC_PLLM_DIV_1 03630 * @arg @ref LL_RCC_PLLM_DIV_2 03631 * @arg @ref LL_RCC_PLLM_DIV_3 03632 * @arg @ref LL_RCC_PLLM_DIV_4 03633 * @arg @ref LL_RCC_PLLM_DIV_5 03634 * @arg @ref LL_RCC_PLLM_DIV_6 03635 * @arg @ref LL_RCC_PLLM_DIV_7 03636 * @arg @ref LL_RCC_PLLM_DIV_8 03637 * @param PLLN Between 8 and 86 03638 * @param PLLR This parameter can be one of the following values: 03639 * @arg @ref LL_RCC_PLLSAI2R_DIV_2 03640 * @arg @ref LL_RCC_PLLSAI2R_DIV_4 03641 * @arg @ref LL_RCC_PLLSAI2R_DIV_6 03642 * @arg @ref LL_RCC_PLLSAI2R_DIV_8 03643 * @retval None 03644 */ 03645 __STATIC_INLINE void LL_RCC_PLLSAI2_ConfigDomain_ADC(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR) 03646 { 03647 MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, Source | PLLM); 03648 MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2R, PLLN << RCC_POSITION_PLLSAI2N | PLLR); 03649 } 03650 03651 /** 03652 * @brief Get SAI2PLL multiplication factor for VCO 03653 * @rmtoll PLLSAI2CFGR PLLSAI2N LL_RCC_PLLSAI2_GetN 03654 * @retval Between 8 and 86 03655 */ 03656 __STATIC_INLINE uint32_t LL_RCC_PLLSAI2_GetN(void) 03657 { 03658 return (uint32_t)(READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2N) >> RCC_POSITION_PLLSAI2N); 03659 } 03660 03661 /** 03662 * @brief Get SAI2PLL division factor for PLLSAI2P 03663 * @note used for PLLSAI2CLK (SAI1 or SAI2 clock). 03664 * @rmtoll PLLSAI2CFGR PLLSAI2P LL_RCC_PLLSAI2_GetP 03665 * @retval Returned value can be one of the following values: 03666 * @arg @ref LL_RCC_PLLSAI2P_DIV_7 03667 * @arg @ref LL_RCC_PLLSAI2P_DIV_17 03668 */ 03669 __STATIC_INLINE uint32_t LL_RCC_PLLSAI2_GetP(void) 03670 { 03671 return (uint32_t)(READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2P)); 03672 } 03673 03674 /** 03675 * @brief Get SAI2PLL division factor for PLLSAI2R 03676 * @note used for PLLADC2CLK (ADC clock) 03677 * @rmtoll PLLSAI2CFGR PLLSAI2R LL_RCC_PLLSAI2_GetR 03678 * @retval Returned value can be one of the following values: 03679 * @arg @ref LL_RCC_PLLSAI2R_DIV_2 03680 * @arg @ref LL_RCC_PLLSAI2R_DIV_4 03681 * @arg @ref LL_RCC_PLLSAI2R_DIV_6 03682 * @arg @ref LL_RCC_PLLSAI2R_DIV_8 03683 */ 03684 __STATIC_INLINE uint32_t LL_RCC_PLLSAI2_GetR(void) 03685 { 03686 return (uint32_t)(READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2R)); 03687 } 03688 03689 /** 03690 * @brief Enable PLLSAI2 output mapped on SAI domain clock 03691 * @rmtoll PLLSAI2CFGR PLLSAI2PEN LL_RCC_PLLSAI2_EnableDomain_SAI 03692 * @retval None 03693 */ 03694 __STATIC_INLINE void LL_RCC_PLLSAI2_EnableDomain_SAI(void) 03695 { 03696 SET_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2PEN); 03697 } 03698 03699 /** 03700 * @brief Disable PLLSAI2 output mapped on SAI domain clock 03701 * @note In order to save power, when of the PLLSAI2 is 03702 * not used, should be 0 03703 * @rmtoll PLLSAI2CFGR PLLSAI2PEN LL_RCC_PLLSAI2_DisableDomain_SAI 03704 * @retval None 03705 */ 03706 __STATIC_INLINE void LL_RCC_PLLSAI2_DisableDomain_SAI(void) 03707 { 03708 CLEAR_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2PEN); 03709 } 03710 03711 /** 03712 * @brief Enable PLLSAI2 output mapped on ADC domain clock 03713 * @rmtoll PLLSAI2CFGR PLLSAI2REN LL_RCC_PLLSAI2_EnableDomain_ADC 03714 * @retval None 03715 */ 03716 __STATIC_INLINE void LL_RCC_PLLSAI2_EnableDomain_ADC(void) 03717 { 03718 SET_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2REN); 03719 } 03720 03721 /** 03722 * @brief Disable PLLSAI2 output mapped on ADC domain clock 03723 * @note In order to save power, when of the PLLSAI2 is 03724 * not used, Main PLLSAI2 should be 0 03725 * @rmtoll PLLSAI2CFGR PLLSAI2REN LL_RCC_PLLSAI2_DisableDomain_ADC 03726 * @retval None 03727 */ 03728 __STATIC_INLINE void LL_RCC_PLLSAI2_DisableDomain_ADC(void) 03729 { 03730 CLEAR_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2REN); 03731 } 03732 03733 /** 03734 * @} 03735 */ 03736 03737 #endif /* RCC_PLLSAI2_SUPPORT */ 03738 /** @defgroup RCC_LL_EF_FLAG_Management FLAG Management 03739 * @{ 03740 */ 03741 03742 /** 03743 * @brief Clear LSI ready interrupt flag 03744 * @rmtoll CICR LSIRDYC LL_RCC_ClearFlag_LSIRDY 03745 * @retval None 03746 */ 03747 __STATIC_INLINE void LL_RCC_ClearFlag_LSIRDY(void) 03748 { 03749 SET_BIT(RCC->CICR, RCC_CICR_LSIRDYC); 03750 } 03751 03752 /** 03753 * @brief Clear LSE ready interrupt flag 03754 * @rmtoll CICR LSERDYC LL_RCC_ClearFlag_LSERDY 03755 * @retval None 03756 */ 03757 __STATIC_INLINE void LL_RCC_ClearFlag_LSERDY(void) 03758 { 03759 SET_BIT(RCC->CICR, RCC_CICR_LSERDYC); 03760 } 03761 03762 /** 03763 * @brief Clear MSI ready interrupt flag 03764 * @rmtoll CICR MSIRDYC LL_RCC_ClearFlag_MSIRDY 03765 * @retval None 03766 */ 03767 __STATIC_INLINE void LL_RCC_ClearFlag_MSIRDY(void) 03768 { 03769 SET_BIT(RCC->CICR, RCC_CICR_MSIRDYC); 03770 } 03771 03772 /** 03773 * @brief Clear HSI ready interrupt flag 03774 * @rmtoll CICR HSIRDYC LL_RCC_ClearFlag_HSIRDY 03775 * @retval None 03776 */ 03777 __STATIC_INLINE void LL_RCC_ClearFlag_HSIRDY(void) 03778 { 03779 SET_BIT(RCC->CICR, RCC_CICR_HSIRDYC); 03780 } 03781 03782 /** 03783 * @brief Clear HSE ready interrupt flag 03784 * @rmtoll CICR HSERDYC LL_RCC_ClearFlag_HSERDY 03785 * @retval None 03786 */ 03787 __STATIC_INLINE void LL_RCC_ClearFlag_HSERDY(void) 03788 { 03789 SET_BIT(RCC->CICR, RCC_CICR_HSERDYC); 03790 } 03791 03792 /** 03793 * @brief Clear PLL ready interrupt flag 03794 * @rmtoll CICR PLLRDYC LL_RCC_ClearFlag_PLLRDY 03795 * @retval None 03796 */ 03797 __STATIC_INLINE void LL_RCC_ClearFlag_PLLRDY(void) 03798 { 03799 SET_BIT(RCC->CICR, RCC_CICR_PLLRDYC); 03800 } 03801 03802 #if defined(RCC_HSI48_SUPPORT) 03803 /** 03804 * @brief Clear HSI48 ready interrupt flag 03805 * @rmtoll CICR HSI48RDYC LL_RCC_ClearFlag_HSI48RDY 03806 * @retval None 03807 */ 03808 __STATIC_INLINE void LL_RCC_ClearFlag_HSI48RDY(void) 03809 { 03810 SET_BIT(RCC->CICR, RCC_CICR_HSI48RDYC); 03811 } 03812 #endif /* RCC_HSI48_SUPPORT */ 03813 03814 /** 03815 * @brief Clear PLLSAI1 ready interrupt flag 03816 * @rmtoll CICR PLLSAI1RDYC LL_RCC_ClearFlag_PLLSAI1RDY 03817 * @retval None 03818 */ 03819 __STATIC_INLINE void LL_RCC_ClearFlag_PLLSAI1RDY(void) 03820 { 03821 SET_BIT(RCC->CICR, RCC_CICR_PLLSAI1RDYC); 03822 } 03823 03824 #if defined(RCC_PLLSAI2_SUPPORT) 03825 /** 03826 * @brief Clear PLLSAI1 ready interrupt flag 03827 * @rmtoll CICR PLLSAI2RDYC LL_RCC_ClearFlag_PLLSAI2RDY 03828 * @retval None 03829 */ 03830 __STATIC_INLINE void LL_RCC_ClearFlag_PLLSAI2RDY(void) 03831 { 03832 SET_BIT(RCC->CICR, RCC_CICR_PLLSAI2RDYC); 03833 } 03834 03835 #endif /* RCC_PLLSAI2_SUPPORT */ 03836 /** 03837 * @brief Clear Clock security system interrupt flag 03838 * @rmtoll CICR CSSC LL_RCC_ClearFlag_HSECSS 03839 * @retval None 03840 */ 03841 __STATIC_INLINE void LL_RCC_ClearFlag_HSECSS(void) 03842 { 03843 SET_BIT(RCC->CICR, RCC_CICR_CSSC); 03844 } 03845 03846 /** 03847 * @brief Clear LSE Clock security system interrupt flag 03848 * @rmtoll CICR LSECSSC LL_RCC_ClearFlag_LSECSS 03849 * @retval None 03850 */ 03851 __STATIC_INLINE void LL_RCC_ClearFlag_LSECSS(void) 03852 { 03853 SET_BIT(RCC->CICR, RCC_CICR_LSECSSC); 03854 } 03855 03856 /** 03857 * @brief Check if LSI ready interrupt occurred or not 03858 * @rmtoll CIFR LSIRDYF LL_RCC_IsActiveFlag_LSIRDY 03859 * @retval State of bit (1 or 0). 03860 */ 03861 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSIRDY(void) 03862 { 03863 return (READ_BIT(RCC->CIFR, RCC_CIFR_LSIRDYF) == (RCC_CIFR_LSIRDYF)); 03864 } 03865 03866 /** 03867 * @brief Check if LSE ready interrupt occurred or not 03868 * @rmtoll CIFR LSERDYF LL_RCC_IsActiveFlag_LSERDY 03869 * @retval State of bit (1 or 0). 03870 */ 03871 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSERDY(void) 03872 { 03873 return (READ_BIT(RCC->CIFR, RCC_CIFR_LSERDYF) == (RCC_CIFR_LSERDYF)); 03874 } 03875 03876 /** 03877 * @brief Check if MSI ready interrupt occurred or not 03878 * @rmtoll CIFR MSIRDYF LL_RCC_IsActiveFlag_MSIRDY 03879 * @retval State of bit (1 or 0). 03880 */ 03881 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_MSIRDY(void) 03882 { 03883 return (READ_BIT(RCC->CIFR, RCC_CIFR_MSIRDYF) == (RCC_CIFR_MSIRDYF)); 03884 } 03885 03886 /** 03887 * @brief Check if HSI ready interrupt occurred or not 03888 * @rmtoll CIFR HSIRDYF LL_RCC_IsActiveFlag_HSIRDY 03889 * @retval State of bit (1 or 0). 03890 */ 03891 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSIRDY(void) 03892 { 03893 return (READ_BIT(RCC->CIFR, RCC_CIFR_HSIRDYF) == (RCC_CIFR_HSIRDYF)); 03894 } 03895 03896 /** 03897 * @brief Check if HSE ready interrupt occurred or not 03898 * @rmtoll CIFR HSERDYF LL_RCC_IsActiveFlag_HSERDY 03899 * @retval State of bit (1 or 0). 03900 */ 03901 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSERDY(void) 03902 { 03903 return (READ_BIT(RCC->CIFR, RCC_CIFR_HSERDYF) == (RCC_CIFR_HSERDYF)); 03904 } 03905 03906 /** 03907 * @brief Check if PLL ready interrupt occurred or not 03908 * @rmtoll CIFR PLLRDYF LL_RCC_IsActiveFlag_PLLRDY 03909 * @retval State of bit (1 or 0). 03910 */ 03911 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLRDY(void) 03912 { 03913 return (READ_BIT(RCC->CIFR, RCC_CIFR_PLLRDYF) == (RCC_CIFR_PLLRDYF)); 03914 } 03915 03916 #if defined(RCC_HSI48_SUPPORT) 03917 /** 03918 * @brief Check if HSI48 ready interrupt occurred or not 03919 * @rmtoll CIR HSI48RDYF LL_RCC_IsActiveFlag_HSI48RDY 03920 * @retval State of bit (1 or 0). 03921 */ 03922 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSI48RDY(void) 03923 { 03924 return (READ_BIT(RCC->CIFR, RCC_CIFR_HSI48RDYF) == (RCC_CIFR_HSI48RDYF)); 03925 } 03926 #endif /* RCC_HSI48_SUPPORT */ 03927 03928 /** 03929 * @brief Check if PLLSAI1 ready interrupt occurred or not 03930 * @rmtoll CIFR PLLSAI1RDYF LL_RCC_IsActiveFlag_PLLSAI1RDY 03931 * @retval State of bit (1 or 0). 03932 */ 03933 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLSAI1RDY(void) 03934 { 03935 return (READ_BIT(RCC->CIFR, RCC_CIFR_PLLSAI1RDYF) == (RCC_CIFR_PLLSAI1RDYF)); 03936 } 03937 03938 #if defined(RCC_PLLSAI2_SUPPORT) 03939 /** 03940 * @brief Check if PLLSAI1 ready interrupt occurred or not 03941 * @rmtoll CIFR PLLSAI2RDYF LL_RCC_IsActiveFlag_PLLSAI2RDY 03942 * @retval State of bit (1 or 0). 03943 */ 03944 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLSAI2RDY(void) 03945 { 03946 return (READ_BIT(RCC->CIFR, RCC_CIFR_PLLSAI2RDYF) == (RCC_CIFR_PLLSAI2RDYF)); 03947 } 03948 03949 #endif /* RCC_PLLSAI2_SUPPORT */ 03950 /** 03951 * @brief Check if Clock security system interrupt occurred or not 03952 * @rmtoll CIFR CSSF LL_RCC_IsActiveFlag_HSECSS 03953 * @retval State of bit (1 or 0). 03954 */ 03955 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSECSS(void) 03956 { 03957 return (READ_BIT(RCC->CIFR, RCC_CIFR_CSSF) == (RCC_CIFR_CSSF)); 03958 } 03959 03960 /** 03961 * @brief Check if LSE Clock security system interrupt occurred or not 03962 * @rmtoll CIFR LSECSSF LL_RCC_IsActiveFlag_LSECSS 03963 * @retval State of bit (1 or 0). 03964 */ 03965 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSECSS(void) 03966 { 03967 return (READ_BIT(RCC->CIFR, RCC_CIFR_LSECSSF) == (RCC_CIFR_LSECSSF)); 03968 } 03969 03970 03971 /** 03972 * @brief Check if RCC flag FW reset is set or not. 03973 * @rmtoll CSR FWRSTF LL_RCC_IsActiveFlag_FWRST 03974 * @retval State of bit (1 or 0). 03975 */ 03976 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_FWRST(void) 03977 { 03978 return (READ_BIT(RCC->CSR, RCC_CSR_FWRSTF) == (RCC_CSR_FWRSTF)); 03979 } 03980 03981 /** 03982 * @brief Check if RCC flag Independent Watchdog reset is set or not. 03983 * @rmtoll CSR IWDGRSTF LL_RCC_IsActiveFlag_IWDGRST 03984 * @retval State of bit (1 or 0). 03985 */ 03986 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_IWDGRST(void) 03987 { 03988 return (READ_BIT(RCC->CSR, RCC_CSR_IWDGRSTF) == (RCC_CSR_IWDGRSTF)); 03989 } 03990 03991 /** 03992 * @brief Check if RCC flag Low Power reset is set or not. 03993 * @rmtoll CSR LPWRRSTF LL_RCC_IsActiveFlag_LPWRRST 03994 * @retval State of bit (1 or 0). 03995 */ 03996 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LPWRRST(void) 03997 { 03998 return (READ_BIT(RCC->CSR, RCC_CSR_LPWRRSTF) == (RCC_CSR_LPWRRSTF)); 03999 } 04000 04001 /** 04002 * @brief Check if RCC flag is set or not. 04003 * @rmtoll CSR OBLRSTF LL_RCC_IsActiveFlag_OBLRST 04004 * @retval State of bit (1 or 0). 04005 */ 04006 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_OBLRST(void) 04007 { 04008 return (READ_BIT(RCC->CSR, RCC_CSR_OBLRSTF) == (RCC_CSR_OBLRSTF)); 04009 } 04010 04011 /** 04012 * @brief Check if RCC flag Pin reset is set or not. 04013 * @rmtoll CSR PINRSTF LL_RCC_IsActiveFlag_PINRST 04014 * @retval State of bit (1 or 0). 04015 */ 04016 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PINRST(void) 04017 { 04018 return (READ_BIT(RCC->CSR, RCC_CSR_PINRSTF) == (RCC_CSR_PINRSTF)); 04019 } 04020 04021 /** 04022 * @brief Check if RCC flag Software reset is set or not. 04023 * @rmtoll CSR SFTRSTF LL_RCC_IsActiveFlag_SFTRST 04024 * @retval State of bit (1 or 0). 04025 */ 04026 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_SFTRST(void) 04027 { 04028 return (READ_BIT(RCC->CSR, RCC_CSR_SFTRSTF) == (RCC_CSR_SFTRSTF)); 04029 } 04030 04031 /** 04032 * @brief Check if RCC flag Window Watchdog reset is set or not. 04033 * @rmtoll CSR WWDGRSTF LL_RCC_IsActiveFlag_WWDGRST 04034 * @retval State of bit (1 or 0). 04035 */ 04036 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_WWDGRST(void) 04037 { 04038 return (READ_BIT(RCC->CSR, RCC_CSR_WWDGRSTF) == (RCC_CSR_WWDGRSTF)); 04039 } 04040 04041 /** 04042 * @brief Check if RCC flag BOR reset is set or not. 04043 * @rmtoll CSR BORRSTF LL_RCC_IsActiveFlag_BORRST 04044 * @retval State of bit (1 or 0). 04045 */ 04046 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_BORRST(void) 04047 { 04048 return (READ_BIT(RCC->CSR, RCC_CSR_BORRSTF) == (RCC_CSR_BORRSTF)); 04049 } 04050 04051 /** 04052 * @brief Set RMVF bit to clear the reset flags. 04053 * @rmtoll CSR RMVF LL_RCC_ClearResetFlags 04054 * @retval None 04055 */ 04056 __STATIC_INLINE void LL_RCC_ClearResetFlags(void) 04057 { 04058 SET_BIT(RCC->CSR, RCC_CSR_RMVF); 04059 } 04060 04061 /** 04062 * @} 04063 */ 04064 04065 /** @defgroup RCC_LL_EF_IT_Management IT Management 04066 * @{ 04067 */ 04068 04069 /** 04070 * @brief Enable LSI ready interrupt 04071 * @rmtoll CIER LSIRDYIE LL_RCC_EnableIT_LSIRDY 04072 * @retval None 04073 */ 04074 __STATIC_INLINE void LL_RCC_EnableIT_LSIRDY(void) 04075 { 04076 SET_BIT(RCC->CIER, RCC_CIER_LSIRDYIE); 04077 } 04078 04079 /** 04080 * @brief Enable LSE ready interrupt 04081 * @rmtoll CIER LSERDYIE LL_RCC_EnableIT_LSERDY 04082 * @retval None 04083 */ 04084 __STATIC_INLINE void LL_RCC_EnableIT_LSERDY(void) 04085 { 04086 SET_BIT(RCC->CIER, RCC_CIER_LSERDYIE); 04087 } 04088 04089 /** 04090 * @brief Enable MSI ready interrupt 04091 * @rmtoll CIER MSIRDYIE LL_RCC_EnableIT_MSIRDY 04092 * @retval None 04093 */ 04094 __STATIC_INLINE void LL_RCC_EnableIT_MSIRDY(void) 04095 { 04096 SET_BIT(RCC->CIER, RCC_CIER_MSIRDYIE); 04097 } 04098 04099 /** 04100 * @brief Enable HSI ready interrupt 04101 * @rmtoll CIER HSIRDYIE LL_RCC_EnableIT_HSIRDY 04102 * @retval None 04103 */ 04104 __STATIC_INLINE void LL_RCC_EnableIT_HSIRDY(void) 04105 { 04106 SET_BIT(RCC->CIER, RCC_CIER_HSIRDYIE); 04107 } 04108 04109 /** 04110 * @brief Enable HSE ready interrupt 04111 * @rmtoll CIER HSERDYIE LL_RCC_EnableIT_HSERDY 04112 * @retval None 04113 */ 04114 __STATIC_INLINE void LL_RCC_EnableIT_HSERDY(void) 04115 { 04116 SET_BIT(RCC->CIER, RCC_CIER_HSERDYIE); 04117 } 04118 04119 /** 04120 * @brief Enable PLL ready interrupt 04121 * @rmtoll CIER PLLRDYIE LL_RCC_EnableIT_PLLRDY 04122 * @retval None 04123 */ 04124 __STATIC_INLINE void LL_RCC_EnableIT_PLLRDY(void) 04125 { 04126 SET_BIT(RCC->CIER, RCC_CIER_PLLRDYIE); 04127 } 04128 04129 #if defined(RCC_HSI48_SUPPORT) 04130 /** 04131 * @brief Enable HSI48 ready interrupt 04132 * @rmtoll CIER HSI48RDYIE LL_RCC_EnableIT_HSI48RDY 04133 * @retval None 04134 */ 04135 __STATIC_INLINE void LL_RCC_EnableIT_HSI48RDY(void) 04136 { 04137 SET_BIT(RCC->CIER, RCC_CIER_HSI48RDYIE); 04138 } 04139 #endif /* RCC_HSI48_SUPPORT */ 04140 04141 /** 04142 * @brief Enable PLLSAI1 ready interrupt 04143 * @rmtoll CIER PLLSAI1RDYIE LL_RCC_EnableIT_PLLSAI1RDY 04144 * @retval None 04145 */ 04146 __STATIC_INLINE void LL_RCC_EnableIT_PLLSAI1RDY(void) 04147 { 04148 SET_BIT(RCC->CIER, RCC_CIER_PLLSAI1RDYIE); 04149 } 04150 04151 #if defined(RCC_PLLSAI2_SUPPORT) 04152 /** 04153 * @brief Enable PLLSAI2 ready interrupt 04154 * @rmtoll CIER PLLSAI2RDYIE LL_RCC_EnableIT_PLLSAI2RDY 04155 * @retval None 04156 */ 04157 __STATIC_INLINE void LL_RCC_EnableIT_PLLSAI2RDY(void) 04158 { 04159 SET_BIT(RCC->CIER, RCC_CIER_PLLSAI2RDYIE); 04160 } 04161 04162 #endif /* RCC_PLLSAI2_SUPPORT */ 04163 /** 04164 * @brief Enable LSE clock security system interrupt 04165 * @rmtoll CIER LSECSSIE LL_RCC_EnableIT_LSECSS 04166 * @retval None 04167 */ 04168 __STATIC_INLINE void LL_RCC_EnableIT_LSECSS(void) 04169 { 04170 SET_BIT(RCC->CIER, RCC_CIER_LSECSSIE); 04171 } 04172 04173 /** 04174 * @brief Disable LSI ready interrupt 04175 * @rmtoll CIER LSIRDYIE LL_RCC_DisableIT_LSIRDY 04176 * @retval None 04177 */ 04178 __STATIC_INLINE void LL_RCC_DisableIT_LSIRDY(void) 04179 { 04180 CLEAR_BIT(RCC->CIER, RCC_CIER_LSIRDYIE); 04181 } 04182 04183 /** 04184 * @brief Disable LSE ready interrupt 04185 * @rmtoll CIER LSERDYIE LL_RCC_DisableIT_LSERDY 04186 * @retval None 04187 */ 04188 __STATIC_INLINE void LL_RCC_DisableIT_LSERDY(void) 04189 { 04190 CLEAR_BIT(RCC->CIER, RCC_CIER_LSERDYIE); 04191 } 04192 04193 /** 04194 * @brief Disable MSI ready interrupt 04195 * @rmtoll CIER MSIRDYIE LL_RCC_DisableIT_MSIRDY 04196 * @retval None 04197 */ 04198 __STATIC_INLINE void LL_RCC_DisableIT_MSIRDY(void) 04199 { 04200 CLEAR_BIT(RCC->CIER, RCC_CIER_MSIRDYIE); 04201 } 04202 04203 /** 04204 * @brief Disable HSI ready interrupt 04205 * @rmtoll CIER HSIRDYIE LL_RCC_DisableIT_HSIRDY 04206 * @retval None 04207 */ 04208 __STATIC_INLINE void LL_RCC_DisableIT_HSIRDY(void) 04209 { 04210 CLEAR_BIT(RCC->CIER, RCC_CIER_HSIRDYIE); 04211 } 04212 04213 /** 04214 * @brief Disable HSE ready interrupt 04215 * @rmtoll CIER HSERDYIE LL_RCC_DisableIT_HSERDY 04216 * @retval None 04217 */ 04218 __STATIC_INLINE void LL_RCC_DisableIT_HSERDY(void) 04219 { 04220 CLEAR_BIT(RCC->CIER, RCC_CIER_HSERDYIE); 04221 } 04222 04223 /** 04224 * @brief Disable PLL ready interrupt 04225 * @rmtoll CIER PLLRDYIE LL_RCC_DisableIT_PLLRDY 04226 * @retval None 04227 */ 04228 __STATIC_INLINE void LL_RCC_DisableIT_PLLRDY(void) 04229 { 04230 CLEAR_BIT(RCC->CIER, RCC_CIER_PLLRDYIE); 04231 } 04232 04233 #if defined(RCC_HSI48_SUPPORT) 04234 /** 04235 * @brief Disable HSI48 ready interrupt 04236 * @rmtoll CIER HSI48RDYIE LL_RCC_DisableIT_HSI48RDY 04237 * @retval None 04238 */ 04239 __STATIC_INLINE void LL_RCC_DisableIT_HSI48RDY(void) 04240 { 04241 CLEAR_BIT(RCC->CIER, RCC_CIER_HSI48RDYIE); 04242 } 04243 #endif /* RCC_HSI48_SUPPORT */ 04244 04245 /** 04246 * @brief Disable PLLSAI1 ready interrupt 04247 * @rmtoll CIER PLLSAI1RDYIE LL_RCC_DisableIT_PLLSAI1RDY 04248 * @retval None 04249 */ 04250 __STATIC_INLINE void LL_RCC_DisableIT_PLLSAI1RDY(void) 04251 { 04252 CLEAR_BIT(RCC->CIER, RCC_CIER_PLLSAI1RDYIE); 04253 } 04254 04255 #if defined(RCC_PLLSAI2_SUPPORT) 04256 /** 04257 * @brief Disable PLLSAI2 ready interrupt 04258 * @rmtoll CIER PLLSAI2RDYIE LL_RCC_DisableIT_PLLSAI2RDY 04259 * @retval None 04260 */ 04261 __STATIC_INLINE void LL_RCC_DisableIT_PLLSAI2RDY(void) 04262 { 04263 CLEAR_BIT(RCC->CIER, RCC_CIER_PLLSAI2RDYIE); 04264 } 04265 04266 #endif /* RCC_PLLSAI2_SUPPORT */ 04267 /** 04268 * @brief Disable LSE clock security system interrupt 04269 * @rmtoll CIER LSECSSIE LL_RCC_DisableIT_LSECSS 04270 * @retval None 04271 */ 04272 __STATIC_INLINE void LL_RCC_DisableIT_LSECSS(void) 04273 { 04274 CLEAR_BIT(RCC->CIER, RCC_CIER_LSECSSIE); 04275 } 04276 04277 /** 04278 * @brief Checks if LSI ready interrupt source is enabled or disabled. 04279 * @rmtoll CIER LSIRDYIE LL_RCC_IsEnabledIT_LSIRDY 04280 * @retval State of bit (1 or 0). 04281 */ 04282 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSIRDY(void) 04283 { 04284 return (READ_BIT(RCC->CIER, RCC_CIER_LSIRDYIE) == (RCC_CIER_LSIRDYIE)); 04285 } 04286 04287 /** 04288 * @brief Checks if LSE ready interrupt source is enabled or disabled. 04289 * @rmtoll CIER LSERDYIE LL_RCC_IsEnabledIT_LSERDY 04290 * @retval State of bit (1 or 0). 04291 */ 04292 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSERDY(void) 04293 { 04294 return (READ_BIT(RCC->CIER, RCC_CIER_LSERDYIE) == (RCC_CIER_LSERDYIE)); 04295 } 04296 04297 /** 04298 * @brief Checks if MSI ready interrupt source is enabled or disabled. 04299 * @rmtoll CIER MSIRDYIE LL_RCC_IsEnabledIT_MSIRDY 04300 * @retval State of bit (1 or 0). 04301 */ 04302 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_MSIRDY(void) 04303 { 04304 return (READ_BIT(RCC->CIER, RCC_CIER_MSIRDYIE) == (RCC_CIER_MSIRDYIE)); 04305 } 04306 04307 /** 04308 * @brief Checks if HSI ready interrupt source is enabled or disabled. 04309 * @rmtoll CIER HSIRDYIE LL_RCC_IsEnabledIT_HSIRDY 04310 * @retval State of bit (1 or 0). 04311 */ 04312 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSIRDY(void) 04313 { 04314 return (READ_BIT(RCC->CIER, RCC_CIER_HSIRDYIE) == (RCC_CIER_HSIRDYIE)); 04315 } 04316 04317 /** 04318 * @brief Checks if HSE ready interrupt source is enabled or disabled. 04319 * @rmtoll CIER HSERDYIE LL_RCC_IsEnabledIT_HSERDY 04320 * @retval State of bit (1 or 0). 04321 */ 04322 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSERDY(void) 04323 { 04324 return (READ_BIT(RCC->CIER, RCC_CIER_HSERDYIE) == (RCC_CIER_HSERDYIE)); 04325 } 04326 04327 /** 04328 * @brief Checks if PLL ready interrupt source is enabled or disabled. 04329 * @rmtoll CIER PLLRDYIE LL_RCC_IsEnabledIT_PLLRDY 04330 * @retval State of bit (1 or 0). 04331 */ 04332 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLRDY(void) 04333 { 04334 return (READ_BIT(RCC->CIER, RCC_CIER_PLLRDYIE) == (RCC_CIER_PLLRDYIE)); 04335 } 04336 04337 #if defined(RCC_HSI48_SUPPORT) 04338 /** 04339 * @brief Checks if HSI48 ready interrupt source is enabled or disabled. 04340 * @rmtoll CIER HSI48RDYIE LL_RCC_IsEnabledIT_HSI48RDY 04341 * @retval State of bit (1 or 0). 04342 */ 04343 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSI48RDY(void) 04344 { 04345 return (READ_BIT(RCC->CIER, RCC_CIER_HSI48RDYIE) == (RCC_CIER_HSI48RDYIE)); 04346 } 04347 #endif /* RCC_HSI48_SUPPORT */ 04348 04349 /** 04350 * @brief Checks if PLLSAI1 ready interrupt source is enabled or disabled. 04351 * @rmtoll CIER PLLSAI1RDYIE LL_RCC_IsEnabledIT_PLLSAI1RDY 04352 * @retval State of bit (1 or 0). 04353 */ 04354 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLSAI1RDY(void) 04355 { 04356 return (READ_BIT(RCC->CIER, RCC_CIER_PLLSAI1RDYIE) == (RCC_CIER_PLLSAI1RDYIE)); 04357 } 04358 04359 #if defined(RCC_PLLSAI2_SUPPORT) 04360 /** 04361 * @brief Checks if PLLSAI2 ready interrupt source is enabled or disabled. 04362 * @rmtoll CIER PLLSAI2RDYIE LL_RCC_IsEnabledIT_PLLSAI2RDY 04363 * @retval State of bit (1 or 0). 04364 */ 04365 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLSAI2RDY(void) 04366 { 04367 return (READ_BIT(RCC->CIER, RCC_CIER_PLLSAI2RDYIE) == (RCC_CIER_PLLSAI2RDYIE)); 04368 } 04369 04370 #endif /* RCC_PLLSAI2_SUPPORT */ 04371 /** 04372 * @brief Checks if LSECSS interrupt source is enabled or disabled. 04373 * @rmtoll CIER LSECSSIE LL_RCC_IsEnabledIT_LSECSS 04374 * @retval State of bit (1 or 0). 04375 */ 04376 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSECSS(void) 04377 { 04378 return (READ_BIT(RCC->CIER, RCC_CIER_LSECSSIE) == (RCC_CIER_LSECSSIE)); 04379 } 04380 04381 /** 04382 * @} 04383 */ 04384 04385 #if defined(USE_FULL_LL_DRIVER) 04386 /** @defgroup RCC_LL_EF_Init De-initialization function 04387 * @{ 04388 */ 04389 ErrorStatus LL_RCC_DeInit(void); 04390 /** 04391 * @} 04392 */ 04393 04394 /** @defgroup RCC_LL_EF_Get_Freq Get system and peripherals clocks frequency functions 04395 * @{ 04396 */ 04397 void LL_RCC_GetSystemClocksFreq(LL_RCC_ClocksTypeDef *RCC_Clocks); 04398 uint32_t LL_RCC_GetUSARTClockFreq(uint32_t USARTxSource); 04399 #if defined(UART4) || defined(UART5) 04400 uint32_t LL_RCC_GetUARTClockFreq(uint32_t UARTxSource); 04401 #endif /* UART4 || UART5 */ 04402 uint32_t LL_RCC_GetI2CClockFreq(uint32_t I2CxSource); 04403 uint32_t LL_RCC_GetLPUARTClockFreq(uint32_t LPUARTxSource); 04404 uint32_t LL_RCC_GetLPTIMClockFreq(uint32_t LPTIMxSource); 04405 uint32_t LL_RCC_GetSAIClockFreq(uint32_t SAIxSource); 04406 uint32_t LL_RCC_GetSDMMCClockFreq(uint32_t SDMMCxSource); 04407 uint32_t LL_RCC_GetRNGClockFreq(uint32_t RNGxSource); 04408 #if defined(USB_OTG_FS) || defined(USB) 04409 uint32_t LL_RCC_GetUSBClockFreq(uint32_t USBxSource); 04410 #endif /* USB_OTG_FS || USB */ 04411 uint32_t LL_RCC_GetADCClockFreq(uint32_t ADCxSource); 04412 uint32_t LL_RCC_GetSWPMIClockFreq(uint32_t SWPMIxSource); 04413 #if defined(DFSDM1_Channel0) 04414 uint32_t LL_RCC_GetDFSDMClockFreq(uint32_t DFSDMxSource); 04415 #endif /* DFSDM1_Channel0 */ 04416 /** 04417 * @} 04418 */ 04419 #endif /* USE_FULL_LL_DRIVER */ 04420 04421 /** 04422 * @} 04423 */ 04424 04425 /** 04426 * @} 04427 */ 04428 04429 #endif /* defined(RCC) */ 04430 04431 /** 04432 * @} 04433 */ 04434 04435 #ifdef __cplusplus 04436 } 04437 #endif 04438 04439 #endif /* __STM32L4xx_LL_RCC_H */ 04440 04441 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Generated on Tue Jul 12 2022 18:10:42 by
