L4 HAL Drivers

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers stm32l4xx_ll_rcc.h Source File

stm32l4xx_ll_rcc.h

Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32l4xx_ll_rcc.h
00004   * @author  MCD Application Team
00005   * @version V1.1.0
00006   * @date    16-September-2015
00007   * @brief   Header file of RCC LL module.
00008   ******************************************************************************
00009   * @attention
00010   *
00011   * <h2><center>&copy; COPYRIGHT(c) 2015 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 
00076 /* Defines used for the bit position in the register and perform offsets*/
00077 #define RCC_POSITION_HPRE       (uint32_t)POSITION_VAL(RCC_CFGR_HPRE)
00078 #define RCC_POSITION_PPRE1      (uint32_t)POSITION_VAL(RCC_CFGR_PPRE1)
00079 #define RCC_POSITION_PPRE2      (uint32_t)POSITION_VAL(RCC_CFGR_PPRE2)
00080 #define RCC_POSITION_HSICAL     (uint32_t)POSITION_VAL(RCC_ICSCR_HSICAL)
00081 #define RCC_POSITION_HSITRIM    (uint32_t)POSITION_VAL(RCC_ICSCR_HSITRIM)
00082 #define RCC_POSITION_MSICAL     (uint32_t)POSITION_VAL(RCC_ICSCR_MSICAL)
00083 #define RCC_POSITION_MSITRIM    (uint32_t)POSITION_VAL(RCC_ICSCR_MSITRIM)
00084 #define RCC_POSITION_PLLN       (uint32_t)POSITION_VAL(RCC_PLLCFGR_PLLN)
00085 #define RCC_POSITION_PLLSAI1N   (uint32_t)POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1N)
00086 #define RCC_POSITION_PLLSAI2N   (uint32_t)POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2N)
00087 
00088 /**
00089   * @}
00090   */
00091 
00092 /* Private macros ------------------------------------------------------------*/
00093 
00094 /* Exported types ------------------------------------------------------------*/
00095 /* Exported constants --------------------------------------------------------*/
00096 /** @defgroup RCC_LL_Exported_Constants RCC Exported Constants
00097   * @{
00098   */
00099 
00100 /** @defgroup RCC_LL_EC_CLEAR_FLAG Clear Flags Defines
00101   * @brief    Flags defines which can be used with LL_RCC_WriteReg function
00102   * @{
00103   */
00104 #define LL_RCC_CICR_LSIRDYC                RCC_CICR_LSIRDYC
00105 #define LL_RCC_CICR_LSERDYC                RCC_CICR_LSERDYC
00106 #define LL_RCC_CICR_MSIRDYC                RCC_CICR_MSIRDYC
00107 #define LL_RCC_CICR_HSIRDYC                RCC_CICR_HSIRDYC
00108 #define LL_RCC_CICR_HSERDYC                RCC_CICR_HSERDYC
00109 #define LL_RCC_CICR_PLLRDYC                RCC_CICR_PLLRDYC
00110 #define LL_RCC_CICR_PLLSAI1RDYC            RCC_CICR_PLLSAI1RDYC
00111 #define LL_RCC_CICR_PLLSAI2RDYC            RCC_CICR_PLLSAI2RDYC
00112 #define LL_RCC_CICR_CSSC                   RCC_CICR_CSSC
00113 #define LL_RCC_CICR_LSECSSC                RCC_CICR_LSECSSC
00114 /**
00115   * @}
00116   */
00117 
00118 /** @defgroup RCC_LL_EC_GET_FLAG Get Flags Defines
00119   * @brief    Flags defines which can be used with LL_RCC_ReadReg function
00120   * @{
00121   */
00122 #define LL_RCC_CIFR_LSIRDYF                RCC_CIFR_LSIRDYF
00123 #define LL_RCC_CIFR_LSERDYF                RCC_CIFR_LSERDYF
00124 #define LL_RCC_CIFR_MSIRDYF                RCC_CIFR_MSIRDYF
00125 #define LL_RCC_CIFR_HSIRDYF                RCC_CIFR_HSIRDYF
00126 #define LL_RCC_CIFR_HSERDYF                RCC_CIFR_HSERDYF
00127 #define LL_RCC_CIFR_PLLRDYF                RCC_CIFR_PLLRDYF
00128 #define LL_RCC_CIFR_PLLSAI1RDYF            RCC_CIFR_PLLSAI1RDYF
00129 #define LL_RCC_CIFR_PLLSAI2RDYF            RCC_CIFR_PLLSAI2RDYF
00130 #define LL_RCC_CIFR_CSSF                   RCC_CIFR_CSSF
00131 #define LL_RCC_CIFR_LSECSSF                RCC_CIFR_LSECSSF
00132 #define LL_RCC_CSR_FWRSTF                  RCC_CSR_FWRSTF
00133 #define LL_RCC_CSR_IWDGRSTF                RCC_CSR_IWDGRSTF
00134 #define LL_RCC_CSR_LPWRRSTF                RCC_CSR_LPWRRSTF
00135 #define LL_RCC_CSR_OBLRSTF                 RCC_CSR_OBLRSTF
00136 #define LL_RCC_CSR_PINRSTF                 RCC_CSR_PINRSTF
00137 #define LL_RCC_CSR_SFTRSTF                 RCC_CSR_SFTRSTF
00138 #define LL_RCC_CSR_WWDGRSTF                RCC_CSR_WWDGRSTF
00139 #define LL_RCC_CSR_BORRSTF                 RCC_CSR_BORRSTF
00140 /**
00141   * @}
00142   */
00143 
00144 /** @defgroup RCC_LL_EC_IT IT Defines
00145   * @brief    IT defines which can be used with LL_RCC_ReadReg and  LL_RCC_WriteReg functions
00146   * @{
00147   */
00148 #define LL_RCC_CIER_LSIRDYIE               RCC_CIER_LSIRDYIE
00149 #define LL_RCC_CIER_LSERDYIE               RCC_CIER_LSERDYIE
00150 #define LL_RCC_CIER_MSIRDYIE               RCC_CIER_MSIRDYIE
00151 #define LL_RCC_CIER_HSIRDYIE               RCC_CIER_HSIRDYIE
00152 #define LL_RCC_CIER_HSERDYIE               RCC_CIER_HSERDYIE
00153 #define LL_RCC_CIER_PLLRDYIE               RCC_CIER_PLLRDYIE
00154 #define LL_RCC_CIER_PLLSAI1RDYIE           RCC_CIER_PLLSAI1RDYIE
00155 #define LL_RCC_CIER_PLLSAI2RDYIE           RCC_CIER_PLLSAI2RDYIE
00156 #define LL_RCC_CIER_LSECSSIE               RCC_CIER_LSECSSIE
00157 /**
00158   * @}
00159   */
00160 
00161 /** @defgroup RCC_LL_EC_LSEDRIVE  LSE oscillator drive capability
00162   * @{
00163   */
00164 #define LL_RCC_LSEDRIVE_LOW                ((uint32_t)0x00000000)  /*!< Xtal mode lower driving capability */
00165 #define LL_RCC_LSEDRIVE_MEDIUMLOW          RCC_BDCR_LSEDRV_0       /*!< Xtal mode medium low driving capability */
00166 #define LL_RCC_LSEDRIVE_MEDIUMHIGH         RCC_BDCR_LSEDRV_1       /*!< Xtal mode medium high driving capability */
00167 #define LL_RCC_LSEDRIVE_HIGH               RCC_BDCR_LSEDRV         /*!< Xtal mode higher driving capability */
00168 /**
00169   * @}
00170   */
00171 
00172 /** @defgroup RCC_LL_EC_MSIRANGE  MSI clock ranges
00173   * @{
00174   */
00175 #define LL_RCC_MSIRANGE_0                  RCC_CR_MSIRANGE_0  /*!< MSI = 100 KHz  */
00176 #define LL_RCC_MSIRANGE_1                  RCC_CR_MSIRANGE_1  /*!< MSI = 200 KHz  */
00177 #define LL_RCC_MSIRANGE_2                  RCC_CR_MSIRANGE_2  /*!< MSI = 400 KHz  */
00178 #define LL_RCC_MSIRANGE_3                  RCC_CR_MSIRANGE_3  /*!< MSI = 800 KHz  */
00179 #define LL_RCC_MSIRANGE_4                  RCC_CR_MSIRANGE_4  /*!< MSI = 1 MHz    */
00180 #define LL_RCC_MSIRANGE_5                  RCC_CR_MSIRANGE_5  /*!< MSI = 2 MHz    */
00181 #define LL_RCC_MSIRANGE_6                  RCC_CR_MSIRANGE_6  /*!< MSI = 4 MHz    */
00182 #define LL_RCC_MSIRANGE_7                  RCC_CR_MSIRANGE_7  /*!< MSI = 8 MHz    */
00183 #define LL_RCC_MSIRANGE_8                  RCC_CR_MSIRANGE_8  /*!< MSI = 16 MHz   */
00184 #define LL_RCC_MSIRANGE_9                  RCC_CR_MSIRANGE_9  /*!< MSI = 24 MHz   */
00185 #define LL_RCC_MSIRANGE_10                 RCC_CR_MSIRANGE_10 /*!< MSI = 32 MHz   */
00186 #define LL_RCC_MSIRANGE_11                 RCC_CR_MSIRANGE_11 /*!< MSI = 48 MHz   */
00187 /**
00188   * @}
00189   */
00190 
00191 /** @defgroup RCC_LL_EC_MSISRANGE  MSI range after Standby mode
00192   * @{
00193   */
00194 #define LL_RCC_MSISRANGE_4                 RCC_CSR_MSISRANGE_1  /*!< MSI = 1 MHz    */
00195 #define LL_RCC_MSISRANGE_5                 RCC_CSR_MSISRANGE_2  /*!< MSI = 2 MHz    */
00196 #define LL_RCC_MSISRANGE_6                 RCC_CSR_MSISRANGE_4  /*!< MSI = 4 MHz    */
00197 #define LL_RCC_MSISRANGE_7                 RCC_CSR_MSISRANGE_8  /*!< MSI = 8 MHz    */
00198 /**
00199   * @}
00200   */
00201 
00202 /** @defgroup RCC_LL_EC_LSCO_CLKSOURCE  LSCO Selection
00203   * @{
00204   */
00205 #define LL_RCC_LSCO_CLKSOURCE_LSI          (uint32_t)0x00000000  /*!< LSI selection for low speed clock  */
00206 #define LL_RCC_LSCO_CLKSOURCE_LSE          RCC_BDCR_LSCOSEL      /*!< LSE selection for low speed clock  */
00207 /**
00208   * @}
00209   */
00210 
00211 /** @defgroup RCC_LL_EC_SYS_CLKSOURCE  System clock switch
00212   * @{
00213   */
00214 #define LL_RCC_SYS_CLKSOURCE_MSI           RCC_CFGR_SW_MSI    /*!< MSI selection as system clock */
00215 #define LL_RCC_SYS_CLKSOURCE_HSI           RCC_CFGR_SW_HSI    /*!< HSI selection as system clock */
00216 #define LL_RCC_SYS_CLKSOURCE_HSE           RCC_CFGR_SW_HSE    /*!< HSE selection as system clock */
00217 #define LL_RCC_SYS_CLKSOURCE_PLL           RCC_CFGR_SW_PLL    /*!< PLL selection as system clock */
00218 /**
00219   * @}
00220   */
00221 
00222 /** @defgroup RCC_LL_EC_SYS_CLKSOURCE_STATUS  System clock switch status
00223   * @{
00224   */
00225 #define LL_RCC_SYS_CLKSOURCE_STATUS_MSI    RCC_CFGR_SWS_MSI   /*!< MSI used as system clock */
00226 #define LL_RCC_SYS_CLKSOURCE_STATUS_HSI    RCC_CFGR_SWS_HSI   /*!< HSI used as system clock */
00227 #define LL_RCC_SYS_CLKSOURCE_STATUS_HSE    RCC_CFGR_SWS_HSE   /*!< HSE used as system clock */
00228 #define LL_RCC_SYS_CLKSOURCE_STATUS_PLL    RCC_CFGR_SWS_PLL   /*!< PLL used as system clock */
00229 /**
00230   * @}
00231   */
00232 
00233 /** @defgroup RCC_LL_EC_SYSCLK_DIV  AHB prescaler
00234   * @{
00235   */
00236 #define LL_RCC_SYSCLK_DIV_1                RCC_CFGR_HPRE_DIV1   /*!< SYSCLK not divided */
00237 #define LL_RCC_SYSCLK_DIV_2                RCC_CFGR_HPRE_DIV2   /*!< SYSCLK divided by 2 */
00238 #define LL_RCC_SYSCLK_DIV_4                RCC_CFGR_HPRE_DIV4   /*!< SYSCLK divided by 4 */
00239 #define LL_RCC_SYSCLK_DIV_8                RCC_CFGR_HPRE_DIV8   /*!< SYSCLK divided by 8 */
00240 #define LL_RCC_SYSCLK_DIV_16               RCC_CFGR_HPRE_DIV16  /*!< SYSCLK divided by 16 */
00241 #define LL_RCC_SYSCLK_DIV_64               RCC_CFGR_HPRE_DIV64  /*!< SYSCLK divided by 64 */
00242 #define LL_RCC_SYSCLK_DIV_128              RCC_CFGR_HPRE_DIV128 /*!< SYSCLK divided by 128 */
00243 #define LL_RCC_SYSCLK_DIV_256              RCC_CFGR_HPRE_DIV256 /*!< SYSCLK divided by 256 */
00244 #define LL_RCC_SYSCLK_DIV_512              RCC_CFGR_HPRE_DIV512 /*!< SYSCLK divided by 512 */
00245 /**
00246   * @}
00247   */
00248 
00249 /** @defgroup RCC_LL_EC_APB1_DIV  APB low-speed prescaler (APB1)
00250   * @{
00251   */
00252 #define LL_RCC_APB1_DIV_1                  RCC_CFGR_PPRE1_DIV1  /*!< HCLK not divided */
00253 #define LL_RCC_APB1_DIV_2                  RCC_CFGR_PPRE1_DIV2  /*!< HCLK divided by 2 */
00254 #define LL_RCC_APB1_DIV_4                  RCC_CFGR_PPRE1_DIV4  /*!< HCLK divided by 4 */
00255 #define LL_RCC_APB1_DIV_8                  RCC_CFGR_PPRE1_DIV8  /*!< HCLK divided by 8 */
00256 #define LL_RCC_APB1_DIV_16                 RCC_CFGR_PPRE1_DIV16 /*!< HCLK divided by 16 */
00257 /**
00258   * @}
00259   */
00260 
00261 /** @defgroup RCC_LL_EC_APB2_DIV  APB high-speed prescaler (APB2)
00262   * @{
00263   */
00264 #define LL_RCC_APB2_DIV_1                  RCC_CFGR_PPRE2_DIV1  /*!< HCLK not divided */
00265 #define LL_RCC_APB2_DIV_2                  RCC_CFGR_PPRE2_DIV2  /*!< HCLK divided by 2 */
00266 #define LL_RCC_APB2_DIV_4                  RCC_CFGR_PPRE2_DIV4  /*!< HCLK divided by 4 */
00267 #define LL_RCC_APB2_DIV_8                  RCC_CFGR_PPRE2_DIV8  /*!< HCLK divided by 8 */
00268 #define LL_RCC_APB2_DIV_16                 RCC_CFGR_PPRE2_DIV16 /*!< HCLK divided by 16 */
00269 /**
00270   * @}
00271   */
00272 
00273 /** @defgroup RCC_LL_EC_STOP_WAKEUPCLOCK  Wakeup from Stop and CSS backup clock selection
00274   * @{
00275   */
00276 #define LL_RCC_STOP_WAKEUPCLOCK_MSI        ((uint32_t)0x00000000)  /*!< MSI selection after wake-up from STOP */
00277 #define LL_RCC_STOP_WAKEUPCLOCK_HSI        RCC_CFGR_STOPWUCK       /*!< HSI selection after wake-up from STOP */
00278 /**
00279   * @}
00280   */
00281 
00282 /** @defgroup RCC_LL_EC_MCO1SOURCE  MCO1 SOURCE selection
00283   * @{
00284   */
00285 #define LL_RCC_MCO1SOURCE_NOCLOCK          ((uint32_t)0x00000000)                 /*!< MCO output disabled, no clock on MCO */
00286 #define LL_RCC_MCO1SOURCE_SYSCLK           RCC_CFGR_MCOSEL_0                      /*!< SYSCLK selection as MCO1 source */
00287 #define LL_RCC_MCO1SOURCE_MSI              RCC_CFGR_MCOSEL_1                      /*!< MSI selection as MCO1 source */
00288 #define LL_RCC_MCO1SOURCE_HSI              (RCC_CFGR_MCOSEL_0| RCC_CFGR_MCOSEL_1) /*!< HSI selection as MCO1 source */
00289 #define LL_RCC_MCO1SOURCE_HSE              RCC_CFGR_MCOSEL_2                      /*!< HSE selection as MCO1 source */
00290 #define LL_RCC_MCO1SOURCE_PLLCLK           (RCC_CFGR_MCOSEL_0|RCC_CFGR_MCOSEL_2)  /*!< PLLCLK selection as MCO1 source */
00291 #define LL_RCC_MCO1SOURCE_LSI              (RCC_CFGR_MCOSEL_1|RCC_CFGR_MCOSEL_2)  /*!< LSI selection as MCO1 source */
00292 #define LL_RCC_MCO1SOURCE_LSE              RCC_CFGR_MCOSEL                        /*!< LSE selection as MCO1 source */
00293 /**
00294   * @}
00295   */
00296 
00297 /** @defgroup RCC_LL_EC_MCO1_DIV  MCO1 prescaler
00298   * @{
00299   */
00300 #define LL_RCC_MCO1_DIV_1                  RCC_CFGR_MCO_PRE_1       /*!< MCO not divided */
00301 #define LL_RCC_MCO1_DIV_2                  RCC_CFGR_MCO_PRE_2       /*!< MCO divided by 2 */
00302 #define LL_RCC_MCO1_DIV_4                  RCC_CFGR_MCO_PRE_4       /*!< MCO divided by 4 */
00303 #define LL_RCC_MCO1_DIV_8                  RCC_CFGR_MCO_PRE_8       /*!< MCO divided by 8 */
00304 #define LL_RCC_MCO1_DIV_16                 RCC_CFGR_MCO_PRE_16      /*!< MCO divided by 16 */
00305 /**
00306   * @}
00307   */
00308 
00309 /** @defgroup RCC_LL_EC_USART1_CLKSOURCE  Peripheral USART clock source selection
00310   * @{
00311   */
00312 #define LL_RCC_USART1_CLKSOURCE_PCLK2      (uint32_t)((RCC_CCIPR_USART1SEL << 16) | 0x00000000)
00313 #define LL_RCC_USART1_CLKSOURCE_SYSCLK     (uint32_t)((RCC_CCIPR_USART1SEL << 16) | RCC_CCIPR_USART1SEL_0)
00314 #define LL_RCC_USART1_CLKSOURCE_HSI        (uint32_t)((RCC_CCIPR_USART1SEL << 16) | RCC_CCIPR_USART1SEL_1)
00315 #define LL_RCC_USART1_CLKSOURCE_LSE        (uint32_t)((RCC_CCIPR_USART1SEL << 16) | RCC_CCIPR_USART1SEL)
00316 #define LL_RCC_USART2_CLKSOURCE_PCLK1      (uint32_t)((RCC_CCIPR_USART2SEL << 16) | 0x00000000)
00317 #define LL_RCC_USART2_CLKSOURCE_SYSCLK     (uint32_t)((RCC_CCIPR_USART2SEL << 16) | RCC_CCIPR_USART2SEL_0)
00318 #define LL_RCC_USART2_CLKSOURCE_HSI        (uint32_t)((RCC_CCIPR_USART2SEL << 16) | RCC_CCIPR_USART2SEL_1)
00319 #define LL_RCC_USART2_CLKSOURCE_LSE        (uint32_t)((RCC_CCIPR_USART2SEL << 16) | RCC_CCIPR_USART2SEL)
00320 #define LL_RCC_USART3_CLKSOURCE_PCLK1      (uint32_t)((RCC_CCIPR_USART3SEL << 16) | 0x00000000)
00321 #define LL_RCC_USART3_CLKSOURCE_SYSCLK     (uint32_t)((RCC_CCIPR_USART3SEL << 16) | RCC_CCIPR_USART3SEL_0)
00322 #define LL_RCC_USART3_CLKSOURCE_HSI        (uint32_t)((RCC_CCIPR_USART3SEL << 16) | RCC_CCIPR_USART3SEL_1)
00323 #define LL_RCC_USART3_CLKSOURCE_LSE        (uint32_t)((RCC_CCIPR_USART3SEL << 16) | RCC_CCIPR_USART3SEL)
00324 /**
00325   * @}
00326   */
00327 
00328 /** @defgroup RCC_LL_EC_UART4_CLKSOURCE  Peripheral UART clock source selection
00329   * @{
00330   */
00331 #define LL_RCC_UART4_CLKSOURCE_PCLK1       (uint32_t)((RCC_CCIPR_UART4SEL << 16) | 0x00000000)
00332 #define LL_RCC_UART4_CLKSOURCE_SYSCLK      (uint32_t)((RCC_CCIPR_UART4SEL << 16) | RCC_CCIPR_UART4SEL_0)
00333 #define LL_RCC_UART4_CLKSOURCE_HSI         (uint32_t)((RCC_CCIPR_UART4SEL << 16) | RCC_CCIPR_UART4SEL_1)
00334 #define LL_RCC_UART4_CLKSOURCE_LSE         (uint32_t)((RCC_CCIPR_UART4SEL << 16) | RCC_CCIPR_UART4SEL)
00335 #define LL_RCC_UART5_CLKSOURCE_PCLK1       (uint32_t)((RCC_CCIPR_UART5SEL << 16) | 0x00000000)
00336 #define LL_RCC_UART5_CLKSOURCE_SYSCLK      (uint32_t)((RCC_CCIPR_UART5SEL << 16) | RCC_CCIPR_UART5SEL_0)
00337 #define LL_RCC_UART5_CLKSOURCE_HSI         (uint32_t)((RCC_CCIPR_UART5SEL << 16) | RCC_CCIPR_UART5SEL_1)
00338 #define LL_RCC_UART5_CLKSOURCE_LSE         (uint32_t)((RCC_CCIPR_UART5SEL << 16) | RCC_CCIPR_UART5SEL)
00339 /**
00340   * @}
00341   */
00342 
00343 /** @defgroup RCC_LL_EC_LPUART1_CLKSOURCE  Peripheral LPUART clock source selection
00344   * @{
00345   */
00346 #define LL_RCC_LPUART1_CLKSOURCE_PCLK1     (uint32_t)0x00000000
00347 #define LL_RCC_LPUART1_CLKSOURCE_SYSCLK    RCC_CCIPR_LPUART1SEL_0
00348 #define LL_RCC_LPUART1_CLKSOURCE_HSI       RCC_CCIPR_LPUART1SEL_1
00349 #define LL_RCC_LPUART1_CLKSOURCE_LSE       RCC_CCIPR_LPUART1SEL
00350 /**
00351   * @}
00352   */
00353 
00354 /** @defgroup RCC_LL_EC_I2C1_CLKSOURCE  Peripheral I2C clock source selection
00355   * @{
00356   */
00357 #define LL_RCC_I2C1_CLKSOURCE_PCLK1        (uint32_t)((RCC_CCIPR_I2C1SEL << 4) | (0x00000000 >> 4))
00358 #define LL_RCC_I2C1_CLKSOURCE_SYSCLK       (uint32_t)((RCC_CCIPR_I2C1SEL << 4) | (RCC_CCIPR_I2C1SEL_0 >> 4))
00359 #define LL_RCC_I2C1_CLKSOURCE_HSI          (uint32_t)((RCC_CCIPR_I2C1SEL << 4) | (RCC_CCIPR_I2C1SEL_1 >> 4))
00360 #define LL_RCC_I2C2_CLKSOURCE_PCLK1        (uint32_t)((RCC_CCIPR_I2C2SEL << 4) | (0x00000000 >> 4))
00361 #define LL_RCC_I2C2_CLKSOURCE_SYSCLK       (uint32_t)((RCC_CCIPR_I2C2SEL << 4) | (RCC_CCIPR_I2C2SEL_0 >> 4))
00362 #define LL_RCC_I2C2_CLKSOURCE_HSI          (uint32_t)((RCC_CCIPR_I2C2SEL << 4) | (RCC_CCIPR_I2C2SEL_1 >> 4))
00363 #define LL_RCC_I2C3_CLKSOURCE_PCLK1        (uint32_t)((RCC_CCIPR_I2C3SEL << 4) | (0x00000000 >> 4))
00364 #define LL_RCC_I2C3_CLKSOURCE_SYSCLK       (uint32_t)((RCC_CCIPR_I2C3SEL << 4) | (RCC_CCIPR_I2C3SEL_0 >> 4))
00365 #define LL_RCC_I2C3_CLKSOURCE_HSI          (uint32_t)((RCC_CCIPR_I2C3SEL << 4) | (RCC_CCIPR_I2C3SEL_1 >> 4))
00366 /**
00367   * @}
00368   */
00369 
00370 /** @defgroup RCC_LL_EC_LPTIM1_CLKSOURCE  Peripheral LPTIM clock source selection
00371   * @{
00372   */
00373 #define LL_RCC_LPTIM1_CLKSOURCE_PCLK1      (uint32_t)(RCC_CCIPR_LPTIM1SEL | (0x00000000 >> 16))
00374 #define LL_RCC_LPTIM1_CLKSOURCE_LSI        (uint32_t)(RCC_CCIPR_LPTIM1SEL | (RCC_CCIPR_LPTIM1SEL_0 >> 16))
00375 #define LL_RCC_LPTIM1_CLKSOURCE_HSI        (uint32_t)(RCC_CCIPR_LPTIM1SEL | (RCC_CCIPR_LPTIM1SEL_1 >> 16))
00376 #define LL_RCC_LPTIM1_CLKSOURCE_LSE        (uint32_t)(RCC_CCIPR_LPTIM1SEL | (RCC_CCIPR_LPTIM1SEL >> 16))
00377 #define LL_RCC_LPTIM2_CLKSOURCE_PCLK1      (uint32_t)(RCC_CCIPR_LPTIM2SEL | (0x00000000 >> 16))
00378 #define LL_RCC_LPTIM2_CLKSOURCE_LSI        (uint32_t)(RCC_CCIPR_LPTIM2SEL | (RCC_CCIPR_LPTIM2SEL_0 >> 16))
00379 #define LL_RCC_LPTIM2_CLKSOURCE_HSI        (uint32_t)(RCC_CCIPR_LPTIM2SEL | (RCC_CCIPR_LPTIM2SEL_1 >> 16))
00380 #define LL_RCC_LPTIM2_CLKSOURCE_LSE        (uint32_t)(RCC_CCIPR_LPTIM2SEL | (RCC_CCIPR_LPTIM2SEL >> 16))
00381 /**
00382   * @}
00383   */
00384 
00385 /** @defgroup RCC_LL_EC_SAI1_CLKSOURCE  Peripheral SAI clock source selection
00386   * @{
00387   */
00388 #define LL_RCC_SAI1_CLKSOURCE_PLLSAI1      (uint32_t)(RCC_CCIPR_SAI1SEL | (0x00000000 >> 16))
00389 #define LL_RCC_SAI1_CLKSOURCE_PLLSAI2      (uint32_t)(RCC_CCIPR_SAI1SEL | (RCC_CCIPR_SAI1SEL_0 >> 16))
00390 #define LL_RCC_SAI1_CLKSOURCE_PLL          (uint32_t)(RCC_CCIPR_SAI1SEL | (RCC_CCIPR_SAI1SEL_1 >> 16))
00391 #define LL_RCC_SAI1_CLKSOURCE_PIN          (uint32_t)(RCC_CCIPR_SAI1SEL | (RCC_CCIPR_SAI1SEL >> 16))
00392 #define LL_RCC_SAI2_CLKSOURCE_PLLSAI1      (uint32_t)(RCC_CCIPR_SAI2SEL | (0x00000000 >> 16))
00393 #define LL_RCC_SAI2_CLKSOURCE_PLLSAI2      (uint32_t)(RCC_CCIPR_SAI2SEL | (RCC_CCIPR_SAI2SEL_0 >> 16))
00394 #define LL_RCC_SAI2_CLKSOURCE_PLL          (uint32_t)(RCC_CCIPR_SAI2SEL | (RCC_CCIPR_SAI2SEL_1 >> 16))
00395 #define LL_RCC_SAI2_CLKSOURCE_PIN          (uint32_t)(RCC_CCIPR_SAI2SEL | (RCC_CCIPR_SAI2SEL >> 16))
00396 /**
00397   * @}
00398   */
00399 
00400 /** @defgroup RCC_LL_EC_SDMMC1_CLKSOURCE  Peripheral SDMMC clock source selection
00401   * @{
00402   */
00403 #define LL_RCC_SDMMC1_CLKSOURCE_NONE       (uint32_t)(0x00000000)
00404 #define LL_RCC_SDMMC1_CLKSOURCE_PLLSAI1    (uint32_t)(RCC_CCIPR_CLK48SEL_0)
00405 #define LL_RCC_SDMMC1_CLKSOURCE_PLL        (uint32_t)(RCC_CCIPR_CLK48SEL_1)
00406 #define LL_RCC_SDMMC1_CLKSOURCE_MSI        (uint32_t)(RCC_CCIPR_CLK48SEL)
00407 /**
00408   * @}
00409   */
00410 
00411 /** @defgroup RCC_LL_EC_RNG_CLKSOURCE  Peripheral RNG clock source selection
00412   * @{
00413   */
00414 #define LL_RCC_RNG_CLKSOURCE_NONE          (uint32_t)(0x00000000)
00415 #define LL_RCC_RNG_CLKSOURCE_PLLSAI1       (uint32_t)(RCC_CCIPR_CLK48SEL_0)
00416 #define LL_RCC_RNG_CLKSOURCE_PLL           (uint32_t)(RCC_CCIPR_CLK48SEL_1)
00417 #define LL_RCC_RNG_CLKSOURCE_MSI           (uint32_t)(RCC_CCIPR_CLK48SEL)
00418 /**
00419   * @}
00420   */
00421 
00422 #if defined(USB_OTG_FS)
00423 /** @defgroup RCC_LL_EC_USB_CLKSOURCE  Peripheral USB clock source selection
00424   * @{
00425   */
00426 #define LL_RCC_USB_CLKSOURCE_NONE          (uint32_t)(0x00000000)
00427 #define LL_RCC_USB_CLKSOURCE_PLLSAI1       (uint32_t)(RCC_CCIPR_CLK48SEL_0)
00428 #define LL_RCC_USB_CLKSOURCE_PLL           (uint32_t)(RCC_CCIPR_CLK48SEL_1)
00429 #define LL_RCC_USB_CLKSOURCE_MSI           (uint32_t)(RCC_CCIPR_CLK48SEL)
00430 /**
00431   * @}
00432   */
00433 
00434 #endif /* USB_OTG_FS */
00435 
00436 /** @defgroup RCC_LL_EC_ADC_CLKSOURCE  Peripheral ADC clock source selection
00437   * @{
00438   */
00439 #define LL_RCC_ADC_CLKSOURCE_NONE          (uint32_t)(0x00000000)
00440 #define LL_RCC_ADC_CLKSOURCE_PLLSAI1       (uint32_t)(RCC_CCIPR_ADCSEL_0)
00441 #define LL_RCC_ADC_CLKSOURCE_PLLSAI2       (uint32_t)(RCC_CCIPR_ADCSEL_1)
00442 #define LL_RCC_ADC_CLKSOURCE_SYSCLK        (uint32_t)(RCC_CCIPR_ADCSEL)
00443 /**
00444   * @}
00445   */
00446 
00447 /** @defgroup RCC_LL_EC_SWPMI1_CLKSOURCE  Peripheral SWPMI clock source selection
00448   * @{
00449   */
00450 #define LL_RCC_SWPMI1_CLKSOURCE_PCLK       (uint32_t)(0x00000000)
00451 #define LL_RCC_SWPMI1_CLKSOURCE_HSI        (uint32_t)(RCC_CCIPR_SWPMI1SEL)
00452 /**
00453   * @}
00454   */
00455 
00456 /** @defgroup RCC_LL_EC_DFSDM_CLKSOURCE  Peripheral DFSDM clock source selection
00457   * @{
00458   */
00459 #define LL_RCC_DFSDM_CLKSOURCE_PCLK        (uint32_t)(0x00000000)
00460 #define LL_RCC_DFSDM_CLKSOURCE_SYSCLK      (uint32_t)(RCC_CCIPR_DFSDMSEL)
00461 /**
00462   * @}
00463   */
00464 
00465 /** @defgroup RCC_LL_EC_USART1 Peripheral USART get clock source
00466   * @{
00467   */
00468 #define LL_RCC_USART1_CLKSOURCE            RCC_CCIPR_USART1SEL
00469 #define LL_RCC_USART2_CLKSOURCE            RCC_CCIPR_USART2SEL
00470 #define LL_RCC_USART3_CLKSOURCE            RCC_CCIPR_USART3SEL
00471 /**
00472   * @}
00473   */
00474 
00475 /** @defgroup RCC_LL_EC_UART4 Peripheral UART get clock source
00476   * @{
00477   */
00478 #define LL_RCC_UART4_CLKSOURCE             RCC_CCIPR_UART4SEL
00479 #define LL_RCC_UART5_CLKSOURCE             RCC_CCIPR_UART5SEL
00480 /**
00481   * @}
00482   */
00483 
00484 /** @defgroup RCC_LL_EC_LPUART1 Peripheral LPUART get clock source
00485   * @{
00486   */
00487 #define LL_RCC_LPUART1_CLKSOURCE           RCC_CCIPR_LPUART1SEL
00488 /**
00489   * @}
00490   */
00491 
00492 /** @defgroup RCC_LL_EC_I2C1 Peripheral I2C get clock source
00493   * @{
00494   */
00495 #define LL_RCC_I2C1_CLKSOURCE              RCC_CCIPR_I2C1SEL
00496 #define LL_RCC_I2C2_CLKSOURCE              RCC_CCIPR_I2C2SEL
00497 #define LL_RCC_I2C3_CLKSOURCE              RCC_CCIPR_I2C3SEL
00498 /**
00499   * @}
00500   */
00501 
00502 /** @defgroup RCC_LL_EC_LPTIM1 Peripheral LPTIM get clock source
00503   * @{
00504   */
00505 #define LL_RCC_LPTIM1_CLKSOURCE            RCC_CCIPR_LPTIM1SEL
00506 /**
00507   * @}
00508   */
00509 
00510 /** @defgroup RCC_LL_EC_SAI1  Peripheral SAI get clock source
00511   * @{
00512   */
00513 #define LL_RCC_SAI1_CLKSOURCE              RCC_CCIPR_SAI1SEL
00514 #define LL_RCC_SAI2_CLKSOURCE              RCC_CCIPR_SAI2SEL
00515 /**
00516   * @}
00517   */
00518 
00519 /** @defgroup RCC_LL_EC_SDMMC1  Peripheral SDMMC get clock source
00520   * @{
00521   */
00522 #define LL_RCC_SDMMC1_CLKSOURCE            RCC_CCIPR_CLK48SEL
00523 /**
00524   * @}
00525   */
00526 
00527 /** @defgroup RCC_LL_EC_RNG  Peripheral RNG get clock source
00528   * @{
00529   */
00530 #define LL_RCC_RNG_CLKSOURCE               RCC_CCIPR_CLK48SEL
00531 /**
00532   * @}
00533   */
00534 
00535 #if defined(USB_OTG_FS)
00536 /** @defgroup RCC_LL_EC_USB  Peripheral USB get clock source
00537   * @{
00538   */
00539 #define LL_RCC_USB_CLKSOURCE               RCC_CCIPR_CLK48SEL
00540 /**
00541   * @}
00542   */
00543 
00544 #endif /* USB_OTG_FS */
00545 
00546 /** @defgroup RCC_LL_EC_ADC  Peripheral ADC get clock source
00547   * @{
00548   */
00549 #define LL_RCC_ADC_CLKSOURCE               RCC_CCIPR_ADCSEL
00550 /**
00551   * @}
00552   */
00553 
00554 /** @defgroup RCC_LL_EC_SWPMI1  Peripheral SWPMI get clock source
00555   * @{
00556   */
00557 #define LL_RCC_SWPMI1_CLKSOURCE            RCC_CCIPR_SWPMI1SEL
00558 /**
00559   * @}
00560   */
00561 
00562 /** @defgroup RCC_LL_EC_DFSDM  Peripheral DFSDM get clock source
00563   * @{
00564   */
00565 #define LL_RCC_DFSDM_CLKSOURCE             RCC_CCIPR_DFSDMSEL
00566 /**
00567   * @}
00568   */
00569 
00570 /** @defgroup RCC_LL_EC_RTC_CLKSOURCE  RTC clock source selection
00571   * @{
00572   */
00573 #define LL_RCC_RTC_CLKSOURCE_NONE          (uint32_t)(0x00000000)  /*!< No clock used as RTC clock */
00574 #define LL_RCC_RTC_CLKSOURCE_LSE           RCC_BDCR_RTCSEL_0       /*!< LSE oscillator clock used as RTC clock */
00575 #define LL_RCC_RTC_CLKSOURCE_LSI           RCC_BDCR_RTCSEL_1       /*!< LSI oscillator clock used as RTC clock */
00576 #define LL_RCC_RTC_CLKSOURCE_HSE_DIV32     RCC_BDCR_RTCSEL         /*!< HSE oscillator clock divided by 32 used as RTC clock */
00577 /**
00578   * @}
00579   */
00580 
00581 /** @defgroup RCC_LL_EC_PLLSOURCE  PLL, PLLSAI1 and PLLSAI2 entry clock source
00582   * @{
00583   */
00584 #define LL_RCC_PLLSOURCE_NONE              (uint32_t)0x00000000    /*!< No clock */
00585 #define LL_RCC_PLLSOURCE_MSI               RCC_PLLCFGR_PLLSRC_MSI  /*!< MSI clock selected as PLL entry clock source */
00586 #define LL_RCC_PLLSOURCE_HSI               RCC_PLLCFGR_PLLSRC_HSI  /*!< HSI clock selected as PLL entry clock source */
00587 #define LL_RCC_PLLSOURCE_HSE               RCC_PLLCFGR_PLLSRC_HSE  /*!< HSE clock selected as PLL entry clock source */
00588 /**
00589   * @}
00590   */
00591 
00592 /** @defgroup RCC_LL_EC_PLLM_DIV  PLL, PLLSAI1 and PLLSAI2 division factor
00593   * @{
00594   */
00595 #define LL_RCC_PLLM_DIV_1                  ((uint32_t)0x00000000)
00596 #define LL_RCC_PLLM_DIV_2                  (RCC_PLLCFGR_PLLM_0)
00597 #define LL_RCC_PLLM_DIV_3                  (RCC_PLLCFGR_PLLM_1)
00598 #define LL_RCC_PLLM_DIV_4                  ((RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0))
00599 #define LL_RCC_PLLM_DIV_5                  (RCC_PLLCFGR_PLLM_2)
00600 #define LL_RCC_PLLM_DIV_6                  ((RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0))
00601 #define LL_RCC_PLLM_DIV_7                  ((RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1))
00602 #define LL_RCC_PLLM_DIV_8                  (RCC_PLLCFGR_PLLM)
00603 /**
00604   * @}
00605   */
00606 
00607 /** @defgroup RCC_LL_EC_PLLR_DIV  PLL division factor (PLLR)
00608   * @{
00609   */
00610 #define LL_RCC_PLLR_DIV_2                  ((uint32_t)0x00000000)
00611 #define LL_RCC_PLLR_DIV_4                  (RCC_PLLCFGR_PLLR_0)
00612 #define LL_RCC_PLLR_DIV_6                  (RCC_PLLCFGR_PLLR_1)
00613 #define LL_RCC_PLLR_DIV_8                  (RCC_PLLCFGR_PLLR)
00614 /**
00615   * @}
00616   */
00617 
00618 /** @defgroup RCC_LL_EC_PLLP_DIV  PLL division factor (PLLP)
00619   * @{
00620   */
00621 #define LL_RCC_PLLP_DIV_7                  ((uint32_t)0x00000000)
00622 #define LL_RCC_PLLP_DIV_17                 (RCC_PLLCFGR_PLLP)
00623 /**
00624   * @}
00625   */
00626 
00627 /** @defgroup RCC_LL_EC_PLLQ_DIV  PLL division factor (PLLQ)
00628   * @{
00629   */
00630 #define LL_RCC_PLLQ_DIV_2                  ((uint32_t)0x00000000)
00631 #define LL_RCC_PLLQ_DIV_4                  (RCC_PLLCFGR_PLLQ_0)
00632 #define LL_RCC_PLLQ_DIV_6                  (RCC_PLLCFGR_PLLQ_1)
00633 #define LL_RCC_PLLQ_DIV_8                  (RCC_PLLCFGR_PLLQ)
00634 /**
00635   * @}
00636   */
00637 
00638 /** @defgroup RCC_LL_EC_PLLSAI1Q  PLLSAI1 division factor (PLLSAI1Q)
00639   * @{
00640   */
00641 #define LL_RCC_PLLSAI1Q_DIV2               ((uint32_t)0x00000000)
00642 #define LL_RCC_PLLSAI1Q_DIV4               ((uint32_t)0x00200000)
00643 #define LL_RCC_PLLSAI1Q_DIV6               ((uint32_t)0x00400000)
00644 #define LL_RCC_PLLSAI1Q_DIV8               (RCC_PLLSAI1CFGR_PLLSAI1Q)
00645 /**
00646   * @}
00647   */
00648 
00649 /** @defgroup RCC_LL_EC_PLLSAI1P  PLLSAI1 division factor (PLLSAI1P)
00650   * @{
00651   */
00652 #define LL_RCC_PLLSAI1P_DIV7               ((uint32_t)0x00000000)
00653 #define LL_RCC_PLLSAI1P_DIV17              (RCC_PLLSAI1CFGR_PLLSAI1P)
00654 /**
00655   * @}
00656   */
00657 
00658 /** @defgroup RCC_LL_EC_PLLSAI1R  PLLSAI1 division factor (PLLSAI1R)
00659   * @{
00660   */
00661 #define LL_RCC_PLLSAI1R_DIV2               ((uint32_t)0x00000000)
00662 #define LL_RCC_PLLSAI1R_DIV4               ((uint32_t)0x02000000)
00663 #define LL_RCC_PLLSAI1R_DIV6               ((uint32_t)0x04000000)
00664 #define LL_RCC_PLLSAI1R_DIV8               (RCC_PLLSAI1CFGR_PLLSAI1R)
00665 /**
00666   * @}
00667   */
00668 
00669 /** @defgroup RCC_LL_EC_PLLSAI2P  PLLSAI2 division factor (PLLSAI2P)
00670   * @{
00671   */
00672 #define LL_RCC_PLLSAI2P_DIV7               ((uint32_t)0x00000000)
00673 #define LL_RCC_PLLSAI2P_DIV17              (RCC_PLLSAI2CFGR_PLLSAI2P)
00674 /**
00675   * @}
00676   */
00677 
00678 /** @defgroup RCC_LL_EC_PLLSAI2R  PLLSAI2 division factor (PLLSAI2R)
00679   * @{
00680   */
00681 #define LL_RCC_PLLSAI2R_DIV2               ((uint32_t)0x00000000)
00682 #define LL_RCC_PLLSAI2R_DIV4               (((uint32_t)0x02000000))
00683 #define LL_RCC_PLLSAI2R_DIV6               (((uint32_t)0x04000000))
00684 #define LL_RCC_PLLSAI2R_DIV8               (RCC_PLLSAI2CFGR_PLLSAI2R)
00685 /**
00686   * @}
00687   */
00688 
00689 /** @defgroup RCC_LL_EC_MSIRANGESEL  MSI clock range selection
00690   * @{
00691   */
00692 #define LL_RCC_MSIRANGESEL_STANDBY         (uint32_t)0 /*!< MSI Range is provided by MSISRANGE */
00693 #define LL_RCC_MSIRANGESEL_RUN             (uint32_t)1 /*!< MSI Range is provided by MSIRANGE */
00694 /**
00695   * @}
00696   */
00697 
00698 /**
00699   * @}
00700   */
00701 
00702 /* Exported macro ------------------------------------------------------------*/
00703 /** @defgroup RCC_LL_Exported_Macros RCC Exported Macros
00704   * @{
00705   */
00706 
00707 /** @defgroup RCC_LL_EM_WRITE_READ Common Write and read registers Macros
00708   * @{
00709   */
00710 
00711 /**
00712   * @brief  Write a value in RCC register
00713   * @param  __REG__ Register to be written
00714   * @param  __VALUE__ Value to be written in the register
00715   * @retval None
00716   */
00717 #define LL_RCC_WriteReg(__REG__, __VALUE__) WRITE_REG(RCC->__REG__, (__VALUE__))
00718 
00719 /**
00720   * @brief  Read a value in RCC register
00721   * @param  __REG__ Register to be read
00722   * @retval Register value
00723   */
00724 #define LL_RCC_ReadReg(__REG__) READ_REG(RCC->__REG__)
00725 /**
00726   * @}
00727   */
00728 
00729 /** @defgroup RCC_LL_EM_CALC_FREQ Calculate frequencies
00730   * @{
00731   */
00732 
00733 /**
00734   * @brief  Helper macro to calculate the PLLCLK frequency
00735   * @note ex: __LL_RCC_CALC_PLLCLK_FREQ(HSE_VALUE,LL_RCC_PLL_GetDivider(),
00736   *             LL_RCC_PLL_GetN(), LL_RCC_PLL_GetR());
00737   * @param  __INPUTFREQ__ PLL Input frequency (based on MSI/HSE/HSI)
00738   * @param  __PLLM__: This parameter can be one of the following values:
00739   *         @arg @ref LL_RCC_PLLM_DIV_1
00740   *         @arg @ref LL_RCC_PLLM_DIV_2
00741   *         @arg @ref LL_RCC_PLLM_DIV_3
00742   *         @arg @ref LL_RCC_PLLM_DIV_4
00743   *         @arg @ref LL_RCC_PLLM_DIV_5
00744   *         @arg @ref LL_RCC_PLLM_DIV_6
00745   *         @arg @ref LL_RCC_PLLM_DIV_7
00746   *         @arg @ref LL_RCC_PLLM_DIV_8
00747   * @param  __PLLN__ Between 8 and 86
00748   * @param  __PLLR__: This parameter can be one of the following values:
00749   *         @arg @ref LL_RCC_PLLR_DIV_2
00750   *         @arg @ref LL_RCC_PLLR_DIV_4
00751   *         @arg @ref LL_RCC_PLLR_DIV_6
00752   *         @arg @ref LL_RCC_PLLR_DIV_8
00753   * @retval PLL clock frequency (in Hz)
00754   */
00755 #define __LL_RCC_CALC_PLLCLK_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLR__) ((__INPUTFREQ__) / ((((__PLLM__)>> 4) + 1)) * (__PLLN__) / \
00756                    ((((__PLLR__) >> 25 ) + 1 ) * 2))
00757 
00758 /**
00759   * @brief  Helper macro to calculate the HCLK frequency
00760   * @param  __SYSCLKFREQ__ SYSCLK frequency (based on MSI/HSE/HSI/PLLCLK)
00761   * @param  __AHBPRESCALER__: This parameter can be one of the following values:
00762   *         @arg @ref LL_RCC_SYSCLK_DIV_1
00763   *         @arg @ref LL_RCC_SYSCLK_DIV_2
00764   *         @arg @ref LL_RCC_SYSCLK_DIV_4
00765   *         @arg @ref LL_RCC_SYSCLK_DIV_8
00766   *         @arg @ref LL_RCC_SYSCLK_DIV_16
00767   *         @arg @ref LL_RCC_SYSCLK_DIV_64
00768   *         @arg @ref LL_RCC_SYSCLK_DIV_128
00769   *         @arg @ref LL_RCC_SYSCLK_DIV_256
00770   *         @arg @ref LL_RCC_SYSCLK_DIV_512
00771   * @retval HCLK clock frequency (in Hz)
00772   */
00773 #define __LL_RCC_CALC_HCLK_FREQ(__SYSCLKFREQ__, __AHBPRESCALER__) ((__SYSCLKFREQ__) >> AHBPrescTable[(__AHBPRESCALER__) >>  RCC_POSITION_HPRE])
00774 
00775 /**
00776   * @brief  Helper macro to calculate the PCLK1 frequency (ABP1)
00777   * @param  __HCLKFREQ__ HCLK frequency
00778   * @param  __APB1PRESCALER__: This parameter can be one of the following values:
00779   *         @arg @ref LL_RCC_APB1_DIV_1
00780   *         @arg @ref LL_RCC_APB1_DIV_2
00781   *         @arg @ref LL_RCC_APB1_DIV_4
00782   *         @arg @ref LL_RCC_APB1_DIV_8
00783   *         @arg @ref LL_RCC_APB1_DIV_16
00784   * @retval PCLK1 clock frequency (in Hz)
00785   */
00786 #define __LL_RCC_CALC_PCLK1_FREQ(__HCLKFREQ__, __APB1PRESCALER__) ((__HCLKFREQ__) >> aRCC_APBAHBPrescTable[(__APB1PRESCALER__) >>  RCC_POSITION_PPRE1])
00787 
00788 /**
00789   * @brief  Helper macro to calculate the PCLK2 frequency (ABP2)
00790   * @param  __HCLKFREQ__ HCLK frequency
00791   * @param  __APB2PRESCALER__: This parameter can be one of the following values:
00792   *         @arg @ref LL_RCC_APB2_DIV_1
00793   *         @arg @ref LL_RCC_APB2_DIV_2
00794   *         @arg @ref LL_RCC_APB2_DIV_4
00795   *         @arg @ref LL_RCC_APB2_DIV_8
00796   *         @arg @ref LL_RCC_APB2_DIV_16
00797   * @retval PCLK2 clock frequency (in Hz)
00798   */
00799 #define __LL_RCC_CALC_PCLK2_FREQ(__HCLKFREQ__, __APB2PRESCALER__) ((__HCLKFREQ__) >> aRCC_APBAHBPrescTable[(__APB2PRESCALER__) >>  RCC_POSITION_PPRE2])
00800 
00801 /**
00802   * @brief  Helper macro to calculate the MSI frequency (in Hz)
00803   * @note: __MSISEL__ can be retrieved thanks to function LL_RCC_MSI_IsEnabledRangeSelect
00804   * @note: if __MSISEL__ is equal to LL_RCC_MSIRANGESEL_STANDBY,
00805   *        __MSIRANGE__can be retrieved by LL_RCC_MSI_GetRangeAfterStandby
00806   *        else by LL_RCC_MSI_GetRange
00807   *        ex: __LL_RCC_CALC_MSI_FREQ(LL_RCC_MSI_IsEnabledRangeSelect(),
00808   *              (LL_RCC_MSI_IsEnabledRangeSelect()?
00809   *               LL_RCC_MSI_GetRange():
00810   *               LL_RCC_MSI_GetRangeAfterStandby())
00811   * @param  __MSISEL__: This parameter can be one of the following values:
00812   *         @arg @ref LL_RCC_MSIRANGESEL_STANDBY
00813   *         @arg @ref LL_RCC_MSIRANGESEL_RUN
00814   * @param  __MSIRANGE__: This parameter can be one of the following values:
00815   *         @arg @ref LL_RCC_MSIRANGE_0
00816   *         @arg @ref LL_RCC_MSIRANGE_1
00817   *         @arg @ref LL_RCC_MSIRANGE_2
00818   *         @arg @ref LL_RCC_MSIRANGE_3
00819   *         @arg @ref LL_RCC_MSIRANGE_4
00820   *         @arg @ref LL_RCC_MSIRANGE_5
00821   *         @arg @ref LL_RCC_MSIRANGE_6
00822   *         @arg @ref LL_RCC_MSIRANGE_7
00823   *         @arg @ref LL_RCC_MSIRANGE_8
00824   *         @arg @ref LL_RCC_MSIRANGE_9
00825   *         @arg @ref LL_RCC_MSIRANGE_10
00826   *         @arg @ref LL_RCC_MSIRANGE_11
00827   *         @arg @ref LL_RCC_MSISRANGE_4
00828   *         @arg @ref LL_RCC_MSISRANGE_5
00829   *         @arg @ref LL_RCC_MSISRANGE_6
00830   *         @arg @ref LL_RCC_MSISRANGE_7
00831   * @retval MSI clock frequency (in Hz)
00832   */
00833 #define __LL_RCC_CALC_MSI_FREQ(__MSISEL__, __MSIRANGE__)   (((__MSISEL__) == LL_RCC_MSIRANGESEL_STANDBY) ? \
00834                            (MSIRangeTable[(__MSIRANGE__) >> 8]) : \
00835                            (MSIRangeTable[(__MSIRANGE__) >> 4]))
00836 
00837 /**
00838   * @}
00839   */
00840 
00841 /**
00842   * @}
00843   */
00844 
00845 /* Exported functions --------------------------------------------------------*/
00846 /** @defgroup RCC_LL_Exported_Functions RCC Exported Functions
00847   * @{
00848   */
00849 /** @defgroup RCC_LL_EF_HSE HSE
00850   * @{
00851   */
00852 
00853 /**
00854   * @brief  Enable the Clock Security System.
00855   * @rmtoll CR           CSSON         LL_RCC_HSE_EnableCSS
00856   * @retval None
00857   */
00858 __STATIC_INLINE void LL_RCC_HSE_EnableCSS(void)
00859 {
00860   SET_BIT(RCC->CR, RCC_CR_CSSON);
00861 }
00862 
00863 /**
00864   * @brief  Enable HSE external oscillator (HSE Bypass)
00865   * @rmtoll CR           HSEBYP        LL_RCC_HSE_EnableBypass
00866   * @retval None
00867   */
00868 __STATIC_INLINE void LL_RCC_HSE_EnableBypass(void)
00869 {
00870   SET_BIT(RCC->CR, RCC_CR_HSEBYP);
00871 }
00872 
00873 /**
00874   * @brief  Disable HSE external oscillator (HSE Bypass)
00875   * @rmtoll CR           HSEBYP        LL_RCC_HSE_DisableBypass
00876   * @retval None
00877   */
00878 __STATIC_INLINE void LL_RCC_HSE_DisableBypass(void)
00879 {
00880   CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);
00881 }
00882 
00883 /**
00884   * @brief  Enable HSE crystal oscillator (HSE ON)
00885   * @rmtoll CR           HSEON         LL_RCC_HSE_Enable
00886   * @retval None
00887   */
00888 __STATIC_INLINE void LL_RCC_HSE_Enable(void)
00889 {
00890   SET_BIT(RCC->CR, RCC_CR_HSEON);
00891 }
00892 
00893 /**
00894   * @brief  Disable HSE crystal oscillator (HSE ON)
00895   * @rmtoll CR           HSEON         LL_RCC_HSE_Disable
00896   * @retval None
00897   */
00898 __STATIC_INLINE void LL_RCC_HSE_Disable(void)
00899 {
00900   CLEAR_BIT(RCC->CR, RCC_CR_HSEON);
00901 }
00902 
00903 /**
00904   * @brief  Check if HSE oscillator Ready
00905   * @rmtoll CR           HSERDY        LL_RCC_HSE_IsReady
00906   * @retval State of bit (1 or 0).
00907   */
00908 __STATIC_INLINE uint32_t LL_RCC_HSE_IsReady(void)
00909 {
00910   return (READ_BIT(RCC->CR, RCC_CR_HSERDY) == (RCC_CR_HSERDY));
00911 }
00912 
00913 /**
00914   * @}
00915   */
00916 
00917 /** @defgroup RCC_LL_EF_HSI HSI
00918   * @{
00919   */
00920 
00921 /**
00922   * @brief  Enable HSI even in stop mode
00923   * @note HSI oscillator is forced ON even in Stop mode
00924   * @rmtoll CR           HSIKERON      LL_RCC_HSI_EnableInStopMode
00925   * @retval None
00926   */
00927 __STATIC_INLINE void LL_RCC_HSI_EnableInStopMode(void)
00928 {
00929   SET_BIT(RCC->CR, RCC_CR_HSIKERON);
00930 }
00931 
00932 /**
00933   * @brief  Disable HSI in stop mode
00934   * @rmtoll CR           HSIKERON      LL_RCC_HSI_DisableInStopMode
00935   * @retval None
00936   */
00937 __STATIC_INLINE void LL_RCC_HSI_DisableInStopMode(void)
00938 {
00939   CLEAR_BIT(RCC->CR, RCC_CR_HSIKERON);
00940 }
00941 
00942 /**
00943   * @brief  Enable HSI oscillator
00944   * @rmtoll CR           HSION         LL_RCC_HSI_Enable
00945   * @retval None
00946   */
00947 __STATIC_INLINE void LL_RCC_HSI_Enable(void)
00948 {
00949   SET_BIT(RCC->CR, RCC_CR_HSION);
00950 }
00951 
00952 /**
00953   * @brief  Disable HSI oscillator
00954   * @rmtoll CR           HSION         LL_RCC_HSI_Disable
00955   * @retval None
00956   */
00957 __STATIC_INLINE void LL_RCC_HSI_Disable(void)
00958 {
00959   CLEAR_BIT(RCC->CR, RCC_CR_HSION);
00960 }
00961 
00962 /**
00963   * @brief  Check if HSI clock divided by 4
00964   * @rmtoll CR           HSIRDY        LL_RCC_HSI_IsReady
00965   * @retval State of bit (1 or 0).
00966   */
00967 __STATIC_INLINE uint32_t LL_RCC_HSI_IsReady(void)
00968 {
00969   return (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == (RCC_CR_HSIRDY));
00970 }
00971 
00972 /**
00973   * @brief  Enable HSI Automatic from stop mode
00974   * @rmtoll CR           HSIASFS       LL_RCC_HSI_EnableAutoFromStop
00975   * @retval None
00976   */
00977 __STATIC_INLINE void LL_RCC_HSI_EnableAutoFromStop(void)
00978 {
00979   SET_BIT(RCC->CR, RCC_CR_HSIASFS);
00980 }
00981 
00982 /**
00983   * @brief  Disable HSI Automatic from stop mode
00984   * @rmtoll CR           HSIASFS       LL_RCC_HSI_DisableAutoFromStop
00985   * @retval None
00986   */
00987 __STATIC_INLINE void LL_RCC_HSI_DisableAutoFromStop(void)
00988 {
00989   CLEAR_BIT(RCC->CR, RCC_CR_HSIASFS);
00990 }
00991 
00992 /**
00993   * @brief  Get HSI Calibration value
00994   * @note When HSITRIM is written, HSICAL is updated with the sum of
00995   *       HSITRIM and the factory trim value
00996   * @rmtoll ICSCR        HSICAL        LL_RCC_HSI_GetCalibration
00997   * @retval Between 0x00 and 0xFF
00998   */
00999 __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibration(void)
01000 {
01001   return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_HSICAL) >> RCC_POSITION_HSICAL);
01002 }
01003 
01004 /**
01005   * @brief  Set HSI Calibration trimming
01006   * @note user-programmable trimming value that is added to the HSICAL
01007   * @note Default value is 16, which, when added to the HSICAL value,
01008   *       should trim the HSI to 16 MHz +/- 1 %
01009   * @rmtoll ICSCR        HSITRIM       LL_RCC_HSI_SetCalibTrimming
01010   * @param  Value Between 0 and 31
01011   * @retval None
01012   */
01013 __STATIC_INLINE void LL_RCC_HSI_SetCalibTrimming(uint32_t Value)
01014 {
01015   MODIFY_REG(RCC->ICSCR, RCC_ICSCR_HSITRIM, Value << RCC_POSITION_HSITRIM);
01016 }
01017 
01018 /**
01019   * @brief  Get HSI Calibration trimming
01020   * @rmtoll ICSCR        HSITRIM       LL_RCC_HSI_GetCalibTrimming
01021   * @retval Between 0 and 31
01022   */
01023 __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibTrimming(void)
01024 {
01025   return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_HSITRIM) >> RCC_POSITION_HSITRIM);
01026 }
01027 
01028 /**
01029   * @}
01030   */
01031 
01032 /** @defgroup RCC_LL_EF_LSE LSE
01033   * @{
01034   */
01035 
01036 /**
01037   * @brief  Enable  Low Speed External (LSE) crystal.
01038   * @rmtoll BDCR         LSEON         LL_RCC_LSE_Enable
01039   * @retval None
01040   */
01041 __STATIC_INLINE void LL_RCC_LSE_Enable(void)
01042 {
01043   SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);
01044 }
01045 
01046 /**
01047   * @brief  Disable  Low Speed External (LSE) crystal.
01048   * @rmtoll BDCR         LSEON         LL_RCC_LSE_Disable
01049   * @retval None
01050   */
01051 __STATIC_INLINE void LL_RCC_LSE_Disable(void)
01052 {
01053   CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);
01054 }
01055 
01056 /**
01057   * @brief  Enable external clock source (LSE bypass).
01058   * @rmtoll BDCR         LSEBYP        LL_RCC_LSE_EnableBypass
01059   * @retval None
01060   */
01061 __STATIC_INLINE void LL_RCC_LSE_EnableBypass(void)
01062 {
01063   SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
01064 }
01065 
01066 /**
01067   * @brief  Disable external clock source (LSE bypass).
01068   * @rmtoll BDCR         LSEBYP        LL_RCC_LSE_DisableBypass
01069   * @retval None
01070   */
01071 __STATIC_INLINE void LL_RCC_LSE_DisableBypass(void)
01072 {
01073   CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
01074 }
01075 
01076 /**
01077   * @brief  Set LSE oscillator drive capability
01078   * @note The oscillator is in Xtal mode when it is not in bypass mode.
01079   * @rmtoll BDCR         LSEDRV        LL_RCC_LSE_SetDriveCapability
01080   * @param  LSEDrive This parameter can be one of the following values:
01081   *         @arg @ref LL_RCC_LSEDRIVE_LOW
01082   *         @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW
01083   *         @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH
01084   *         @arg @ref LL_RCC_LSEDRIVE_HIGH
01085   * @retval None
01086   */
01087 __STATIC_INLINE void LL_RCC_LSE_SetDriveCapability(uint32_t LSEDrive)
01088 {
01089   MODIFY_REG(RCC->BDCR, RCC_BDCR_LSEDRV, LSEDrive);
01090 }
01091 
01092 /**
01093   * @brief  Get LSE oscillator drive capability
01094   * @rmtoll BDCR         LSEDRV        LL_RCC_LSE_GetDriveCapability
01095   * @retval Returned value can be one of the following values:
01096   *         @arg @ref LL_RCC_LSEDRIVE_LOW
01097   *         @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW
01098   *         @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH
01099   *         @arg @ref LL_RCC_LSEDRIVE_HIGH
01100   */
01101 __STATIC_INLINE uint32_t LL_RCC_LSE_GetDriveCapability(void)
01102 {
01103   return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_LSEDRV));
01104 }
01105 
01106 /**
01107   * @brief  Enable Clock security system on LSE.
01108   * @rmtoll BDCR         LSECSSON      LL_RCC_LSE_EnableCSS
01109   * @retval None
01110   */
01111 __STATIC_INLINE void LL_RCC_LSE_EnableCSS(void)
01112 {
01113   SET_BIT(RCC->BDCR, RCC_BDCR_LSECSSON);
01114 }
01115 
01116 /**
01117   * @brief  Check if LSE oscillator Ready
01118   * @rmtoll BDCR         LSERDY        LL_RCC_LSE_IsReady
01119   * @retval State of bit (1 or 0).
01120   */
01121 __STATIC_INLINE uint32_t LL_RCC_LSE_IsReady(void)
01122 {
01123   return (READ_BIT(RCC->BDCR, RCC_BDCR_LSERDY) == (RCC_BDCR_LSERDY));
01124 }
01125 
01126 /**
01127   * @brief  Check if CSS on LSE failure Detection
01128   * @rmtoll BDCR         LSECSSD       LL_RCC_LSE_IsCSSDetected
01129   * @retval State of bit (1 or 0).
01130   */
01131 __STATIC_INLINE uint32_t LL_RCC_LSE_IsCSSDetected(void)
01132 {
01133   return (READ_BIT(RCC->BDCR, RCC_BDCR_LSECSSD) == (RCC_BDCR_LSECSSD));
01134 }
01135 
01136 /**
01137   * @}
01138   */
01139 
01140 /** @defgroup RCC_LL_EF_LSI LSI
01141   * @{
01142   */
01143 
01144 /**
01145   * @brief  Enable LSI Oscillator
01146   * @rmtoll CSR          LSION         LL_RCC_LSI_Enable
01147   * @retval None
01148   */
01149 __STATIC_INLINE void LL_RCC_LSI_Enable(void)
01150 {
01151   SET_BIT(RCC->CSR, RCC_CSR_LSION);
01152 }
01153 
01154 /**
01155   * @brief  Disable LSI Oscillator
01156   * @rmtoll CSR          LSION         LL_RCC_LSI_Disable
01157   * @retval None
01158   */
01159 __STATIC_INLINE void LL_RCC_LSI_Disable(void)
01160 {
01161   CLEAR_BIT(RCC->CSR, RCC_CSR_LSION);
01162 }
01163 
01164 /**
01165   * @brief  Check if LSI is Ready
01166   * @rmtoll CSR          LSIRDY        LL_RCC_LSI_IsReady
01167   * @retval State of bit (1 or 0).
01168   */
01169 __STATIC_INLINE uint32_t LL_RCC_LSI_IsReady(void)
01170 {
01171   return (READ_BIT(RCC->CSR, RCC_CSR_LSIRDY) == (RCC_CSR_LSIRDY));
01172 }
01173 
01174 /**
01175   * @}
01176   */
01177 
01178 /** @defgroup RCC_LL_EF_MSI MSI
01179   * @{
01180   */
01181 
01182 /**
01183   * @brief  Enable MSI oscillator
01184   * @rmtoll CR           MSION         LL_RCC_MSI_Enable
01185   * @retval None
01186   */
01187 __STATIC_INLINE void LL_RCC_MSI_Enable(void)
01188 {
01189   SET_BIT(RCC->CR, RCC_CR_MSION);
01190 }
01191 
01192 /**
01193   * @brief  Disable MSI oscillator
01194   * @rmtoll CR           MSION         LL_RCC_MSI_Disable
01195   * @retval None
01196   */
01197 __STATIC_INLINE void LL_RCC_MSI_Disable(void)
01198 {
01199   CLEAR_BIT(RCC->CR, RCC_CR_MSION);
01200 }
01201 
01202 /**
01203   * @brief  Check if MSI oscillator Ready
01204   * @rmtoll CR           MSIRDY        LL_RCC_MSI_IsReady
01205   * @retval State of bit (1 or 0).
01206   */
01207 __STATIC_INLINE uint32_t LL_RCC_MSI_IsReady(void)
01208 {
01209   return (READ_BIT(RCC->CR, RCC_CR_MSIRDY) == (RCC_CR_MSIRDY));
01210 }
01211 
01212 /**
01213   * @brief  Enable MSI PLL-mode (Hardware auto calibration with LSE)
01214   * @note MSIPLLEN must be enabled after LSE is enabled (LSEON enabled)
01215   *       and ready (LSERDY set by hardware)
01216   * @note hardware protection to avoid enabling MSIPLLEN if LSE is not
01217   *       ready
01218   * @rmtoll CR           MSIPLLEN      LL_RCC_MSI_EnablePLLMode
01219   * @retval None
01220   */
01221 __STATIC_INLINE void LL_RCC_MSI_EnablePLLMode(void)
01222 {
01223   SET_BIT(RCC->CR, RCC_CR_MSIPLLEN);
01224 }
01225 
01226 /**
01227   * @brief  Disable MSI-PLL mode
01228   * @note cleared by hardware when LSE is disabled (LSEON = 0) or when
01229   *       the Clock Security System on LSE detects a LSE failure
01230   * @rmtoll CR           MSIPLLEN      LL_RCC_MSI_DisablePLLMode
01231   * @retval None
01232   */
01233 __STATIC_INLINE void LL_RCC_MSI_DisablePLLMode(void)
01234 {
01235   CLEAR_BIT(RCC->CR, RCC_CR_MSIPLLEN);
01236 }
01237 
01238 /**
01239   * @brief  Enable MSI clock range selection with MSIRANGE register
01240   * @note Write 0 has no effect. After a standby or a reset
01241   *       MSIRGSEL is at 0 and the MSI range value is provided by
01242   *       MSISRANGE
01243   * @rmtoll CR           MSIRGSEL      LL_RCC_MSI_EnableRangeSelection
01244   * @retval None
01245   */
01246 __STATIC_INLINE void LL_RCC_MSI_EnableRangeSelection(void)
01247 {
01248   SET_BIT(RCC->CR, RCC_CR_MSIRGSEL);
01249 }
01250 
01251 /**
01252   * @brief  Check if MSI clock range is selected with MSIRANGE register
01253   * @rmtoll CR           MSIRGSEL      LL_RCC_MSI_IsEnabledRangeSelect
01254   * @retval State of bit (1 or 0).
01255   */
01256 __STATIC_INLINE uint32_t LL_RCC_MSI_IsEnabledRangeSelect(void)
01257 {
01258   return (READ_BIT(RCC->CR, RCC_CR_MSIRGSEL) == (RCC_CR_MSIRGSEL));
01259 }
01260 
01261 /**
01262   * @brief  Configure the Internal Multi Speed oscillator (MSI) clock range in run mode.
01263   * @rmtoll CR           MSIRANGE      LL_RCC_MSI_SetRange
01264   * @param  Range This parameter can be one of the following values:
01265   *         @arg @ref LL_RCC_MSIRANGE_0
01266   *         @arg @ref LL_RCC_MSIRANGE_1
01267   *         @arg @ref LL_RCC_MSIRANGE_2
01268   *         @arg @ref LL_RCC_MSIRANGE_3
01269   *         @arg @ref LL_RCC_MSIRANGE_4
01270   *         @arg @ref LL_RCC_MSIRANGE_5
01271   *         @arg @ref LL_RCC_MSIRANGE_6
01272   *         @arg @ref LL_RCC_MSIRANGE_7
01273   *         @arg @ref LL_RCC_MSIRANGE_8
01274   *         @arg @ref LL_RCC_MSIRANGE_9
01275   *         @arg @ref LL_RCC_MSIRANGE_10
01276   *         @arg @ref LL_RCC_MSIRANGE_11
01277   * @retval None
01278   */
01279 __STATIC_INLINE void LL_RCC_MSI_SetRange(uint32_t Range)
01280 {
01281   MODIFY_REG(RCC->CR, RCC_CR_MSIRANGE, Range);
01282 }
01283 
01284 /**
01285   * @brief  Get the Internal Multi Speed oscillator (MSI) clock range in run mode.
01286   * @rmtoll CR           MSIRANGE      LL_RCC_MSI_GetRange
01287   * @retval Returned value can be one of the following values:
01288   *         @arg @ref LL_RCC_MSIRANGE_0
01289   *         @arg @ref LL_RCC_MSIRANGE_1
01290   *         @arg @ref LL_RCC_MSIRANGE_2
01291   *         @arg @ref LL_RCC_MSIRANGE_3
01292   *         @arg @ref LL_RCC_MSIRANGE_4
01293   *         @arg @ref LL_RCC_MSIRANGE_5
01294   *         @arg @ref LL_RCC_MSIRANGE_6
01295   *         @arg @ref LL_RCC_MSIRANGE_7
01296   *         @arg @ref LL_RCC_MSIRANGE_8
01297   *         @arg @ref LL_RCC_MSIRANGE_9
01298   *         @arg @ref LL_RCC_MSIRANGE_10
01299   *         @arg @ref LL_RCC_MSIRANGE_11
01300   */
01301 __STATIC_INLINE uint32_t LL_RCC_MSI_GetRange(void)
01302 {
01303   return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_MSIRANGE));
01304 }
01305 
01306 /**
01307   * @brief  Configure MSI range used after standby
01308   * @rmtoll CSR          MSISRANGE     LL_RCC_MSI_SetRangeAfterStandby
01309   * @param  Range This parameter can be one of the following values:
01310   *         @arg @ref LL_RCC_MSISRANGE_4
01311   *         @arg @ref LL_RCC_MSISRANGE_5
01312   *         @arg @ref LL_RCC_MSISRANGE_6
01313   *         @arg @ref LL_RCC_MSISRANGE_7
01314   * @retval None
01315   */
01316 __STATIC_INLINE void LL_RCC_MSI_SetRangeAfterStandby(uint32_t Range)
01317 {
01318   MODIFY_REG(RCC->CSR, RCC_CSR_MSISRANGE, Range);
01319 }
01320 
01321 /**
01322   * @brief  Get MSI range used after standby
01323   * @rmtoll CSR          MSISRANGE     LL_RCC_MSI_GetRangeAfterStandby
01324   * @retval Returned value can be one of the following values:
01325   *         @arg @ref LL_RCC_MSISRANGE_4
01326   *         @arg @ref LL_RCC_MSISRANGE_5
01327   *         @arg @ref LL_RCC_MSISRANGE_6
01328   *         @arg @ref LL_RCC_MSISRANGE_7
01329   */
01330 __STATIC_INLINE uint32_t LL_RCC_MSI_GetRangeAfterStandby(void)
01331 {
01332   return (uint32_t)(READ_BIT(RCC->CSR, RCC_CSR_MSISRANGE));
01333 }
01334 
01335 /**
01336   * @brief  Get MSI Calibration value
01337   * @note When MSITRIM is written, MSICAL is updated with the sum of
01338   *       MSITRIM and the factory trim value
01339   * @rmtoll ICSCR        MSICAL        LL_RCC_MSI_GetCalibration
01340   * @retval Between 0 and 255
01341   */
01342 __STATIC_INLINE uint32_t LL_RCC_MSI_GetCalibration(void)
01343 {
01344   return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_MSICAL) >> RCC_POSITION_MSICAL);
01345 }
01346 
01347 /**
01348   * @brief  Set MSI Calibration trimming
01349   * @note user-programmable trimming value that is added to the MSICAL
01350   * @rmtoll ICSCR        MSITRIM       LL_RCC_MSI_SetCalibTrimming
01351   * @param  Value Between 0 and 255
01352   * @retval None
01353   */
01354 __STATIC_INLINE void LL_RCC_MSI_SetCalibTrimming(uint32_t Value)
01355 {
01356   MODIFY_REG(RCC->ICSCR, RCC_ICSCR_MSITRIM, Value << RCC_POSITION_MSITRIM);
01357 }
01358 
01359 /**
01360   * @brief  Get MSI Calibration trimming
01361   * @rmtoll ICSCR        MSITRIM       LL_RCC_MSI_GetCalibTrimming
01362   * @retval Between 0 and 255
01363   */
01364 __STATIC_INLINE uint32_t LL_RCC_MSI_GetCalibTrimming(void)
01365 {
01366   return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_MSITRIM) >> RCC_POSITION_MSITRIM);
01367 }
01368 
01369 /**
01370   * @}
01371   */
01372 
01373 /** @defgroup RCC_LL_EF_LSCO LSCO
01374   * @{
01375   */
01376 
01377 /**
01378   * @brief  Enable Low speed clock
01379   * @rmtoll BDCR         LSCOEN        LL_RCC_LSCO_Enable
01380   * @retval None
01381   */
01382 __STATIC_INLINE void LL_RCC_LSCO_Enable(void)
01383 {
01384   SET_BIT(RCC->BDCR, RCC_BDCR_LSCOEN);
01385 }
01386 
01387 /**
01388   * @brief  Disable Low speed clock
01389   * @rmtoll BDCR         LSCOEN        LL_RCC_LSCO_Disable
01390   * @retval None
01391   */
01392 __STATIC_INLINE void LL_RCC_LSCO_Disable(void)
01393 {
01394   CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSCOEN);
01395 }
01396 
01397 /**
01398   * @brief  Configure Low speed clock  selection
01399   * @rmtoll BDCR         LSCOSEL       LL_RCC_LSCO_SetSource
01400   * @param  Source This parameter can be one of the following values:
01401   *         @arg @ref LL_RCC_LSCO_CLKSOURCE_LSI
01402   *         @arg @ref LL_RCC_LSCO_CLKSOURCE_LSE
01403   * @retval None
01404   */
01405 __STATIC_INLINE void LL_RCC_LSCO_SetSource(uint32_t Source)
01406 {
01407   MODIFY_REG(RCC->BDCR, RCC_BDCR_LSCOSEL, Source);
01408 }
01409 
01410 /**
01411   * @brief  Get Low speed clock  selection
01412   * @rmtoll BDCR         LSCOSEL       LL_RCC_LSCO_GetSource
01413   * @retval Returned value can be one of the following values:
01414   *         @arg @ref LL_RCC_LSCO_CLKSOURCE_LSI
01415   *         @arg @ref LL_RCC_LSCO_CLKSOURCE_LSE
01416   */
01417 __STATIC_INLINE uint32_t LL_RCC_LSCO_GetSource(void)
01418 {
01419   return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_LSCOSEL));
01420 }
01421 
01422 /**
01423   * @}
01424   */
01425 
01426 /** @defgroup RCC_LL_EF_System System
01427   * @{
01428   */
01429 
01430 /**
01431   * @brief  Configure the system clock source
01432   * @rmtoll CFGR         SW            LL_RCC_SetSysClkSource
01433   * @param  Source This parameter can be one of the following values:
01434   *         @arg @ref LL_RCC_SYS_CLKSOURCE_MSI
01435   *         @arg @ref LL_RCC_SYS_CLKSOURCE_HSI
01436   *         @arg @ref LL_RCC_SYS_CLKSOURCE_HSE
01437   *         @arg @ref LL_RCC_SYS_CLKSOURCE_PLL
01438   * @retval None
01439   */
01440 __STATIC_INLINE void LL_RCC_SetSysClkSource(uint32_t Source)
01441 {
01442   MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, Source);
01443 }
01444 
01445 /**
01446   * @brief  Get the system clock source
01447   * @rmtoll CFGR         SWS           LL_RCC_GetSysClkSource
01448   * @retval Returned value can be one of the following values:
01449   *         @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_MSI
01450   *         @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSI
01451   *         @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSE
01452   *         @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_PLL
01453   */
01454 __STATIC_INLINE uint32_t LL_RCC_GetSysClkSource(void)
01455 {
01456   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS));
01457 }
01458 
01459 /**
01460   * @brief  Set AHB prescaler
01461   * @rmtoll CFGR         HPRE          LL_RCC_SetAHBPrescaler
01462   * @param  Prescaler This parameter can be one of the following values:
01463   *         @arg @ref LL_RCC_SYSCLK_DIV_1
01464   *         @arg @ref LL_RCC_SYSCLK_DIV_2
01465   *         @arg @ref LL_RCC_SYSCLK_DIV_4
01466   *         @arg @ref LL_RCC_SYSCLK_DIV_8
01467   *         @arg @ref LL_RCC_SYSCLK_DIV_16
01468   *         @arg @ref LL_RCC_SYSCLK_DIV_64
01469   *         @arg @ref LL_RCC_SYSCLK_DIV_128
01470   *         @arg @ref LL_RCC_SYSCLK_DIV_256
01471   *         @arg @ref LL_RCC_SYSCLK_DIV_512
01472   * @retval None
01473   */
01474 __STATIC_INLINE void LL_RCC_SetAHBPrescaler(uint32_t Prescaler)
01475 {
01476   MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, Prescaler);
01477 }
01478 
01479 /**
01480   * @brief  Set APB1 prescaler
01481   * @rmtoll CFGR         PPRE1         LL_RCC_SetAPB1Prescaler
01482   * @param  Prescaler This parameter can be one of the following values:
01483   *         @arg @ref LL_RCC_APB1_DIV_1
01484   *         @arg @ref LL_RCC_APB1_DIV_2
01485   *         @arg @ref LL_RCC_APB1_DIV_4
01486   *         @arg @ref LL_RCC_APB1_DIV_8
01487   *         @arg @ref LL_RCC_APB1_DIV_16
01488   * @retval None
01489   */
01490 __STATIC_INLINE void LL_RCC_SetAPB1Prescaler(uint32_t Prescaler)
01491 {
01492   MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, Prescaler);
01493 }
01494 
01495 /**
01496   * @brief  Set APB2 prescaler
01497   * @rmtoll CFGR         PPRE2         LL_RCC_SetAPB2Prescaler
01498   * @param  Prescaler This parameter can be one of the following values:
01499   *         @arg @ref LL_RCC_APB2_DIV_1
01500   *         @arg @ref LL_RCC_APB2_DIV_2
01501   *         @arg @ref LL_RCC_APB2_DIV_4
01502   *         @arg @ref LL_RCC_APB2_DIV_8
01503   *         @arg @ref LL_RCC_APB2_DIV_16
01504   * @retval None
01505   */
01506 __STATIC_INLINE void LL_RCC_SetAPB2Prescaler(uint32_t Prescaler)
01507 {
01508   MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, Prescaler);
01509 }
01510 
01511 /**
01512   * @brief  Get AHB prescaler
01513   * @rmtoll CFGR         HPRE          LL_RCC_GetAHBPrescaler
01514   * @retval Returned value can be one of the following values:
01515   *         @arg @ref LL_RCC_SYSCLK_DIV_1
01516   *         @arg @ref LL_RCC_SYSCLK_DIV_2
01517   *         @arg @ref LL_RCC_SYSCLK_DIV_4
01518   *         @arg @ref LL_RCC_SYSCLK_DIV_8
01519   *         @arg @ref LL_RCC_SYSCLK_DIV_16
01520   *         @arg @ref LL_RCC_SYSCLK_DIV_64
01521   *         @arg @ref LL_RCC_SYSCLK_DIV_128
01522   *         @arg @ref LL_RCC_SYSCLK_DIV_256
01523   *         @arg @ref LL_RCC_SYSCLK_DIV_512
01524   */
01525 __STATIC_INLINE uint32_t LL_RCC_GetAHBPrescaler(void)
01526 {
01527   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_HPRE));
01528 }
01529 
01530 /**
01531   * @brief  Get APB1 prescaler
01532   * @rmtoll CFGR         PPRE1         LL_RCC_GetAPB1Prescaler
01533   * @retval Returned value can be one of the following values:
01534   *         @arg @ref LL_RCC_APB1_DIV_1
01535   *         @arg @ref LL_RCC_APB1_DIV_2
01536   *         @arg @ref LL_RCC_APB1_DIV_4
01537   *         @arg @ref LL_RCC_APB1_DIV_8
01538   *         @arg @ref LL_RCC_APB1_DIV_16
01539   */
01540 __STATIC_INLINE uint32_t LL_RCC_GetAPB1Prescaler(void)
01541 {
01542   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE1));
01543 }
01544 
01545 /**
01546   * @brief  Get APB2 prescaler
01547   * @rmtoll CFGR         PPRE2         LL_RCC_GetAPB2Prescaler
01548   * @retval Returned value can be one of the following values:
01549   *         @arg @ref LL_RCC_APB2_DIV_1
01550   *         @arg @ref LL_RCC_APB2_DIV_2
01551   *         @arg @ref LL_RCC_APB2_DIV_4
01552   *         @arg @ref LL_RCC_APB2_DIV_8
01553   *         @arg @ref LL_RCC_APB2_DIV_16
01554   */
01555 __STATIC_INLINE uint32_t LL_RCC_GetAPB2Prescaler(void)
01556 {
01557   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE2));
01558 }
01559 
01560 /**
01561   * @brief  Set Clock After Wake-Up From Stop mode
01562   * @rmtoll CFGR         STOPWUCK      LL_RCC_SetClkAfterWakeFromStop
01563   * @param  Clock This parameter can be one of the following values:
01564   *         @arg @ref LL_RCC_STOP_WAKEUPCLOCK_MSI
01565   *         @arg @ref LL_RCC_STOP_WAKEUPCLOCK_HSI
01566   * @retval None
01567   */
01568 __STATIC_INLINE void LL_RCC_SetClkAfterWakeFromStop(uint32_t Clock)
01569 {
01570   MODIFY_REG(RCC->CFGR, RCC_CFGR_STOPWUCK, Clock);
01571 }
01572 
01573 /**
01574   * @brief  Get Clock After Wake-Up From Stop mode
01575   * @rmtoll CFGR         STOPWUCK      LL_RCC_GetClkAfterWakeFromStop
01576   * @retval Returned value can be one of the following values:
01577   *         @arg @ref LL_RCC_STOP_WAKEUPCLOCK_MSI
01578   *         @arg @ref LL_RCC_STOP_WAKEUPCLOCK_HSI
01579   */
01580 __STATIC_INLINE uint32_t LL_RCC_GetClkAfterWakeFromStop(void)
01581 {
01582   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_STOPWUCK));
01583 }
01584 
01585 /**
01586   * @}
01587   */
01588 
01589 /** @defgroup RCC_LL_EF_MCO MCO
01590   * @{
01591   */
01592 
01593 /**
01594   * @brief  Configure MCOx
01595   * @rmtoll CFGR         MCOSEL        LL_RCC_ConfigMCO\n
01596   *         CFGR         MCO_PRE       LL_RCC_ConfigMCO
01597   * @param  MCOxSource This parameter can be one of the following values:
01598   *         @arg @ref LL_RCC_MCO1SOURCE_NOCLOCK
01599   *         @arg @ref LL_RCC_MCO1SOURCE_SYSCLK
01600   *         @arg @ref LL_RCC_MCO1SOURCE_MSI
01601   *         @arg @ref LL_RCC_MCO1SOURCE_HSI
01602   *         @arg @ref LL_RCC_MCO1SOURCE_HSE
01603   *         @arg @ref LL_RCC_MCO1SOURCE_PLLCLK
01604   *         @arg @ref LL_RCC_MCO1SOURCE_LSI
01605   *         @arg @ref LL_RCC_MCO1SOURCE_LSE
01606   * @param  MCOxPrescaler This parameter can be one of the following values:
01607   *         @arg @ref LL_RCC_MCO1_DIV_1
01608   *         @arg @ref LL_RCC_MCO1_DIV_2
01609   *         @arg @ref LL_RCC_MCO1_DIV_4
01610   *         @arg @ref LL_RCC_MCO1_DIV_8
01611   *         @arg @ref LL_RCC_MCO1_DIV_16
01612   * @retval None
01613   */
01614 __STATIC_INLINE void LL_RCC_ConfigMCO(uint32_t MCOxSource, uint32_t MCOxPrescaler)
01615 {
01616   MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL | RCC_CFGR_MCO_PRE, MCOxSource | MCOxPrescaler);
01617 }
01618 
01619 /**
01620   * @}
01621   */
01622 
01623 /** @defgroup RCC_LL_EF_Peripheral_Clock_Source Peripheral Clock Source
01624   * @{
01625   */
01626 
01627 /**
01628   * @brief  Configure USARTx clock source
01629   * @rmtoll CCIPR        USARTxSEL     LL_RCC_SetUSARTClockSource
01630   * @param  USARTxSource This parameter can be one of the following values:
01631   *         @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK2
01632   *         @arg @ref LL_RCC_USART1_CLKSOURCE_SYSCLK
01633   *         @arg @ref LL_RCC_USART1_CLKSOURCE_HSI
01634   *         @arg @ref LL_RCC_USART1_CLKSOURCE_LSE
01635   *         @arg @ref LL_RCC_USART2_CLKSOURCE_PCLK1
01636   *         @arg @ref LL_RCC_USART2_CLKSOURCE_SYSCLK
01637   *         @arg @ref LL_RCC_USART2_CLKSOURCE_HSI
01638   *         @arg @ref LL_RCC_USART2_CLKSOURCE_LSE
01639   *         @arg @ref LL_RCC_USART3_CLKSOURCE_PCLK1
01640   *         @arg @ref LL_RCC_USART3_CLKSOURCE_SYSCLK
01641   *         @arg @ref LL_RCC_USART3_CLKSOURCE_HSI
01642   *         @arg @ref LL_RCC_USART3_CLKSOURCE_LSE
01643   * @retval None
01644   */
01645 __STATIC_INLINE void LL_RCC_SetUSARTClockSource(uint32_t USARTxSource)
01646 {
01647   MODIFY_REG(RCC->CCIPR, (USARTxSource >> 16), (USARTxSource & 0x0000FFFF));
01648 }
01649 
01650 /**
01651   * @brief  Configure UARTx clock source
01652   * @rmtoll CCIPR        UARTxSEL      LL_RCC_SetUARTClockSource
01653   * @param  UARTxSource This parameter can be one of the following values:
01654   *         @arg @ref LL_RCC_UART4_CLKSOURCE_PCLK1
01655   *         @arg @ref LL_RCC_UART4_CLKSOURCE_SYSCLK
01656   *         @arg @ref LL_RCC_UART4_CLKSOURCE_HSI
01657   *         @arg @ref LL_RCC_UART4_CLKSOURCE_LSE
01658   *         @arg @ref LL_RCC_UART5_CLKSOURCE_PCLK1
01659   *         @arg @ref LL_RCC_UART5_CLKSOURCE_SYSCLK
01660   *         @arg @ref LL_RCC_UART5_CLKSOURCE_HSI
01661   *         @arg @ref LL_RCC_UART5_CLKSOURCE_LSE
01662   * @retval None
01663   */
01664 __STATIC_INLINE void LL_RCC_SetUARTClockSource(uint32_t UARTxSource)
01665 {
01666   MODIFY_REG(RCC->CCIPR, (UARTxSource >> 16), (UARTxSource & 0x0000FFFF));
01667 }
01668 
01669 /**
01670   * @brief  Configure LPUART1x clock source
01671   * @rmtoll CCIPR        LPUART1SEL    LL_RCC_SetLPUARTClockSource
01672   * @param  LPUARTxSource This parameter can be one of the following values:
01673   *         @arg @ref LL_RCC_LPUART1_CLKSOURCE_PCLK1
01674   *         @arg @ref LL_RCC_LPUART1_CLKSOURCE_SYSCLK
01675   *         @arg @ref LL_RCC_LPUART1_CLKSOURCE_HSI
01676   *         @arg @ref LL_RCC_LPUART1_CLKSOURCE_LSE
01677   * @retval None
01678   */
01679 __STATIC_INLINE void LL_RCC_SetLPUARTClockSource(uint32_t LPUARTxSource)
01680 {
01681   MODIFY_REG(RCC->CCIPR, RCC_CCIPR_LPUART1SEL, LPUARTxSource);
01682 }
01683 
01684 /**
01685   * @brief  Configure I2Cx clock source
01686   * @rmtoll CCIPR        I2CxSEL       LL_RCC_SetI2CClockSource
01687   * @param  I2CxSource This parameter can be one of the following values:
01688   *         @arg @ref LL_RCC_I2C1_CLKSOURCE_PCLK1
01689   *         @arg @ref LL_RCC_I2C1_CLKSOURCE_SYSCLK
01690   *         @arg @ref LL_RCC_I2C1_CLKSOURCE_HSI
01691   *         @arg @ref LL_RCC_I2C2_CLKSOURCE_PCLK1
01692   *         @arg @ref LL_RCC_I2C2_CLKSOURCE_SYSCLK
01693   *         @arg @ref LL_RCC_I2C2_CLKSOURCE_HSI
01694   *         @arg @ref LL_RCC_I2C3_CLKSOURCE_PCLK1
01695   *         @arg @ref LL_RCC_I2C3_CLKSOURCE_SYSCLK
01696   *         @arg @ref LL_RCC_I2C3_CLKSOURCE_HSI
01697   * @retval None
01698   */
01699 __STATIC_INLINE void LL_RCC_SetI2CClockSource(uint32_t I2CxSource)
01700 {
01701   MODIFY_REG(RCC->CCIPR, ((I2CxSource >> 4) & 0x000FF000), ((I2CxSource << 4) & 0x000FF000));
01702 }
01703 
01704 /**
01705   * @brief  Configure LPTIMx clock source
01706   * @rmtoll CCIPR        LPTIMxSEL     LL_RCC_SetLPTIMClockSource
01707   * @param  LPTIMxSource This parameter can be one of the following values:
01708   *         @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK1
01709   *         @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI
01710   *         @arg @ref LL_RCC_LPTIM1_CLKSOURCE_HSI
01711   *         @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE
01712   *         @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PCLK1
01713   *         @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSI
01714   *         @arg @ref LL_RCC_LPTIM2_CLKSOURCE_HSI
01715   *         @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSE
01716   * @retval None
01717   */
01718 __STATIC_INLINE void LL_RCC_SetLPTIMClockSource(uint32_t LPTIMxSource)
01719 {
01720   MODIFY_REG(RCC->CCIPR, (LPTIMxSource & 0xFFFF0000), (LPTIMxSource << 16));
01721 }
01722 
01723 /**
01724   * @brief  Configure SAIx clock source
01725   * @rmtoll CCIPR        SAIxSEL       LL_RCC_SetSAIClockSource
01726   * @param  SAIxSource This parameter can be one of the following values:
01727   *         @arg @ref LL_RCC_SAI1_CLKSOURCE_PLLSAI1
01728   *         @arg @ref LL_RCC_SAI1_CLKSOURCE_PLLSAI2
01729   *         @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL
01730   *         @arg @ref LL_RCC_SAI1_CLKSOURCE_PIN
01731   *         @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLSAI1
01732   *         @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLSAI2
01733   *         @arg @ref LL_RCC_SAI2_CLKSOURCE_PLL
01734   *         @arg @ref LL_RCC_SAI2_CLKSOURCE_PIN
01735   * @retval None
01736   */
01737 __STATIC_INLINE void LL_RCC_SetSAIClockSource(uint32_t SAIxSource)
01738 {
01739   MODIFY_REG(RCC->CCIPR, (SAIxSource & 0xFFFF0000), (SAIxSource << 16));
01740 }
01741 
01742 /**
01743   * @brief  Configure SDMMC1 clock source
01744   * @rmtoll CCIPR        CLK48SEL      LL_RCC_SetSDMMCClockSource
01745   * @param  SDMMCxSource This parameter can be one of the following values:
01746   *         @arg @ref LL_RCC_SDMMC1_CLKSOURCE_NONE
01747   *         @arg @ref LL_RCC_SDMMC1_CLKSOURCE_PLLSAI1
01748   *         @arg @ref LL_RCC_SDMMC1_CLKSOURCE_PLL
01749   *         @arg @ref LL_RCC_SDMMC1_CLKSOURCE_MSI
01750   * @retval None
01751   */
01752 __STATIC_INLINE void LL_RCC_SetSDMMCClockSource(uint32_t SDMMCxSource)
01753 {
01754   MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, SDMMCxSource);
01755 }
01756 
01757 /**
01758   * @brief  Configure RNG clock source
01759   * @rmtoll CCIPR        CLK48SEL      LL_RCC_SetRNGClockSource
01760   * @param  RNGxSource This parameter can be one of the following values:
01761   *         @arg @ref LL_RCC_RNG_CLKSOURCE_NONE
01762   *         @arg @ref LL_RCC_RNG_CLKSOURCE_PLLSAI1
01763   *         @arg @ref LL_RCC_RNG_CLKSOURCE_PLL
01764   *         @arg @ref LL_RCC_RNG_CLKSOURCE_MSI
01765   * @retval None
01766   */
01767 __STATIC_INLINE void LL_RCC_SetRNGClockSource(uint32_t RNGxSource)
01768 {
01769   MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, RNGxSource);
01770 }
01771 
01772 #if defined(USB_OTG_FS)
01773 /**
01774   * @brief  Configure USB clock source
01775   * @rmtoll CCIPR        CLK48SEL      LL_RCC_SetUSBClockSource
01776   * @param  USBxSource This parameter can be one of the following values:
01777   *         @arg @ref LL_RCC_USB_CLKSOURCE_NONE
01778   *         @arg @ref LL_RCC_USB_CLKSOURCE_PLLSAI1
01779   *         @arg @ref LL_RCC_USB_CLKSOURCE_PLL
01780   *         @arg @ref LL_RCC_USB_CLKSOURCE_MSI
01781   * @retval None
01782   */
01783 __STATIC_INLINE void LL_RCC_SetUSBClockSource(uint32_t USBxSource)
01784 {
01785   MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, USBxSource);
01786 }
01787 #endif /* USB_OTG_FS */
01788 
01789 /**
01790   * @brief  Configure ADC clock source
01791   * @rmtoll CCIPR        ADCSEL        LL_RCC_SetADCClockSource
01792   * @param  ADCxSource This parameter can be one of the following values:
01793   *         @arg @ref LL_RCC_ADC_CLKSOURCE_NONE
01794   *         @arg @ref LL_RCC_ADC_CLKSOURCE_PLLSAI1
01795   *         @arg @ref LL_RCC_ADC_CLKSOURCE_PLLSAI2
01796   *         @arg @ref LL_RCC_ADC_CLKSOURCE_SYSCLK
01797   * @retval None
01798   */
01799 __STATIC_INLINE void LL_RCC_SetADCClockSource(uint32_t ADCxSource)
01800 {
01801   MODIFY_REG(RCC->CCIPR, RCC_CCIPR_ADCSEL, ADCxSource);
01802 }
01803 
01804 /**
01805   * @brief  Configure SWPMI clock source
01806   * @rmtoll CCIPR        SWPMI1SEL     LL_RCC_SetSWPMIClockSource
01807   * @param  SWPMIxSource This parameter can be one of the following values:
01808   *         @arg @ref LL_RCC_SWPMI1_CLKSOURCE_PCLK
01809   *         @arg @ref LL_RCC_SWPMI1_CLKSOURCE_HSI
01810   * @retval None
01811   */
01812 __STATIC_INLINE void LL_RCC_SetSWPMIClockSource(uint32_t SWPMIxSource)
01813 {
01814   MODIFY_REG(RCC->CCIPR, RCC_CCIPR_SWPMI1SEL, SWPMIxSource);
01815 }
01816 
01817 /**
01818   * @brief  Configure DFSDM clock source
01819   * @rmtoll CCIPR        DFSDMSEL      LL_RCC_SetDFSDMClockSource
01820   * @param  DFSDMxSource This parameter can be one of the following values:
01821   *         @arg @ref LL_RCC_DFSDM_CLKSOURCE_PCLK
01822   *         @arg @ref LL_RCC_DFSDM_CLKSOURCE_SYSCLK
01823   * @retval None
01824   */
01825 __STATIC_INLINE void LL_RCC_SetDFSDMClockSource(uint32_t DFSDMxSource)
01826 {
01827   MODIFY_REG(RCC->CCIPR, RCC_CCIPR_DFSDMSEL, DFSDMxSource);
01828 }
01829 
01830 /**
01831   * @brief  Get USARTx clock source
01832   * @rmtoll CCIPR        USARTxSEL     LL_RCC_GetUSARTClockSource
01833   * @param  USARTx This parameter can be one of the following values:
01834   *         @arg @ref LL_RCC_USART1_CLKSOURCE
01835   *         @arg @ref LL_RCC_USART2_CLKSOURCE
01836   *         @arg @ref LL_RCC_USART3_CLKSOURCE
01837   * @retval Returned value can be one of the following values:
01838   *         @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK2
01839   *         @arg @ref LL_RCC_USART1_CLKSOURCE_SYSCLK
01840   *         @arg @ref LL_RCC_USART1_CLKSOURCE_HSI
01841   *         @arg @ref LL_RCC_USART1_CLKSOURCE_LSE
01842   *         @arg @ref LL_RCC_USART2_CLKSOURCE_PCLK1
01843   *         @arg @ref LL_RCC_USART2_CLKSOURCE_SYSCLK
01844   *         @arg @ref LL_RCC_USART2_CLKSOURCE_HSI
01845   *         @arg @ref LL_RCC_USART2_CLKSOURCE_LSE
01846   *         @arg @ref LL_RCC_USART3_CLKSOURCE_PCLK1
01847   *         @arg @ref LL_RCC_USART3_CLKSOURCE_SYSCLK
01848   *         @arg @ref LL_RCC_USART3_CLKSOURCE_HSI
01849   *         @arg @ref LL_RCC_USART3_CLKSOURCE_LSE
01850   */
01851 __STATIC_INLINE uint32_t LL_RCC_GetUSARTClockSource(uint32_t USARTx)
01852 {
01853   return (uint32_t)(READ_BIT(RCC->CCIPR, USARTx) | (USARTx << 16));
01854 }
01855 
01856 /**
01857   * @brief  Get UARTx clock source
01858   * @rmtoll CCIPR        UARTxSEL      LL_RCC_GetUARTClockSource
01859   * @param  UARTx This parameter can be one of the following values:
01860   *         @arg @ref LL_RCC_UART4_CLKSOURCE
01861   *         @arg @ref LL_RCC_UART5_CLKSOURCE
01862   * @retval Returned value can be one of the following values:
01863   *         @arg @ref LL_RCC_UART4_CLKSOURCE_PCLK1
01864   *         @arg @ref LL_RCC_UART4_CLKSOURCE_SYSCLK
01865   *         @arg @ref LL_RCC_UART4_CLKSOURCE_HSI
01866   *         @arg @ref LL_RCC_UART4_CLKSOURCE_LSE
01867   *         @arg @ref LL_RCC_UART5_CLKSOURCE_PCLK1
01868   *         @arg @ref LL_RCC_UART5_CLKSOURCE_SYSCLK
01869   *         @arg @ref LL_RCC_UART5_CLKSOURCE_HSI
01870   *         @arg @ref LL_RCC_UART5_CLKSOURCE_LSE
01871   */
01872 __STATIC_INLINE uint32_t LL_RCC_GetUARTClockSource(uint32_t UARTx)
01873 {
01874   return (uint32_t)(READ_BIT(RCC->CCIPR, UARTx) | (UARTx << 16));
01875 }
01876 
01877 /**
01878   * @brief  Get LPUARTx clock source
01879   * @rmtoll CCIPR        LPUART1SEL    LL_RCC_GetLPUARTClockSource
01880   * @param  LPUARTx This parameter can be one of the following values:
01881   *         @arg @ref LL_RCC_LPUART1_CLKSOURCE
01882   * @retval Returned value can be one of the following values:
01883   *         @arg @ref LL_RCC_LPUART1_CLKSOURCE_PCLK1
01884   *         @arg @ref LL_RCC_LPUART1_CLKSOURCE_SYSCLK
01885   *         @arg @ref LL_RCC_LPUART1_CLKSOURCE_HSI
01886   *         @arg @ref LL_RCC_LPUART1_CLKSOURCE_LSE
01887   */
01888 __STATIC_INLINE uint32_t LL_RCC_GetLPUARTClockSource(uint32_t LPUARTx)
01889 {
01890   return (uint32_t)(READ_BIT(RCC->CCIPR, LPUARTx));
01891 }
01892 
01893 /**
01894   * @brief  Get I2Cx clock source
01895   * @rmtoll CCIPR        I2CxSEL       LL_RCC_GetI2CClockSource
01896   * @param  I2Cx This parameter can be one of the following values:
01897   *         @arg @ref LL_RCC_I2C1_CLKSOURCE
01898   *         @arg @ref LL_RCC_I2C2_CLKSOURCE
01899   *         @arg @ref LL_RCC_I2C3_CLKSOURCE
01900   * @retval Returned value can be one of the following values:
01901   *         @arg @ref LL_RCC_I2C1_CLKSOURCE_PCLK1
01902   *         @arg @ref LL_RCC_I2C1_CLKSOURCE_SYSCLK
01903   *         @arg @ref LL_RCC_I2C1_CLKSOURCE_HSI
01904   *         @arg @ref LL_RCC_I2C2_CLKSOURCE_PCLK1
01905   *         @arg @ref LL_RCC_I2C2_CLKSOURCE_SYSCLK
01906   *         @arg @ref LL_RCC_I2C2_CLKSOURCE_HSI
01907   *         @arg @ref LL_RCC_I2C3_CLKSOURCE_PCLK1
01908   *         @arg @ref LL_RCC_I2C3_CLKSOURCE_SYSCLK
01909   *         @arg @ref LL_RCC_I2C3_CLKSOURCE_HSI
01910   */
01911 __STATIC_INLINE uint32_t LL_RCC_GetI2CClockSource(uint32_t I2Cx)
01912 {
01913   return (uint32_t)((READ_BIT(RCC->CCIPR, I2Cx) >> 4) | (I2Cx << 4));
01914 }
01915 
01916 /**
01917   * @brief  Get LPTIMx clock source
01918   * @rmtoll CCIPR        LPTIMxSEL     LL_RCC_GetLPTIMClockSource
01919   * @param  LPTIMx This parameter can be one of the following values:
01920   *         @arg @ref LL_RCC_LPTIM1_CLKSOURCE
01921   * @retval Returned value can be one of the following values:
01922   *         @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK1
01923   *         @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI
01924   *         @arg @ref LL_RCC_LPTIM1_CLKSOURCE_HSI
01925   *         @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE
01926   *         @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PCLK1
01927   *         @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSI
01928   *         @arg @ref LL_RCC_LPTIM2_CLKSOURCE_HSI
01929   *         @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSE
01930   */
01931 __STATIC_INLINE uint32_t LL_RCC_GetLPTIMClockSource(uint32_t LPTIMx)
01932 {
01933   return (uint32_t)(READ_BIT(RCC->CCIPR, LPTIMx) >> 16 | LPTIMx);
01934 }
01935 
01936 /**
01937   * @brief  Get SAIx clock source
01938   * @rmtoll CCIPR        SAIxSEL       LL_RCC_GetSAIClockSource
01939   * @param  SAIx This parameter can be one of the following values:
01940   *         @arg @ref LL_RCC_SAI1_CLKSOURCE
01941   *         @arg @ref LL_RCC_SAI2_CLKSOURCE
01942   * @retval Returned value can be one of the following values:
01943   *         @arg @ref LL_RCC_SAI1_CLKSOURCE_PLLSAI1
01944   *         @arg @ref LL_RCC_SAI1_CLKSOURCE_PLLSAI2
01945   *         @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL
01946   *         @arg @ref LL_RCC_SAI1_CLKSOURCE_PIN
01947   *         @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLSAI1
01948   *         @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLSAI2
01949   *         @arg @ref LL_RCC_SAI2_CLKSOURCE_PLL
01950   *         @arg @ref LL_RCC_SAI2_CLKSOURCE_PIN
01951   */
01952 __STATIC_INLINE uint32_t LL_RCC_GetSAIClockSource(uint32_t SAIx)
01953 {
01954   return (uint32_t)(READ_BIT(RCC->CCIPR, SAIx) >> 16 | SAIx);
01955 }
01956 
01957 /**
01958   * @brief  Get SDMMCx clock source
01959   * @rmtoll CCIPR        CLK48SEL      LL_RCC_GetSDMMCClockSource
01960   * @param  SDMMCx This parameter can be one of the following values:
01961   *         @arg @ref LL_RCC_SDMMC1_CLKSOURCE
01962   * @retval Returned value can be one of the following values:
01963   *         @arg @ref LL_RCC_SDMMC1_CLKSOURCE_NONE
01964   *         @arg @ref LL_RCC_SDMMC1_CLKSOURCE_PLLSAI1
01965   *         @arg @ref LL_RCC_SDMMC1_CLKSOURCE_PLL
01966   *         @arg @ref LL_RCC_SDMMC1_CLKSOURCE_MSI
01967   */
01968 __STATIC_INLINE uint32_t LL_RCC_GetSDMMCClockSource(uint32_t SDMMCx)
01969 {
01970   return (uint32_t)(READ_BIT(RCC->CCIPR, SDMMCx));
01971 }
01972 
01973 /**
01974   * @brief  Get RNGx clock source
01975   * @rmtoll CCIPR        CLK48SEL      LL_RCC_GetRNGClockSource
01976   * @param  RNGx This parameter can be one of the following values:
01977   *         @arg @ref LL_RCC_RNG_CLKSOURCE
01978   * @retval Returned value can be one of the following values:
01979   *         @arg @ref LL_RCC_RNG_CLKSOURCE_NONE
01980   *         @arg @ref LL_RCC_RNG_CLKSOURCE_PLLSAI1
01981   *         @arg @ref LL_RCC_RNG_CLKSOURCE_PLL
01982   *         @arg @ref LL_RCC_RNG_CLKSOURCE_MSI
01983   */
01984 __STATIC_INLINE uint32_t LL_RCC_GetRNGClockSource(uint32_t RNGx)
01985 {
01986   return (uint32_t)(READ_BIT(RCC->CCIPR, RNGx));
01987 }
01988 
01989 #if defined(USB_OTG_FS)
01990 /**
01991   * @brief  Get USBx clock source
01992   * @rmtoll CCIPR        CLK48SEL      LL_RCC_GetUSBClockSource
01993   * @param  USBx This parameter can be one of the following values:
01994   *         @arg @ref LL_RCC_USB_CLKSOURCE
01995   * @retval Returned value can be one of the following values:
01996   *         @arg @ref LL_RCC_USB_CLKSOURCE_NONE
01997   *         @arg @ref LL_RCC_USB_CLKSOURCE_PLLSAI1
01998   *         @arg @ref LL_RCC_USB_CLKSOURCE_PLL
01999   *         @arg @ref LL_RCC_USB_CLKSOURCE_MSI
02000   */
02001 __STATIC_INLINE uint32_t LL_RCC_GetUSBClockSource(uint32_t USBx)
02002 {
02003   return (uint32_t)(READ_BIT(RCC->CCIPR, USBx));
02004 }
02005 #endif /* USB_OTG_FS */
02006 
02007 /**
02008   * @brief  Get ADCx clock source
02009   * @rmtoll CCIPR        ADCSEL        LL_RCC_GetADCClockSource
02010   * @param  ADCx This parameter can be one of the following values:
02011   *         @arg @ref LL_RCC_ADC_CLKSOURCE
02012   * @retval Returned value can be one of the following values:
02013   *         @arg @ref LL_RCC_ADC_CLKSOURCE_NONE
02014   *         @arg @ref LL_RCC_ADC_CLKSOURCE_PLLSAI1
02015   *         @arg @ref LL_RCC_ADC_CLKSOURCE_PLLSAI2
02016   *         @arg @ref LL_RCC_ADC_CLKSOURCE_SYSCLK
02017   */
02018 __STATIC_INLINE uint32_t LL_RCC_GetADCClockSource(uint32_t ADCx)
02019 {
02020   return (uint32_t)(READ_BIT(RCC->CCIPR, ADCx));
02021 }
02022 
02023 /**
02024   * @brief  Get SWPMIx clock source
02025   * @rmtoll CCIPR        SWPMI1SEL     LL_RCC_GetSWPMIClockSource
02026   * @param  SPWMIx This parameter can be one of the following values:
02027   *         @arg @ref LL_RCC_SWPMI1_CLKSOURCE
02028   * @retval Returned value can be one of the following values:
02029   *         @arg @ref LL_RCC_SWPMI1_CLKSOURCE_PCLK
02030   *         @arg @ref LL_RCC_SWPMI1_CLKSOURCE_HSI
02031   */
02032 __STATIC_INLINE uint32_t LL_RCC_GetSWPMIClockSource(uint32_t SPWMIx)
02033 {
02034   return (uint32_t)(READ_BIT(RCC->CCIPR, SPWMIx));
02035 }
02036 
02037 /**
02038   * @brief  Get DFSDMx clock source
02039   * @rmtoll CCIPR        DFSDMSEL      LL_RCC_GetDFSDMClockSource
02040   * @param  DFSDMx This parameter can be one of the following values:
02041   *         @arg @ref LL_RCC_DFSDM_CLKSOURCE
02042   * @retval Returned value can be one of the following values:
02043   *         @arg @ref LL_RCC_DFSDM_CLKSOURCE_PCLK
02044   *         @arg @ref LL_RCC_DFSDM_CLKSOURCE_SYSCLK
02045   */
02046 __STATIC_INLINE uint32_t LL_RCC_GetDFSDMClockSource(uint32_t DFSDMx)
02047 {
02048   return (uint32_t)(READ_BIT(RCC->CCIPR, DFSDMx));
02049 }
02050 
02051 /**
02052   * @}
02053   */
02054 
02055 /** @defgroup RCC_LL_EF_RTC RTC
02056   * @{
02057   */
02058 
02059 /**
02060   * @brief  Set RTC Clock Source
02061   * @note Once the RTC clock source has been selected, it cannot be changed anymore unless
02062   *       the Backup domain is reset, or unless a failure is detected on LSE (LSECSSD is
02063   *       set). The BDRST bit can be used to reset them.
02064   * @rmtoll BDCR         RTCSEL        LL_RCC_SetRTCClockSource
02065   * @param  Source This parameter can be one of the following values:
02066   *         @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
02067   *         @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
02068   *         @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
02069   *         @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV32
02070   * @retval None
02071   */
02072 __STATIC_INLINE void LL_RCC_SetRTCClockSource(uint32_t Source)
02073 {
02074   MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, Source);
02075 }
02076 
02077 /**
02078   * @brief  Get RTC Clock Source
02079   * @rmtoll BDCR         RTCSEL        LL_RCC_GetRTCClockSource
02080   * @retval Returned value can be one of the following values:
02081   *         @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
02082   *         @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
02083   *         @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
02084   *         @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV32
02085   */
02086 __STATIC_INLINE uint32_t LL_RCC_GetRTCClockSource(void)
02087 {
02088   return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL));
02089 }
02090 
02091 /**
02092   * @brief  Enable RTC
02093   * @rmtoll BDCR         RTCEN         LL_RCC_EnableRTC
02094   * @retval None
02095   */
02096 __STATIC_INLINE void LL_RCC_EnableRTC(void)
02097 {
02098   SET_BIT(RCC->BDCR, RCC_BDCR_RTCEN);
02099 }
02100 
02101 /**
02102   * @brief  Disable RTC
02103   * @rmtoll BDCR         RTCEN         LL_RCC_DisableRTC
02104   * @retval None
02105   */
02106 __STATIC_INLINE void LL_RCC_DisableRTC(void)
02107 {
02108   CLEAR_BIT(RCC->BDCR, RCC_BDCR_RTCEN);
02109 }
02110 
02111 /**
02112   * @brief  Check if RTC has been enabled or not
02113   * @rmtoll BDCR         RTCEN         LL_RCC_IsEnabledRTC
02114   * @retval State of bit (1 or 0).
02115   */
02116 __STATIC_INLINE uint32_t LL_RCC_IsEnabledRTC(void)
02117 {
02118   return (READ_BIT(RCC->BDCR, RCC_BDCR_RTCEN) == (RCC_BDCR_RTCEN));
02119 }
02120 
02121 /**
02122   * @brief  Force the Backup domain reset
02123   * @rmtoll BDCR         BDRST         LL_RCC_ForceBackupDomainReset
02124   * @retval None
02125   */
02126 __STATIC_INLINE void LL_RCC_ForceBackupDomainReset(void)
02127 {
02128   SET_BIT(RCC->BDCR, RCC_BDCR_BDRST);
02129 }
02130 
02131 /**
02132   * @brief  Release the Backup domain reset
02133   * @rmtoll BDCR         BDRST         LL_RCC_ReleaseBackupDomainReset
02134   * @retval None
02135   */
02136 __STATIC_INLINE void LL_RCC_ReleaseBackupDomainReset(void)
02137 {
02138   CLEAR_BIT(RCC->BDCR, RCC_BDCR_BDRST);
02139 }
02140 
02141 /**
02142   * @}
02143   */
02144 
02145 /** @defgroup RCC_LL_EF_PLL PLL
02146   * @{
02147   */
02148 
02149 /**
02150   * @brief  Enable PLL
02151   * @rmtoll CR           PLLON         LL_RCC_PLL_Enable
02152   * @retval None
02153   */
02154 __STATIC_INLINE void LL_RCC_PLL_Enable(void)
02155 {
02156   SET_BIT(RCC->CR, RCC_CR_PLLON);
02157 }
02158 
02159 /**
02160   * @brief  Disable PLL
02161   * @note Cannot be disabled if the PLL clock is used as the system clock
02162   * @rmtoll CR           PLLON         LL_RCC_PLL_Disable
02163   * @retval None
02164   */
02165 __STATIC_INLINE void LL_RCC_PLL_Disable(void)
02166 {
02167   CLEAR_BIT(RCC->CR, RCC_CR_PLLON);
02168 }
02169 
02170 /**
02171   * @brief  Check if PLL Ready
02172   * @rmtoll CR           PLLRDY        LL_RCC_PLL_IsReady
02173   * @retval State of bit (1 or 0).
02174   */
02175 __STATIC_INLINE uint32_t LL_RCC_PLL_IsReady(void)
02176 {
02177   return (READ_BIT(RCC->CR, RCC_CR_PLLRDY) == (RCC_CR_PLLRDY));
02178 }
02179 
02180 /**
02181   * @brief  Configure PLL used for SYSCLK Domain
02182   * @note PLL Source and PLLM Divider can be written only when PLL,
02183   *       PLLSAI1 and PLLSAI2 are disabled
02184   * @note PLLN/PLLR can be written only when PLL is disabled
02185   * @rmtoll PLLCFGR      PLLSRC        LL_RCC_PLL_ConfigDomain_SYS\n
02186   *         PLLCFGR      PLLM          LL_RCC_PLL_ConfigDomain_SYS\n
02187   *         PLLCFGR      PLLN          LL_RCC_PLL_ConfigDomain_SYS\n
02188   *         PLLCFGR      PLLR          LL_RCC_PLL_ConfigDomain_SYS
02189   * @param  Source This parameter can be one of the following values:
02190   *         @arg @ref LL_RCC_PLLSOURCE_NONE
02191   *         @arg @ref LL_RCC_PLLSOURCE_MSI
02192   *         @arg @ref LL_RCC_PLLSOURCE_HSI
02193   *         @arg @ref LL_RCC_PLLSOURCE_HSE
02194   * @param  PLLM This parameter can be one of the following values:
02195   *         @arg @ref LL_RCC_PLLM_DIV_1
02196   *         @arg @ref LL_RCC_PLLM_DIV_2
02197   *         @arg @ref LL_RCC_PLLM_DIV_3
02198   *         @arg @ref LL_RCC_PLLM_DIV_4
02199   *         @arg @ref LL_RCC_PLLM_DIV_5
02200   *         @arg @ref LL_RCC_PLLM_DIV_6
02201   *         @arg @ref LL_RCC_PLLM_DIV_7
02202   *         @arg @ref LL_RCC_PLLM_DIV_8
02203   * @param  PLLN Between 8 and 86
02204   * @param  PLLR This parameter can be one of the following values:
02205   *         @arg @ref LL_RCC_PLLR_DIV_2
02206   *         @arg @ref LL_RCC_PLLR_DIV_4
02207   *         @arg @ref LL_RCC_PLLR_DIV_6
02208   *         @arg @ref LL_RCC_PLLR_DIV_8
02209   * @retval None
02210   */
02211 __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR)
02212 {
02213   MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLR,
02214              Source | PLLM | PLLN << RCC_POSITION_PLLN | PLLR);
02215 }
02216 
02217 /**
02218   * @brief  Configure PLL used for SAI domain clock
02219   * @note PLL Source and PLLM Divider can be written only when PLL,
02220   *       PLLSAI1 and PLLSAI2 are disabled
02221   * @note PLLN/PLLP can be written only when PLL is disabled
02222   * @note This  can be selected for SAI1 or SAI2
02223   * @rmtoll PLLCFGR      PLLSRC        LL_RCC_PLL_ConfigDomain_SAI\n
02224   *         PLLCFGR      PLLM          LL_RCC_PLL_ConfigDomain_SAI\n
02225   *         PLLCFGR      PLLN          LL_RCC_PLL_ConfigDomain_SAI\n
02226   *         PLLCFGR      PLLP          LL_RCC_PLL_ConfigDomain_SAI
02227   * @param  Source This parameter can be one of the following values:
02228   *         @arg @ref LL_RCC_PLLSOURCE_NONE
02229   *         @arg @ref LL_RCC_PLLSOURCE_MSI
02230   *         @arg @ref LL_RCC_PLLSOURCE_HSI
02231   *         @arg @ref LL_RCC_PLLSOURCE_HSE
02232   * @param  PLLM This parameter can be one of the following values:
02233   *         @arg @ref LL_RCC_PLLM_DIV_1
02234   *         @arg @ref LL_RCC_PLLM_DIV_2
02235   *         @arg @ref LL_RCC_PLLM_DIV_3
02236   *         @arg @ref LL_RCC_PLLM_DIV_4
02237   *         @arg @ref LL_RCC_PLLM_DIV_5
02238   *         @arg @ref LL_RCC_PLLM_DIV_6
02239   *         @arg @ref LL_RCC_PLLM_DIV_7
02240   *         @arg @ref LL_RCC_PLLM_DIV_8
02241   * @param  PLLN Between 8 and 86
02242   * @param  PLLP This parameter can be one of the following values:
02243   *         @arg @ref LL_RCC_PLLP_DIV_7
02244   *         @arg @ref LL_RCC_PLLP_DIV_17
02245   * @retval None
02246   */
02247 __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP)
02248 {
02249   MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLP,
02250              Source | PLLM | PLLN << RCC_POSITION_PLLN | PLLP);
02251 }
02252 
02253 /**
02254   * @brief  Configure PLL used for 48Mhz domain clock
02255   * @note PLL Source and PLLM Divider can be written only when PLL,
02256   *       PLLSAI1 and PLLSAI2 are disabled
02257   * @note PLLN/PLLQ can be written only when PLL is disabled
02258   * @note This  can be selected for USB, RNG, SDMMC
02259   * @rmtoll PLLCFGR      PLLSRC        LL_RCC_PLL_ConfigDomain_48M\n
02260   *         PLLCFGR      PLLM          LL_RCC_PLL_ConfigDomain_48M\n
02261   *         PLLCFGR      PLLN          LL_RCC_PLL_ConfigDomain_48M\n
02262   *         PLLCFGR      PLLQ          LL_RCC_PLL_ConfigDomain_48M
02263   * @param  Source This parameter can be one of the following values:
02264   *         @arg @ref LL_RCC_PLLSOURCE_NONE
02265   *         @arg @ref LL_RCC_PLLSOURCE_MSI
02266   *         @arg @ref LL_RCC_PLLSOURCE_HSI
02267   *         @arg @ref LL_RCC_PLLSOURCE_HSE
02268   * @param  PLLM This parameter can be one of the following values:
02269   *         @arg @ref LL_RCC_PLLM_DIV_1
02270   *         @arg @ref LL_RCC_PLLM_DIV_2
02271   *         @arg @ref LL_RCC_PLLM_DIV_3
02272   *         @arg @ref LL_RCC_PLLM_DIV_4
02273   *         @arg @ref LL_RCC_PLLM_DIV_5
02274   *         @arg @ref LL_RCC_PLLM_DIV_6
02275   *         @arg @ref LL_RCC_PLLM_DIV_7
02276   *         @arg @ref LL_RCC_PLLM_DIV_8
02277   * @param  PLLN Between 8 and 86
02278   * @param  PLLQ This parameter can be one of the following values:
02279   *         @arg @ref LL_RCC_PLLQ_DIV_2
02280   *         @arg @ref LL_RCC_PLLQ_DIV_4
02281   *         @arg @ref LL_RCC_PLLQ_DIV_6
02282   *         @arg @ref LL_RCC_PLLQ_DIV_8
02283   * @retval None
02284   */
02285 __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_48M(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLQ)
02286 {
02287   MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLQ,
02288              Source | PLLM | PLLN << RCC_POSITION_PLLN | PLLQ);
02289 }
02290 
02291 /**
02292   * @brief  Get Main PLL multiplication factor for VCO
02293   * @rmtoll PLLCFGR      PLLN          LL_RCC_PLL_GetN
02294   * @retval Between 8 and 86
02295   */
02296 __STATIC_INLINE uint32_t LL_RCC_PLL_GetN(void)
02297 {
02298   return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >>  RCC_POSITION_PLLN);
02299 }
02300 
02301 /**
02302   * @brief  Get Main PLL division factor for PLLP
02303   * @note used for PLLSAI3CLK (SAI1 and SAI2 clock)
02304   * @rmtoll PLLCFGR      PLLP          LL_RCC_PLL_GetP
02305   * @retval Returned value can be one of the following values:
02306   *         @arg @ref LL_RCC_PLLP_DIV_7
02307   *         @arg @ref LL_RCC_PLLP_DIV_17
02308   */
02309 __STATIC_INLINE uint32_t LL_RCC_PLL_GetP(void)
02310 {
02311   return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLP));
02312 }
02313 
02314 /**
02315   * @brief  Get Main PLL division factor for PLLQ
02316   * @note used for PLL48M1CLK selected for USB, RNG, SDMMC (48 MHz clock)
02317   * @rmtoll PLLCFGR      PLLQ          LL_RCC_PLL_GetQ
02318   * @retval Returned value can be one of the following values:
02319   *         @arg @ref LL_RCC_PLLQ_DIV_2
02320   *         @arg @ref LL_RCC_PLLQ_DIV_4
02321   *         @arg @ref LL_RCC_PLLQ_DIV_6
02322   *         @arg @ref LL_RCC_PLLQ_DIV_8
02323   */
02324 __STATIC_INLINE uint32_t LL_RCC_PLL_GetQ(void)
02325 {
02326   return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQ));
02327 }
02328 
02329 /**
02330   * @brief  Get Main PLL division factor for PLLR
02331   * @note used for PLLCLK (system clock)
02332   * @rmtoll PLLCFGR      PLLR          LL_RCC_PLL_GetR
02333   * @retval Returned value can be one of the following values:
02334   *         @arg @ref LL_RCC_PLLR_DIV_2
02335   *         @arg @ref LL_RCC_PLLR_DIV_4
02336   *         @arg @ref LL_RCC_PLLR_DIV_6
02337   *         @arg @ref LL_RCC_PLLR_DIV_8
02338   */
02339 __STATIC_INLINE uint32_t LL_RCC_PLL_GetR(void)
02340 {
02341   return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLR));
02342 }
02343 
02344 /**
02345   * @brief  Get the oscillator used as PLL clock source.
02346   * @rmtoll PLLCFGR      PLLSRC        LL_RCC_PLL_GetMainSource
02347   * @retval Returned value can be one of the following values:
02348   *         @arg @ref LL_RCC_PLLSOURCE_NONE
02349   *         @arg @ref LL_RCC_PLLSOURCE_MSI
02350   *         @arg @ref LL_RCC_PLLSOURCE_HSI
02351   *         @arg @ref LL_RCC_PLLSOURCE_HSE
02352   */
02353 __STATIC_INLINE uint32_t LL_RCC_PLL_GetMainSource(void)
02354 {
02355   return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC));
02356 }
02357 
02358 /**
02359   * @brief  Get Division factor for the main PLL and other PLL
02360   * @rmtoll PLLCFGR      PLLM          LL_RCC_PLL_GetDivider
02361   * @retval Returned value can be one of the following values:
02362   *         @arg @ref LL_RCC_PLLM_DIV_1
02363   *         @arg @ref LL_RCC_PLLM_DIV_2
02364   *         @arg @ref LL_RCC_PLLM_DIV_3
02365   *         @arg @ref LL_RCC_PLLM_DIV_4
02366   *         @arg @ref LL_RCC_PLLM_DIV_5
02367   *         @arg @ref LL_RCC_PLLM_DIV_6
02368   *         @arg @ref LL_RCC_PLLM_DIV_7
02369   *         @arg @ref LL_RCC_PLLM_DIV_8
02370   */
02371 __STATIC_INLINE uint32_t LL_RCC_PLL_GetDivider(void)
02372 {
02373   return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM));
02374 }
02375 
02376 /**
02377   * @brief  Enable PLL output mapped on SAI domain clock
02378   * @rmtoll PLLCFGR      PLLPEN        LL_RCC_PLL_EnableDomain_SAI
02379   * @retval None
02380   */
02381 __STATIC_INLINE void LL_RCC_PLL_EnableDomain_SAI(void)
02382 {
02383   SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLPEN);
02384 }
02385 
02386 /**
02387   * @brief  Disable PLL output mapped on SAI domain clock
02388   * @note Cannot be disabled if the PLL clock is used as the system
02389   *       clock
02390   * @note In order to save power, when the PLLCLK  of the PLL is
02391   *       not used,  should be 0
02392   * @rmtoll PLLCFGR      PLLPEN        LL_RCC_PLL_DisableDomain_SAI
02393   * @retval None
02394   */
02395 __STATIC_INLINE void LL_RCC_PLL_DisableDomain_SAI(void)
02396 {
02397   CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLPEN);
02398 }
02399 
02400 /**
02401   * @brief  Enable PLL output mapped on 48MHz domain clock
02402   * @rmtoll PLLCFGR      PLLQEN        LL_RCC_PLL_EnableDomain_48M
02403   * @retval None
02404   */
02405 __STATIC_INLINE void LL_RCC_PLL_EnableDomain_48M(void)
02406 {
02407   SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQEN);
02408 }
02409 
02410 /**
02411   * @brief  Disable PLL output mapped on 48MHz domain clock
02412   * @note Cannot be disabled if the PLL clock is used as the system
02413   *       clock
02414   * @note In order to save power, when the PLLCLK  of the PLL is
02415   *       not used,  should be 0
02416   * @rmtoll PLLCFGR      PLLQEN        LL_RCC_PLL_DisableDomain_48M
02417   * @retval None
02418   */
02419 __STATIC_INLINE void LL_RCC_PLL_DisableDomain_48M(void)
02420 {
02421   CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQEN);
02422 }
02423 
02424 /**
02425   * @brief  Enable PLL output mapped on SYSCLK domain
02426   * @rmtoll PLLCFGR      PLLREN        LL_RCC_PLL_EnableDomain_SYS
02427   * @retval None
02428   */
02429 __STATIC_INLINE void LL_RCC_PLL_EnableDomain_SYS(void)
02430 {
02431   SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLREN);
02432 }
02433 
02434 /**
02435   * @brief  Disable PLL output mapped on SYSCLK domain
02436   * @note Cannot be disabled if the PLL clock is used as the system
02437   *       clock
02438   * @note In order to save power, when the PLLCLK  of the PLL is
02439   *       not used, Main PLL  should be 0
02440   * @rmtoll PLLCFGR      PLLREN        LL_RCC_PLL_DisableDomain_SYS
02441   * @retval None
02442   */
02443 __STATIC_INLINE void LL_RCC_PLL_DisableDomain_SYS(void)
02444 {
02445   CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLREN);
02446 }
02447 
02448 /**
02449   * @}
02450   */
02451 
02452 /** @defgroup RCC_LL_EF_PLLSAI1 PLLSAI1
02453   * @{
02454   */
02455 
02456 /**
02457   * @brief  Enable PLLSAI1
02458   * @rmtoll CR           PLLSAI1ON     LL_RCC_PLLSAI1_Enable
02459   * @retval None
02460   */
02461 __STATIC_INLINE void LL_RCC_PLLSAI1_Enable(void)
02462 {
02463   SET_BIT(RCC->CR, RCC_CR_PLLSAI1ON);
02464 }
02465 
02466 /**
02467   * @brief  Disable PLLSAI1
02468   * @rmtoll CR           PLLSAI1ON     LL_RCC_PLLSAI1_Disable
02469   * @retval None
02470   */
02471 __STATIC_INLINE void LL_RCC_PLLSAI1_Disable(void)
02472 {
02473   CLEAR_BIT(RCC->CR, RCC_CR_PLLSAI1ON);
02474 }
02475 
02476 /**
02477   * @brief  Check if PLLSAI1 Ready
02478   * @rmtoll CR           PLLSAI1RDY    LL_RCC_PLLSAI1_IsReady
02479   * @retval State of bit (1 or 0).
02480   */
02481 __STATIC_INLINE uint32_t LL_RCC_PLLSAI1_IsReady(void)
02482 {
02483   return (READ_BIT(RCC->CR, RCC_CR_PLLSAI1RDY) == (RCC_CR_PLLSAI1RDY));
02484 }
02485 
02486 /**
02487   * @brief  Configure PLLSAI1 used for 48Mhz domain clock
02488   * @note PLL Source and PLLM Divider can be written only when PLL,
02489   *       PLLSAI1 and PLLSAI2 are disabled
02490   * @note PLLN/PLLQ can be written only when PLLSAI1 is disabled
02491   * @note This  can be selected for USB, RNG, SDMMC
02492   * @rmtoll PLLCFGR      PLLSRC        LL_RCC_PLLSAI1_ConfigDomain_48M\n
02493   *         PLLCFGR      PLLM          LL_RCC_PLLSAI1_ConfigDomain_48M\n
02494   *         PLLSAI1CFGR  PLLSAI1N      LL_RCC_PLLSAI1_ConfigDomain_48M\n
02495   *         PLLSAI1CFGR  PLLSAI1Q      LL_RCC_PLLSAI1_ConfigDomain_48M
02496   * @param  Source This parameter can be one of the following values:
02497   *         @arg @ref LL_RCC_PLLSOURCE_NONE
02498   *         @arg @ref LL_RCC_PLLSOURCE_MSI
02499   *         @arg @ref LL_RCC_PLLSOURCE_HSI
02500   *         @arg @ref LL_RCC_PLLSOURCE_HSE
02501   * @param  PLLM This parameter can be one of the following values:
02502   *         @arg @ref LL_RCC_PLLM_DIV_1
02503   *         @arg @ref LL_RCC_PLLM_DIV_2
02504   *         @arg @ref LL_RCC_PLLM_DIV_3
02505   *         @arg @ref LL_RCC_PLLM_DIV_4
02506   *         @arg @ref LL_RCC_PLLM_DIV_5
02507   *         @arg @ref LL_RCC_PLLM_DIV_6
02508   *         @arg @ref LL_RCC_PLLM_DIV_7
02509   *         @arg @ref LL_RCC_PLLM_DIV_8
02510   * @param  PLLN Between 8 and 86
02511   * @param  PLLQ This parameter can be one of the following values:
02512   *         @arg @ref LL_RCC_PLLSAI1Q_DIV2
02513   *         @arg @ref LL_RCC_PLLSAI1Q_DIV4
02514   *         @arg @ref LL_RCC_PLLSAI1Q_DIV6
02515   *         @arg @ref LL_RCC_PLLSAI1Q_DIV8
02516   * @retval None
02517   */
02518 __STATIC_INLINE void LL_RCC_PLLSAI1_ConfigDomain_48M(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLQ)
02519 {
02520   MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, Source | PLLM);
02521   MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1Q, PLLN << RCC_POSITION_PLLSAI1N | PLLQ);
02522 }
02523 
02524 /**
02525   * @brief  Configure PLLSAI1 used for SAI domain clock
02526   * @note PLL Source and PLLM Divider can be written only when PLL,
02527   *       PLLSAI1 and PLLSAI2 are disabled
02528   * @note PLLN/PLLP can be written only when PLLSAI1 is disabled
02529   * @note This  can be selected for SAI1 or SAI2
02530   * @rmtoll PLLCFGR      PLLSRC        LL_RCC_PLLSAI1_ConfigDomain_SAI\n
02531   *         PLLCFGR      PLLM          LL_RCC_PLLSAI1_ConfigDomain_SAI\n
02532   *         PLLSAI1CFGR  PLLSAI1N      LL_RCC_PLLSAI1_ConfigDomain_SAI\n
02533   *         PLLSAI1CFGR  PLLSAI1P      LL_RCC_PLLSAI1_ConfigDomain_SAI
02534   * @param  Source This parameter can be one of the following values:
02535   *         @arg @ref LL_RCC_PLLSOURCE_NONE
02536   *         @arg @ref LL_RCC_PLLSOURCE_MSI
02537   *         @arg @ref LL_RCC_PLLSOURCE_HSI
02538   *         @arg @ref LL_RCC_PLLSOURCE_HSE
02539   * @param  PLLM This parameter can be one of the following values:
02540   *         @arg @ref LL_RCC_PLLM_DIV_1
02541   *         @arg @ref LL_RCC_PLLM_DIV_2
02542   *         @arg @ref LL_RCC_PLLM_DIV_3
02543   *         @arg @ref LL_RCC_PLLM_DIV_4
02544   *         @arg @ref LL_RCC_PLLM_DIV_5
02545   *         @arg @ref LL_RCC_PLLM_DIV_6
02546   *         @arg @ref LL_RCC_PLLM_DIV_7
02547   *         @arg @ref LL_RCC_PLLM_DIV_8
02548   * @param  PLLN Between 8 and 86
02549   * @param  PLLP This parameter can be one of the following values:
02550   *         @arg @ref LL_RCC_PLLSAI1P_DIV7
02551   *         @arg @ref LL_RCC_PLLSAI1P_DIV17
02552   * @retval None
02553   */
02554 __STATIC_INLINE void LL_RCC_PLLSAI1_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP)
02555 {
02556   MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, Source | PLLM);
02557   MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1P, PLLN << RCC_POSITION_PLLSAI1N | PLLP);
02558 }
02559 
02560 /**
02561   * @brief  Configure PLLSAI1 used for ADC domain clock
02562   * @note PLL Source and PLLM Divider can be written only when PLL,
02563   *       PLLSAI1 and PLLSAI2 are disabled
02564   * @note PLLN/PLLR can be written only when PLLSAI1 is disabled
02565   * @note This  can be selected for ADC
02566   * @rmtoll PLLCFGR      PLLSRC        LL_RCC_PLLSAI1_ConfigDomain_ADC\n
02567   *         PLLCFGR      PLLM          LL_RCC_PLLSAI1_ConfigDomain_ADC\n
02568   *         PLLSAI1CFGR  PLLSAI1N      LL_RCC_PLLSAI1_ConfigDomain_ADC\n
02569   *         PLLSAI1CFGR  PLLSAI1R      LL_RCC_PLLSAI1_ConfigDomain_ADC
02570   * @param  Source This parameter can be one of the following values:
02571   *         @arg @ref LL_RCC_PLLSOURCE_NONE
02572   *         @arg @ref LL_RCC_PLLSOURCE_MSI
02573   *         @arg @ref LL_RCC_PLLSOURCE_HSI
02574   *         @arg @ref LL_RCC_PLLSOURCE_HSE
02575   * @param  PLLM This parameter can be one of the following values:
02576   *         @arg @ref LL_RCC_PLLM_DIV_1
02577   *         @arg @ref LL_RCC_PLLM_DIV_2
02578   *         @arg @ref LL_RCC_PLLM_DIV_3
02579   *         @arg @ref LL_RCC_PLLM_DIV_4
02580   *         @arg @ref LL_RCC_PLLM_DIV_5
02581   *         @arg @ref LL_RCC_PLLM_DIV_6
02582   *         @arg @ref LL_RCC_PLLM_DIV_7
02583   *         @arg @ref LL_RCC_PLLM_DIV_8
02584   * @param  PLLN Between 8 and 86
02585   * @param  PLLR This parameter can be one of the following values:
02586   *         @arg @ref LL_RCC_PLLSAI1R_DIV2
02587   *         @arg @ref LL_RCC_PLLSAI1R_DIV4
02588   *         @arg @ref LL_RCC_PLLSAI1R_DIV6
02589   *         @arg @ref LL_RCC_PLLSAI1R_DIV8
02590   * @retval None
02591   */
02592 __STATIC_INLINE void LL_RCC_PLLSAI1_ConfigDomain_ADC(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR)
02593 {
02594   MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, Source | PLLM);
02595   MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1R, PLLN << RCC_POSITION_PLLSAI1N | PLLR);
02596 }
02597 
02598 /**
02599   * @brief  Get SAI1PLL multiplication factor for VCO
02600   * @rmtoll PLLSAI1CFGR  PLLSAI1N      LL_RCC_PLLSAI1_GetN
02601   * @retval Between 8 and 86
02602   */
02603 __STATIC_INLINE uint32_t LL_RCC_PLLSAI1_GetN(void)
02604 {
02605   return (uint32_t)(READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N) >> RCC_POSITION_PLLSAI1N);
02606 }
02607 
02608 /**
02609   * @brief  Get SAI1PLL division factor for PLLSAI1P
02610   * @note used for PLLSAI1CLK (SAI1 or SAI2 clock).
02611   * @rmtoll PLLSAI1CFGR  PLLSAI1P      LL_RCC_PLLSAI1_GetP
02612   * @retval Returned value can be one of the following values:
02613   *         @arg @ref LL_RCC_PLLSAI1P_DIV7
02614   *         @arg @ref LL_RCC_PLLSAI1P_DIV17
02615   */
02616 __STATIC_INLINE uint32_t LL_RCC_PLLSAI1_GetP(void)
02617 {
02618   return (uint32_t)(READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1P));
02619 }
02620 
02621 /**
02622   * @brief  Get SAI1PLL division factor for PLLSAI1Q
02623   * @note used PLL48M2CLK selected for USB, RNG, SDMMC (48 MHz clock)
02624   * @rmtoll PLLSAI1CFGR  PLLSAI1Q      LL_RCC_PLLSAI1_GetQ
02625   * @retval Returned value can be one of the following values:
02626   *         @arg @ref LL_RCC_PLLSAI1Q_DIV2
02627   *         @arg @ref LL_RCC_PLLSAI1Q_DIV4
02628   *         @arg @ref LL_RCC_PLLSAI1Q_DIV6
02629   *         @arg @ref LL_RCC_PLLSAI1Q_DIV8
02630   */
02631 __STATIC_INLINE uint32_t LL_RCC_PLLSAI1_GetQ(void)
02632 {
02633   return (uint32_t)(READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1Q));
02634 }
02635 
02636 /**
02637   * @brief  Get PLLSAI1 division factor for PLLSAIR
02638   * @note used for PLLADC1CLK (ADC clock)
02639   * @rmtoll PLLSAI1CFGR  PLLSAI1R      LL_RCC_PLLSAI1_GetR
02640   * @retval Returned value can be one of the following values:
02641   *         @arg @ref LL_RCC_PLLSAI1R_DIV2
02642   *         @arg @ref LL_RCC_PLLSAI1R_DIV4
02643   *         @arg @ref LL_RCC_PLLSAI1R_DIV6
02644   *         @arg @ref LL_RCC_PLLSAI1R_DIV8
02645   */
02646 __STATIC_INLINE uint32_t LL_RCC_PLLSAI1_GetR(void)
02647 {
02648   return (uint32_t)(READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1R));
02649 }
02650 
02651 /**
02652   * @brief  Enable PLLSAI1 output mapped on SAI domain clock
02653   * @rmtoll PLLSAI1CFGR  PLLSAI1PEN    LL_RCC_PLLSAI1_EnableDomain_SAI
02654   * @retval None
02655   */
02656 __STATIC_INLINE void LL_RCC_PLLSAI1_EnableDomain_SAI(void)
02657 {
02658   SET_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1PEN);
02659 }
02660 
02661 /**
02662   * @brief  Disable PLLSAI1 output mapped on SAI domain clock
02663   * @note In order to save power, when  of the PLLSAI1 is
02664   *       not used,  should be 0
02665   * @rmtoll PLLSAI1CFGR  PLLSAI1PEN    LL_RCC_PLLSAI1_DisableDomain_SAI
02666   * @retval None
02667   */
02668 __STATIC_INLINE void LL_RCC_PLLSAI1_DisableDomain_SAI(void)
02669 {
02670   CLEAR_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1PEN);
02671 }
02672 
02673 /**
02674   * @brief  Enable PLLSAI1 output mapped on 48MHz domain clock
02675   * @rmtoll PLLSAI1CFGR  PLLSAI1QEN    LL_RCC_PLLSAI1_EnableDomain_48M
02676   * @retval None
02677   */
02678 __STATIC_INLINE void LL_RCC_PLLSAI1_EnableDomain_48M(void)
02679 {
02680   SET_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1QEN);
02681 }
02682 
02683 /**
02684   * @brief  Disable PLLSAI1 output mapped on 48MHz domain clock
02685   * @note In order to save power, when  of the PLLSAI1 is
02686   *       not used,  should be 0
02687   * @rmtoll PLLSAI1CFGR  PLLSAI1QEN    LL_RCC_PLLSAI1_DisableDomain_48M
02688   * @retval None
02689   */
02690 __STATIC_INLINE void LL_RCC_PLLSAI1_DisableDomain_48M(void)
02691 {
02692   CLEAR_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1QEN);
02693 }
02694 
02695 /**
02696   * @brief  Enable PLLSAI1 output mapped on ADC domain clock
02697   * @rmtoll PLLSAI1CFGR  PLLSAI1REN    LL_RCC_PLLSAI1_EnableDomain_ADC
02698   * @retval None
02699   */
02700 __STATIC_INLINE void LL_RCC_PLLSAI1_EnableDomain_ADC(void)
02701 {
02702   SET_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1REN);
02703 }
02704 
02705 /**
02706   * @brief  Disable PLLSAI1 output mapped on ADC domain clock
02707   * @note In order to save power, when  of the PLLSAI1 is
02708   *       not used, Main PLLSAI1  should be 0
02709   * @rmtoll PLLSAI1CFGR  PLLSAI1REN    LL_RCC_PLLSAI1_DisableDomain_ADC
02710   * @retval None
02711   */
02712 __STATIC_INLINE void LL_RCC_PLLSAI1_DisableDomain_ADC(void)
02713 {
02714   CLEAR_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1REN);
02715 }
02716 
02717 /**
02718   * @}
02719   */
02720 
02721 /** @defgroup RCC_LL_EF_PLLSAI2 PLLSAI2
02722   * @{
02723   */
02724 
02725 /**
02726   * @brief  Enable PLLSAI2
02727   * @rmtoll CR           PLLSAI2ON     LL_RCC_PLLSAI2_Enable
02728   * @retval None
02729   */
02730 __STATIC_INLINE void LL_RCC_PLLSAI2_Enable(void)
02731 {
02732   SET_BIT(RCC->CR, RCC_CR_PLLSAI2ON);
02733 }
02734 
02735 /**
02736   * @brief  Disable PLLSAI2
02737   * @rmtoll CR           PLLSAI2ON     LL_RCC_PLLSAI2_Disable
02738   * @retval None
02739   */
02740 __STATIC_INLINE void LL_RCC_PLLSAI2_Disable(void)
02741 {
02742   CLEAR_BIT(RCC->CR, RCC_CR_PLLSAI2ON);
02743 }
02744 
02745 /**
02746   * @brief  Check if PLLSAI2 Ready
02747   * @rmtoll CR           PLLSAI2RDY    LL_RCC_PLLSAI2_IsReady
02748   * @retval State of bit (1 or 0).
02749   */
02750 __STATIC_INLINE uint32_t LL_RCC_PLLSAI2_IsReady(void)
02751 {
02752   return (READ_BIT(RCC->CR, RCC_CR_PLLSAI2RDY) == (RCC_CR_PLLSAI2RDY));
02753 }
02754 
02755 /**
02756   * @brief  Configure PLLSAI2 used for SAI domain clock
02757   * @note PLL Source and PLLM Divider can be written only when PLL,
02758   *       PLLSAI2 and PLLSAI2 are disabled
02759   * @note PLLN/PLLP can be written only when PLLSAI2 is disabled
02760   * @note This  can be selected for SAI1 or SAI2
02761   * @rmtoll PLLCFGR      PLLSRC        LL_RCC_PLLSAI2_ConfigDomain_SAI\n
02762   *         PLLCFGR      PLLM          LL_RCC_PLLSAI2_ConfigDomain_SAI\n
02763   *         PLLSAI2CFGR  PLLSAI2N      LL_RCC_PLLSAI2_ConfigDomain_SAI\n
02764   *         PLLSAI2CFGR  PLLSAI2P      LL_RCC_PLLSAI2_ConfigDomain_SAI
02765   * @param  Source This parameter can be one of the following values:
02766   *         @arg @ref LL_RCC_PLLSOURCE_NONE
02767   *         @arg @ref LL_RCC_PLLSOURCE_MSI
02768   *         @arg @ref LL_RCC_PLLSOURCE_HSI
02769   *         @arg @ref LL_RCC_PLLSOURCE_HSE
02770   * @param  PLLM This parameter can be one of the following values:
02771   *         @arg @ref LL_RCC_PLLM_DIV_1
02772   *         @arg @ref LL_RCC_PLLM_DIV_2
02773   *         @arg @ref LL_RCC_PLLM_DIV_3
02774   *         @arg @ref LL_RCC_PLLM_DIV_4
02775   *         @arg @ref LL_RCC_PLLM_DIV_5
02776   *         @arg @ref LL_RCC_PLLM_DIV_6
02777   *         @arg @ref LL_RCC_PLLM_DIV_7
02778   *         @arg @ref LL_RCC_PLLM_DIV_8
02779   * @param  PLLN Between 8 and 86
02780   * @param  PLLP This parameter can be one of the following values:
02781   *         @arg @ref LL_RCC_PLLSAI2P_DIV7
02782   *         @arg @ref LL_RCC_PLLSAI2P_DIV17
02783   * @retval None
02784   */
02785 __STATIC_INLINE void LL_RCC_PLLSAI2_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP)
02786 {
02787   MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, Source | PLLM);
02788   MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2P, PLLN << RCC_POSITION_PLLSAI2N | PLLP);
02789 }
02790 
02791 /**
02792   * @brief  Configure PLLSAI2 used for ADC domain clock
02793   * @note PLL Source and PLLM Divider can be written only when PLL,
02794   *       PLLSAI2 and PLLSAI2 are disabled
02795   * @note PLLN/PLLR can be written only when PLLSAI2 is disabled
02796   * @note This  can be selected for ADC
02797   * @rmtoll PLLCFGR      PLLSRC        LL_RCC_PLLSAI2_ConfigDomain_ADC\n
02798   *         PLLCFGR      PLLM          LL_RCC_PLLSAI2_ConfigDomain_ADC\n
02799   *         PLLSAI2CFGR  PLLSAI2N      LL_RCC_PLLSAI2_ConfigDomain_ADC\n
02800   *         PLLSAI2CFGR  PLLSAI2R      LL_RCC_PLLSAI2_ConfigDomain_ADC
02801   * @param  Source This parameter can be one of the following values:
02802   *         @arg @ref LL_RCC_PLLSOURCE_NONE
02803   *         @arg @ref LL_RCC_PLLSOURCE_MSI
02804   *         @arg @ref LL_RCC_PLLSOURCE_HSI
02805   *         @arg @ref LL_RCC_PLLSOURCE_HSE
02806   * @param  PLLM This parameter can be one of the following values:
02807   *         @arg @ref LL_RCC_PLLM_DIV_1
02808   *         @arg @ref LL_RCC_PLLM_DIV_2
02809   *         @arg @ref LL_RCC_PLLM_DIV_3
02810   *         @arg @ref LL_RCC_PLLM_DIV_4
02811   *         @arg @ref LL_RCC_PLLM_DIV_5
02812   *         @arg @ref LL_RCC_PLLM_DIV_6
02813   *         @arg @ref LL_RCC_PLLM_DIV_7
02814   *         @arg @ref LL_RCC_PLLM_DIV_8
02815   * @param  PLLN Between 8 and 86
02816   * @param  PLLR This parameter can be one of the following values:
02817   *         @arg @ref LL_RCC_PLLSAI2R_DIV2
02818   *         @arg @ref LL_RCC_PLLSAI2R_DIV4
02819   *         @arg @ref LL_RCC_PLLSAI2R_DIV6
02820   *         @arg @ref LL_RCC_PLLSAI2R_DIV8
02821   * @retval None
02822   */
02823 __STATIC_INLINE void LL_RCC_PLLSAI2_ConfigDomain_ADC(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR)
02824 {
02825   MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, Source | PLLM);
02826   MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2R, PLLN << RCC_POSITION_PLLSAI2N | PLLR);
02827 }
02828 
02829 /**
02830   * @brief  Get SAI2PLL multiplication factor for VCO
02831   * @rmtoll PLLSAI2CFGR  PLLSAI2N      LL_RCC_PLLSAI2_GetN
02832   * @retval Between 8 and 86
02833   */
02834 __STATIC_INLINE uint32_t LL_RCC_PLLSAI2_GetN(void)
02835 {
02836   return (uint32_t)(READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2N) >> RCC_POSITION_PLLSAI2N);
02837 }
02838 
02839 /**
02840   * @brief  Get SAI2PLL division factor for PLLSAI2P
02841   * @note used for PLLSAI2CLK (SAI1 or SAI2 clock).
02842   * @rmtoll PLLSAI2CFGR  PLLSAI2P      LL_RCC_PLLSAI2_GetP
02843   * @retval Returned value can be one of the following values:
02844   *         @arg @ref LL_RCC_PLLSAI2P_DIV7
02845   *         @arg @ref LL_RCC_PLLSAI2P_DIV17
02846   */
02847 __STATIC_INLINE uint32_t LL_RCC_PLLSAI2_GetP(void)
02848 {
02849   return (uint32_t)(READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2P));
02850 }
02851 
02852 /**
02853   * @brief  Get SAI2PLL division factor for PLLSAI2R
02854   * @note used for PLLADC2CLK (ADC clock)
02855   * @rmtoll PLLSAI2CFGR  PLLSAI2R      LL_RCC_PLLSAI2_GetR
02856   * @retval Returned value can be one of the following values:
02857   *         @arg @ref LL_RCC_PLLSAI2R_DIV2
02858   *         @arg @ref LL_RCC_PLLSAI2R_DIV4
02859   *         @arg @ref LL_RCC_PLLSAI2R_DIV6
02860   *         @arg @ref LL_RCC_PLLSAI2R_DIV8
02861   */
02862 __STATIC_INLINE uint32_t LL_RCC_PLLSAI2_GetR(void)
02863 {
02864   return (uint32_t)(READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2R));
02865 }
02866 
02867 /**
02868   * @brief  Enable PLLSAI2 output mapped on SAI domain clock
02869   * @rmtoll PLLSAI2CFGR  PLLSAI2PEN    LL_RCC_PLLSAI2_EnableDomain_SAI
02870   * @retval None
02871   */
02872 __STATIC_INLINE void LL_RCC_PLLSAI2_EnableDomain_SAI(void)
02873 {
02874   SET_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2PEN);
02875 }
02876 
02877 /**
02878   * @brief  Disable PLLSAI2 output mapped on SAI domain clock
02879   * @note In order to save power, when  of the PLLSAI2 is
02880   *       not used,  should be 0
02881   * @rmtoll PLLSAI2CFGR  PLLSAI2PEN    LL_RCC_PLLSAI2_DisableDomain_SAI
02882   * @retval None
02883   */
02884 __STATIC_INLINE void LL_RCC_PLLSAI2_DisableDomain_SAI(void)
02885 {
02886   CLEAR_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2PEN);
02887 }
02888 
02889 /**
02890   * @brief  Enable PLLSAI2 output mapped on ADC domain clock
02891   * @rmtoll PLLSAI2CFGR  PLLSAI2REN    LL_RCC_PLLSAI2_EnableDomain_ADC
02892   * @retval None
02893   */
02894 __STATIC_INLINE void LL_RCC_PLLSAI2_EnableDomain_ADC(void)
02895 {
02896   SET_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2REN);
02897 }
02898 
02899 /**
02900   * @brief  Disable PLLSAI2 output mapped on ADC domain clock
02901   * @note In order to save power, when  of the PLLSAI2 is
02902   *       not used, Main PLLSAI2  should be 0
02903   * @rmtoll PLLSAI2CFGR  PLLSAI2REN    LL_RCC_PLLSAI2_DisableDomain_ADC
02904   * @retval None
02905   */
02906 __STATIC_INLINE void LL_RCC_PLLSAI2_DisableDomain_ADC(void)
02907 {
02908   CLEAR_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2REN);
02909 }
02910 
02911 /**
02912   * @}
02913   */
02914 
02915 /** @defgroup RCC_LL_EF_FLAG_Management FLAG Management
02916   * @{
02917   */
02918 
02919 /**
02920   * @brief  Clear LSI ready interrupt flag
02921   * @rmtoll CICR         LSIRDYC       LL_RCC_ClearFlag_LSIRDY
02922   * @retval None
02923   */
02924 __STATIC_INLINE void LL_RCC_ClearFlag_LSIRDY(void)
02925 {
02926   SET_BIT(RCC->CICR, RCC_CICR_LSIRDYC);
02927 }
02928 
02929 /**
02930   * @brief  Clear LSE ready interrupt flag
02931   * @rmtoll CICR         LSERDYC       LL_RCC_ClearFlag_LSERDY
02932   * @retval None
02933   */
02934 __STATIC_INLINE void LL_RCC_ClearFlag_LSERDY(void)
02935 {
02936   SET_BIT(RCC->CICR, RCC_CICR_LSERDYC);
02937 }
02938 
02939 /**
02940   * @brief  Clear MSI ready interrupt flag
02941   * @rmtoll CICR         MSIRDYC       LL_RCC_ClearFlag_MSIRDY
02942   * @retval None
02943   */
02944 __STATIC_INLINE void LL_RCC_ClearFlag_MSIRDY(void)
02945 {
02946   SET_BIT(RCC->CICR, RCC_CICR_MSIRDYC);
02947 }
02948 
02949 /**
02950   * @brief  Clear HSI ready interrupt flag
02951   * @rmtoll CICR         HSIRDYC       LL_RCC_ClearFlag_HSIRDY
02952   * @retval None
02953   */
02954 __STATIC_INLINE void LL_RCC_ClearFlag_HSIRDY(void)
02955 {
02956   SET_BIT(RCC->CICR, RCC_CICR_HSIRDYC);
02957 }
02958 
02959 /**
02960   * @brief  Clear HSE ready interrupt flag
02961   * @rmtoll CICR         HSERDYC       LL_RCC_ClearFlag_HSERDY
02962   * @retval None
02963   */
02964 __STATIC_INLINE void LL_RCC_ClearFlag_HSERDY(void)
02965 {
02966   SET_BIT(RCC->CICR, RCC_CICR_HSERDYC);
02967 }
02968 
02969 /**
02970   * @brief  Clear PLL ready interrupt flag
02971   * @rmtoll CICR         PLLRDYC       LL_RCC_ClearFlag_PLLRDY
02972   * @retval None
02973   */
02974 __STATIC_INLINE void LL_RCC_ClearFlag_PLLRDY(void)
02975 {
02976   SET_BIT(RCC->CICR, RCC_CICR_PLLRDYC);
02977 }
02978 
02979 /**
02980   * @brief  Clear PLLSAI1 ready interrupt flag
02981   * @rmtoll CICR         PLLSAI1RDYC   LL_RCC_ClearFlag_PLLSAI1RDY
02982   * @retval None
02983   */
02984 __STATIC_INLINE void LL_RCC_ClearFlag_PLLSAI1RDY(void)
02985 {
02986   SET_BIT(RCC->CICR, RCC_CICR_PLLSAI1RDYC);
02987 }
02988 
02989 /**
02990   * @brief  Clear PLLSAI1 ready interrupt flag
02991   * @rmtoll CICR         PLLSAI2RDYC   LL_RCC_ClearFlag_PLLSAI2RDY
02992   * @retval None
02993   */
02994 __STATIC_INLINE void LL_RCC_ClearFlag_PLLSAI2RDY(void)
02995 {
02996   SET_BIT(RCC->CICR, RCC_CICR_PLLSAI2RDYC);
02997 }
02998 
02999 /**
03000   * @brief  Clear Clock security system interrupt flag
03001   * @rmtoll CICR         CSSC          LL_RCC_ClearFlag_HSECSS
03002   * @retval None
03003   */
03004 __STATIC_INLINE void LL_RCC_ClearFlag_HSECSS(void)
03005 {
03006   SET_BIT(RCC->CICR, RCC_CICR_CSSC);
03007 }
03008 
03009 /**
03010   * @brief  Clear LSE Clock security system interrupt flag
03011   * @rmtoll CICR         LSECSSC       LL_RCC_ClearFlag_LSECSS
03012   * @retval None
03013   */
03014 __STATIC_INLINE void LL_RCC_ClearFlag_LSECSS(void)
03015 {
03016   SET_BIT(RCC->CICR, RCC_CICR_LSECSSC);
03017 }
03018 
03019 /**
03020   * @brief  Check if LSI ready interrupt occurred or not
03021   * @rmtoll CIFR         LSIRDYF       LL_RCC_IsActiveFlag_LSIRDY
03022   * @retval State of bit (1 or 0).
03023   */
03024 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSIRDY(void)
03025 {
03026   return (READ_BIT(RCC->CIFR, RCC_CIFR_LSIRDYF) == (RCC_CIFR_LSIRDYF));
03027 }
03028 
03029 /**
03030   * @brief  Check if LSE ready interrupt occurred or not
03031   * @rmtoll CIFR         LSERDYF       LL_RCC_IsActiveFlag_LSERDY
03032   * @retval State of bit (1 or 0).
03033   */
03034 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSERDY(void)
03035 {
03036   return (READ_BIT(RCC->CIFR, RCC_CIFR_LSERDYF) == (RCC_CIFR_LSERDYF));
03037 }
03038 
03039 /**
03040   * @brief  Check if MSI ready interrupt occurred or not
03041   * @rmtoll CIFR         MSIRDYF       LL_RCC_IsActiveFlag_MSIRDY
03042   * @retval State of bit (1 or 0).
03043   */
03044 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_MSIRDY(void)
03045 {
03046   return (READ_BIT(RCC->CIFR, RCC_CIFR_MSIRDYF) == (RCC_CIFR_MSIRDYF));
03047 }
03048 
03049 /**
03050   * @brief  Check if HSI ready interrupt occurred or not
03051   * @rmtoll CIFR         HSIRDYF       LL_RCC_IsActiveFlag_HSIRDY
03052   * @retval State of bit (1 or 0).
03053   */
03054 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSIRDY(void)
03055 {
03056   return (READ_BIT(RCC->CIFR, RCC_CIFR_HSIRDYF) == (RCC_CIFR_HSIRDYF));
03057 }
03058 
03059 /**
03060   * @brief  Check if HSE ready interrupt occurred or not
03061   * @rmtoll CIFR         HSERDYF       LL_RCC_IsActiveFlag_HSERDY
03062   * @retval State of bit (1 or 0).
03063   */
03064 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSERDY(void)
03065 {
03066   return (READ_BIT(RCC->CIFR, RCC_CIFR_HSERDYF) == (RCC_CIFR_HSERDYF));
03067 }
03068 
03069 /**
03070   * @brief  Check if PLL ready interrupt occurred or not
03071   * @rmtoll CIFR         PLLRDYF       LL_RCC_IsActiveFlag_PLLRDY
03072   * @retval State of bit (1 or 0).
03073   */
03074 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLRDY(void)
03075 {
03076   return (READ_BIT(RCC->CIFR, RCC_CIFR_PLLRDYF) == (RCC_CIFR_PLLRDYF));
03077 }
03078 
03079 /**
03080   * @brief  Check if PLLSAI1 ready interrupt occurred or not
03081   * @rmtoll CIFR         PLLSAI1RDYF   LL_RCC_IsActiveFlag_PLLSAI1RDY
03082   * @retval State of bit (1 or 0).
03083   */
03084 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLSAI1RDY(void)
03085 {
03086   return (READ_BIT(RCC->CIFR, RCC_CIFR_PLLSAI1RDYF) == (RCC_CIFR_PLLSAI1RDYF));
03087 }
03088 
03089 /**
03090   * @brief  Check if PLLSAI1 ready interrupt occurred or not
03091   * @rmtoll CIFR         PLLSAI2RDYF   LL_RCC_IsActiveFlag_PLLSAI2RDY
03092   * @retval State of bit (1 or 0).
03093   */
03094 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLSAI2RDY(void)
03095 {
03096   return (READ_BIT(RCC->CIFR, RCC_CIFR_PLLSAI2RDYF) == (RCC_CIFR_PLLSAI2RDYF));
03097 }
03098 
03099 /**
03100   * @brief  Check if Clock security system interrupt occurred or not
03101   * @rmtoll CIFR         CSSF          LL_RCC_IsActiveFlag_HSECSS
03102   * @retval State of bit (1 or 0).
03103   */
03104 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSECSS(void)
03105 {
03106   return (READ_BIT(RCC->CIFR, RCC_CIFR_CSSF) == (RCC_CIFR_CSSF));
03107 }
03108 
03109 /**
03110   * @brief  Check if LSE Clock security system interrupt occurred or not
03111   * @rmtoll CIFR         LSECSSF       LL_RCC_IsActiveFlag_LSECSS
03112   * @retval State of bit (1 or 0).
03113   */
03114 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSECSS(void)
03115 {
03116   return (READ_BIT(RCC->CIFR, RCC_CIFR_LSECSSF) == (RCC_CIFR_LSECSSF));
03117 }
03118 
03119 /**
03120   * @brief  Check if RCC flag FW reset is set or not.
03121   * @rmtoll CSR          FWRSTF        LL_RCC_IsActiveFlag_FWRST
03122   * @retval State of bit (1 or 0).
03123   */
03124 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_FWRST(void)
03125 {
03126   return (READ_BIT(RCC->CSR, RCC_CSR_FWRSTF) == (RCC_CSR_FWRSTF));
03127 }
03128 
03129 /**
03130   * @brief  Check if RCC flag Independent Watchdog reset is set or not.
03131   * @rmtoll CSR          IWDGRSTF      LL_RCC_IsActiveFlag_IWDGRST
03132   * @retval State of bit (1 or 0).
03133   */
03134 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_IWDGRST(void)
03135 {
03136   return (READ_BIT(RCC->CSR, RCC_CSR_IWDGRSTF) == (RCC_CSR_IWDGRSTF));
03137 }
03138 
03139 /**
03140   * @brief  Check if RCC flag Low Power reset is set or not.
03141   * @rmtoll CSR          LPWRRSTF      LL_RCC_IsActiveFlag_LPWRRST
03142   * @retval State of bit (1 or 0).
03143   */
03144 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LPWRRST(void)
03145 {
03146   return (READ_BIT(RCC->CSR, RCC_CSR_LPWRRSTF) == (RCC_CSR_LPWRRSTF));
03147 }
03148 
03149 /**
03150   * @brief  Check if RCC flag is set or not.
03151   * @rmtoll CSR          OBLRSTF       LL_RCC_IsActiveFlag_OBLRST
03152   * @retval State of bit (1 or 0).
03153   */
03154 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_OBLRST(void)
03155 {
03156   return (READ_BIT(RCC->CSR, RCC_CSR_OBLRSTF) == (RCC_CSR_OBLRSTF));
03157 }
03158 
03159 /**
03160   * @brief  Check if RCC flag Pin reset is set or not.
03161   * @rmtoll CSR          PINRSTF       LL_RCC_IsActiveFlag_PINRST
03162   * @retval State of bit (1 or 0).
03163   */
03164 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PINRST(void)
03165 {
03166   return (READ_BIT(RCC->CSR, RCC_CSR_PINRSTF) == (RCC_CSR_PINRSTF));
03167 }
03168 
03169 /**
03170   * @brief  Check if RCC flag Software reset is set or not.
03171   * @rmtoll CSR          SFTRSTF       LL_RCC_IsActiveFlag_SFTRST
03172   * @retval State of bit (1 or 0).
03173   */
03174 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_SFTRST(void)
03175 {
03176   return (READ_BIT(RCC->CSR, RCC_CSR_SFTRSTF) == (RCC_CSR_SFTRSTF));
03177 }
03178 
03179 /**
03180   * @brief  Check if RCC flag Window Watchdog reset is set or not.
03181   * @rmtoll CSR          WWDGRSTF      LL_RCC_IsActiveFlag_WWDGRST
03182   * @retval State of bit (1 or 0).
03183   */
03184 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_WWDGRST(void)
03185 {
03186   return (READ_BIT(RCC->CSR, RCC_CSR_WWDGRSTF) == (RCC_CSR_WWDGRSTF));
03187 }
03188 
03189 /**
03190   * @brief  Check if RCC flag BOR reset is set or not.
03191   * @rmtoll CSR          BORRSTF       LL_RCC_IsActiveFlag_BORRST
03192   * @retval State of bit (1 or 0).
03193   */
03194 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_BORRST(void)
03195 {
03196   return (READ_BIT(RCC->CSR, RCC_CSR_BORRSTF) == (RCC_CSR_BORRSTF));
03197 }
03198 
03199 /**
03200   * @brief  Set RMVF bit to clear the reset flags: RCC_FLAG_PINRST,
03201   *         RCC_FLAG_PORRST, RCC_FLAG_SFTRST, RCC_FLAG_IWDGRST,
03202   *         RCC_FLAG_WWDGRST and RCC_FLAG_LPWRRST
03203   * @rmtoll CSR          RMVF          LL_RCC_ClearResetFlags
03204   * @retval None
03205   */
03206 __STATIC_INLINE void LL_RCC_ClearResetFlags(void)
03207 {
03208   SET_BIT(RCC->CSR, RCC_CSR_RMVF);
03209 }
03210 
03211 /**
03212   * @}
03213   */
03214 
03215 /** @defgroup RCC_LL_EF_IT_Management IT Management
03216   * @{
03217   */
03218 
03219 /**
03220   * @brief  Enable RCC interrupt
03221   * @rmtoll CIER         LSIRDYIE      LL_RCC_EnableIT_LSIRDY
03222   * @retval None
03223   */
03224 __STATIC_INLINE void LL_RCC_EnableIT_LSIRDY(void)
03225 {
03226   SET_BIT(RCC->CIER, RCC_CIER_LSIRDYIE);
03227 }
03228 
03229 /**
03230   * @brief  Enable RCC interrupt
03231   * @rmtoll CIER         LSERDYIE      LL_RCC_EnableIT_LSERDY
03232   * @retval None
03233   */
03234 __STATIC_INLINE void LL_RCC_EnableIT_LSERDY(void)
03235 {
03236   SET_BIT(RCC->CIER, RCC_CIER_LSERDYIE);
03237 }
03238 
03239 /**
03240   * @brief  Enable RCC interrupt
03241   * @rmtoll CIER         MSIRDYIE      LL_RCC_EnableIT_MSIRDY
03242   * @retval None
03243   */
03244 __STATIC_INLINE void LL_RCC_EnableIT_MSIRDY(void)
03245 {
03246   SET_BIT(RCC->CIER, RCC_CIER_MSIRDYIE);
03247 }
03248 
03249 /**
03250   * @brief  Enable RCC interrupt
03251   * @rmtoll CIER         HSIRDYIE      LL_RCC_EnableIT_HSIRDY
03252   * @retval None
03253   */
03254 __STATIC_INLINE void LL_RCC_EnableIT_HSIRDY(void)
03255 {
03256   SET_BIT(RCC->CIER, RCC_CIER_HSIRDYIE);
03257 }
03258 
03259 /**
03260   * @brief  Enable RCC interrupt
03261   * @rmtoll CIER         HSERDYIE      LL_RCC_EnableIT_HSERDY
03262   * @retval None
03263   */
03264 __STATIC_INLINE void LL_RCC_EnableIT_HSERDY(void)
03265 {
03266   SET_BIT(RCC->CIER, RCC_CIER_HSERDYIE);
03267 }
03268 
03269 /**
03270   * @brief  Enable RCC interrupt
03271   * @rmtoll CIER         PLLRDYIE      LL_RCC_EnableIT_PLLRDY
03272   * @retval None
03273   */
03274 __STATIC_INLINE void LL_RCC_EnableIT_PLLRDY(void)
03275 {
03276   SET_BIT(RCC->CIER, RCC_CIER_PLLRDYIE);
03277 }
03278 
03279 /**
03280   * @brief  Enable RCC interrupt
03281   * @rmtoll CIER         PLLSAI1RDYIE  LL_RCC_EnableIT_PLLSAI1RDY
03282   * @retval None
03283   */
03284 __STATIC_INLINE void LL_RCC_EnableIT_PLLSAI1RDY(void)
03285 {
03286   SET_BIT(RCC->CIER, RCC_CIER_PLLSAI1RDYIE);
03287 }
03288 
03289 /**
03290   * @brief  Enable RCC interrupt
03291   * @rmtoll CIER         PLLSAI2RDYIE  LL_RCC_EnableIT_PLLSAI2RDY
03292   * @retval None
03293   */
03294 __STATIC_INLINE void LL_RCC_EnableIT_PLLSAI2RDY(void)
03295 {
03296   SET_BIT(RCC->CIER, RCC_CIER_PLLSAI2RDYIE);
03297 }
03298 
03299 /**
03300   * @brief  Disable RCC interrupt
03301   * @rmtoll CIER         LSECSSIE      LL_RCC_EnableIT_LSECSS
03302   * @retval None
03303   */
03304 __STATIC_INLINE void LL_RCC_EnableIT_LSECSS(void)
03305 {
03306   SET_BIT(RCC->CIER, RCC_CIER_LSECSSIE);
03307 }
03308 
03309 /**
03310   * @brief  Disable RCC interrupt
03311   * @rmtoll CIER         LSIRDYIE      LL_RCC_DisableIT_LSIRDY
03312   * @retval None
03313   */
03314 __STATIC_INLINE void LL_RCC_DisableIT_LSIRDY(void)
03315 {
03316   CLEAR_BIT(RCC->CIER, RCC_CIER_LSIRDYIE);
03317 }
03318 
03319 /**
03320   * @brief  Disable RCC interrupt
03321   * @rmtoll CIER         LSERDYIE      LL_RCC_DisableIT_LSERDY
03322   * @retval None
03323   */
03324 __STATIC_INLINE void LL_RCC_DisableIT_LSERDY(void)
03325 {
03326   CLEAR_BIT(RCC->CIER, RCC_CIER_LSERDYIE);
03327 }
03328 
03329 /**
03330   * @brief  Disable RCC interrupt
03331   * @rmtoll CIER         MSIRDYIE      LL_RCC_DisableIT_MSIRDY
03332   * @retval None
03333   */
03334 __STATIC_INLINE void LL_RCC_DisableIT_MSIRDY(void)
03335 {
03336   CLEAR_BIT(RCC->CIER, RCC_CIER_MSIRDYIE);
03337 }
03338 
03339 /**
03340   * @brief  Disable RCC interrupt
03341   * @rmtoll CIER         HSIRDYIE      LL_RCC_DisableIT_HSIRDY
03342   * @retval None
03343   */
03344 __STATIC_INLINE void LL_RCC_DisableIT_HSIRDY(void)
03345 {
03346   CLEAR_BIT(RCC->CIER, RCC_CIER_HSIRDYIE);
03347 }
03348 
03349 /**
03350   * @brief  Disable RCC interrupt
03351   * @rmtoll CIER         HSERDYIE      LL_RCC_DisableIT_HSERDY
03352   * @retval None
03353   */
03354 __STATIC_INLINE void LL_RCC_DisableIT_HSERDY(void)
03355 {
03356   CLEAR_BIT(RCC->CIER, RCC_CIER_HSERDYIE);
03357 }
03358 
03359 /**
03360   * @brief  Disable RCC interrupt
03361   * @rmtoll CIER         PLLRDYIE      LL_RCC_DisableIT_PLLRDY
03362   * @retval None
03363   */
03364 __STATIC_INLINE void LL_RCC_DisableIT_PLLRDY(void)
03365 {
03366   CLEAR_BIT(RCC->CIER, RCC_CIER_PLLRDYIE);
03367 }
03368 
03369 /**
03370   * @brief  Disable RCC interrupt
03371   * @rmtoll CIER         PLLSAI1RDYIE  LL_RCC_DisableIT_PLLSAI1RDY
03372   * @retval None
03373   */
03374 __STATIC_INLINE void LL_RCC_DisableIT_PLLSAI1RDY(void)
03375 {
03376   CLEAR_BIT(RCC->CIER, RCC_CIER_PLLSAI1RDYIE);
03377 }
03378 
03379 /**
03380   * @brief  Disable RCC interrupt
03381   * @rmtoll CIER         PLLSAI2RDYIE  LL_RCC_DisableIT_PLLSAI2RDY
03382   * @retval None
03383   */
03384 __STATIC_INLINE void LL_RCC_DisableIT_PLLSAI2RDY(void)
03385 {
03386   CLEAR_BIT(RCC->CIER, RCC_CIER_PLLSAI2RDYIE);
03387 }
03388 
03389 /**
03390   * @brief  Disable RCC interrupt
03391   * @rmtoll CIER         LSECSSIE      LL_RCC_DisableIT_LSECSS
03392   * @retval None
03393   */
03394 __STATIC_INLINE void LL_RCC_DisableIT_LSECSS(void)
03395 {
03396   CLEAR_BIT(RCC->CIER, RCC_CIER_LSECSSIE);
03397 }
03398 
03399 /**
03400   * @brief  Checks if the specified RCC interrupt source is enabled or disabled.
03401   * @rmtoll CIER         LSIRDYIE      LL_RCC_IsEnabledIT_LSIRDY
03402   * @retval State of bit (1 or 0).
03403   */
03404 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSIRDY(void)
03405 {
03406   return (READ_BIT(RCC->CIER, RCC_CIER_LSIRDYIE) == (RCC_CIER_LSIRDYIE));
03407 }
03408 
03409 /**
03410   * @brief  Checks if the specified RCC interrupt source is enabled or disabled.
03411   * @rmtoll CIER         LSERDYIE      LL_RCC_IsEnabledIT_LSERDY
03412   * @retval State of bit (1 or 0).
03413   */
03414 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSERDY(void)
03415 {
03416   return (READ_BIT(RCC->CIER, RCC_CIER_LSERDYIE) == (RCC_CIER_LSERDYIE));
03417 }
03418 
03419 /**
03420   * @brief  Checks if the specified RCC interrupt source is enabled or disabled.
03421   * @rmtoll CIER         MSIRDYIE      LL_RCC_IsEnabledIT_MSIRDY
03422   * @retval State of bit (1 or 0).
03423   */
03424 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_MSIRDY(void)
03425 {
03426   return (READ_BIT(RCC->CIER, RCC_CIER_MSIRDYIE) == (RCC_CIER_MSIRDYIE));
03427 }
03428 
03429 /**
03430   * @brief  Checks if the specified RCC interrupt source is enabled or disabled.
03431   * @rmtoll CIER         HSIRDYIE      LL_RCC_IsEnabledIT_HSIRDY
03432   * @retval State of bit (1 or 0).
03433   */
03434 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSIRDY(void)
03435 {
03436   return (READ_BIT(RCC->CIER, RCC_CIER_HSIRDYIE) == (RCC_CIER_HSIRDYIE));
03437 }
03438 
03439 /**
03440   * @brief  Checks if the specified RCC interrupt source is enabled or disabled.
03441   * @rmtoll CIER         HSERDYIE      LL_RCC_IsEnabledIT_HSERDY
03442   * @retval State of bit (1 or 0).
03443   */
03444 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSERDY(void)
03445 {
03446   return (READ_BIT(RCC->CIER, RCC_CIER_HSERDYIE) == (RCC_CIER_HSERDYIE));
03447 }
03448 
03449 /**
03450   * @brief  Checks if the specified RCC interrupt source is enabled or disabled.
03451   * @rmtoll CIER         PLLRDYIE      LL_RCC_IsEnabledIT_PLLRDY
03452   * @retval State of bit (1 or 0).
03453   */
03454 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLRDY(void)
03455 {
03456   return (READ_BIT(RCC->CIER, RCC_CIER_PLLRDYIE) == (RCC_CIER_PLLRDYIE));
03457 }
03458 
03459 /**
03460   * @brief  Checks if the specified RCC interrupt source is enabled or disabled.
03461   * @rmtoll CIER         PLLSAI1RDYIE  LL_RCC_IsEnabledIT_PLLSAI1RDY
03462   * @retval State of bit (1 or 0).
03463   */
03464 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLSAI1RDY(void)
03465 {
03466   return (READ_BIT(RCC->CIER, RCC_CIER_PLLSAI1RDYIE) == (RCC_CIER_PLLSAI1RDYIE));
03467 }
03468 
03469 /**
03470   * @brief  Checks if the specified RCC interrupt source is enabled or disabled.
03471   * @rmtoll CIER         PLLSAI2RDYIE  LL_RCC_IsEnabledIT_PLLSAI2RDY
03472   * @retval State of bit (1 or 0).
03473   */
03474 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLSAI2RDY(void)
03475 {
03476   return (READ_BIT(RCC->CIER, RCC_CIER_PLLSAI2RDYIE) == (RCC_CIER_PLLSAI2RDYIE));
03477 }
03478 
03479 /**
03480   * @brief  Checks if the specified RCC interrupt source is enabled or disabled.
03481   * @rmtoll CIER         LSECSSIE      LL_RCC_IsEnabledIT_LSECSS
03482   * @retval State of bit (1 or 0).
03483   */
03484 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSECSS(void)
03485 {
03486   return (READ_BIT(RCC->CIER, RCC_CIER_LSECSSIE) == (RCC_CIER_LSECSSIE));
03487 }
03488 
03489 /**
03490   * @}
03491   */
03492 
03493 
03494 /**
03495   * @}
03496   */
03497 
03498 /**
03499   * @}
03500   */
03501 
03502 #endif /* defined(RCC) */
03503 
03504 /**
03505   * @}
03506   */
03507 
03508 #ifdef __cplusplus
03509 }
03510 #endif
03511 
03512 #endif /* __STM32L4xx_LL_RCC_H */
03513 
03514 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
03515