Subversion Repositories ScreenTimer

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /**
  2.   ******************************************************************************
  3.   * @file    stm32f0xx_ll_rcc.h
  4.   * @author  MCD Application Team
  5.   * @brief   Header file of RCC LL module.
  6.   ******************************************************************************
  7.   * @attention
  8.   *
  9.   * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
  10.   * All rights reserved.</center></h2>
  11.   *
  12.   * This software component is licensed by ST under BSD 3-Clause license,
  13.   * the "License"; You may not use this file except in compliance with the
  14.   * License. You may obtain a copy of the License at:
  15.   *                        opensource.org/licenses/BSD-3-Clause
  16.   *
  17.   ******************************************************************************
  18.   */
  19.  
  20. /* Define to prevent recursive inclusion -------------------------------------*/
  21. #ifndef __STM32F0xx_LL_RCC_H
  22. #define __STM32F0xx_LL_RCC_H
  23.  
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27.  
  28. /* Includes ------------------------------------------------------------------*/
  29. #include "stm32f0xx.h"
  30.  
  31. /** @addtogroup STM32F0xx_LL_Driver
  32.   * @{
  33.   */
  34.  
  35. #if defined(RCC)
  36.  
  37. /** @defgroup RCC_LL RCC
  38.   * @{
  39.   */
  40.  
  41. /* Private types -------------------------------------------------------------*/
  42. /* Private variables ---------------------------------------------------------*/
  43. /* Private constants ---------------------------------------------------------*/
  44. /** @defgroup RCC_LL_Private_Constants RCC Private Constants
  45.   * @{
  46.   */
  47. /* Defines used for the bit position in the register and perform offsets*/
  48. #define RCC_POSITION_HPRE       (uint32_t)4U  /*!< field position in register RCC_CFGR */
  49. #define RCC_POSITION_PPRE1      (uint32_t)8U  /*!< field position in register RCC_CFGR */
  50. #define RCC_POSITION_PLLMUL     (uint32_t)18U /*!< field position in register RCC_CFGR */
  51. #define RCC_POSITION_HSICAL     (uint32_t)8U  /*!< field position in register RCC_CR */
  52. #define RCC_POSITION_HSITRIM    (uint32_t)3U  /*!< field position in register RCC_CR */
  53. #define RCC_POSITION_HSI14TRIM  (uint32_t)3U  /*!< field position in register RCC_CR2 */
  54. #define RCC_POSITION_HSI14CAL   (uint32_t)8U  /*!< field position in register RCC_CR2 */
  55. #if defined(RCC_HSI48_SUPPORT)
  56. #define RCC_POSITION_HSI48CAL   (uint32_t)24U /*!< field position in register RCC_CR2 */
  57. #endif /* RCC_HSI48_SUPPORT */
  58. #define RCC_POSITION_USART1SW   (uint32_t)0U  /*!< field position in register RCC_CFGR3 */
  59. #define RCC_POSITION_USART2SW   (uint32_t)16U /*!< field position in register RCC_CFGR3 */
  60. #define RCC_POSITION_USART3SW   (uint32_t)18U /*!< field position in register RCC_CFGR3 */
  61.  
  62. /**
  63.   * @}
  64.   */
  65.  
  66. /* Private macros ------------------------------------------------------------*/
  67. #if defined(USE_FULL_LL_DRIVER)
  68. /** @defgroup RCC_LL_Private_Macros RCC Private Macros
  69.   * @{
  70.   */
  71. /**
  72.   * @}
  73.   */
  74. #endif /*USE_FULL_LL_DRIVER*/
  75. /* Exported types ------------------------------------------------------------*/
  76. #if defined(USE_FULL_LL_DRIVER)
  77. /** @defgroup RCC_LL_Exported_Types RCC Exported Types
  78.   * @{
  79.   */
  80.  
  81. /** @defgroup LL_ES_CLOCK_FREQ Clocks Frequency Structure
  82.   * @{
  83.   */
  84.  
  85. /**
  86.   * @brief  RCC Clocks Frequency Structure
  87.   */
  88. typedef struct
  89. {
  90.   uint32_t SYSCLK_Frequency;        /*!< SYSCLK clock frequency */
  91.   uint32_t HCLK_Frequency;          /*!< HCLK clock frequency */
  92.   uint32_t PCLK1_Frequency;         /*!< PCLK1 clock frequency */
  93. } LL_RCC_ClocksTypeDef;
  94.  
  95. /**
  96.   * @}
  97.   */
  98.  
  99. /**
  100.   * @}
  101.   */
  102. #endif /* USE_FULL_LL_DRIVER */
  103.  
  104. /* Exported constants --------------------------------------------------------*/
  105. /** @defgroup RCC_LL_Exported_Constants RCC Exported Constants
  106.   * @{
  107.   */
  108.  
  109. /** @defgroup RCC_LL_EC_OSC_VALUES Oscillator Values adaptation
  110.   * @brief    Defines used to adapt values of different oscillators
  111.   * @note     These values could be modified in the user environment according to
  112.   *           HW set-up.
  113.   * @{
  114.   */
  115. #if !defined  (HSE_VALUE)
  116. #define HSE_VALUE    8000000U  /*!< Value of the HSE oscillator in Hz */
  117. #endif /* HSE_VALUE */
  118.  
  119. #if !defined  (HSI_VALUE)
  120. #define HSI_VALUE    8000000U  /*!< Value of the HSI oscillator in Hz */
  121. #endif /* HSI_VALUE */
  122.  
  123. #if !defined  (LSE_VALUE)
  124. #define LSE_VALUE    32768U    /*!< Value of the LSE oscillator in Hz */
  125. #endif /* LSE_VALUE */
  126.  
  127. #if !defined  (LSI_VALUE)
  128. #define LSI_VALUE    32000U    /*!< Value of the LSI oscillator in Hz */
  129. #endif /* LSI_VALUE */
  130. #if defined(RCC_HSI48_SUPPORT)
  131.  
  132. #if !defined  (HSI48_VALUE)
  133. #define HSI48_VALUE  48000000U /*!< Value of the HSI48 oscillator in Hz */
  134. #endif /* HSI48_VALUE */
  135. #endif /* RCC_HSI48_SUPPORT */
  136. /**
  137.   * @}
  138.   */
  139.  
  140. /** @defgroup RCC_LL_EC_CLEAR_FLAG Clear Flags Defines
  141.   * @brief    Flags defines which can be used with LL_RCC_WriteReg function
  142.   * @{
  143.   */
  144. #define LL_RCC_CIR_LSIRDYC                RCC_CIR_LSIRDYC     /*!< LSI Ready Interrupt Clear */
  145. #define LL_RCC_CIR_LSERDYC                RCC_CIR_LSERDYC     /*!< LSE Ready Interrupt Clear */
  146. #define LL_RCC_CIR_HSIRDYC                RCC_CIR_HSIRDYC     /*!< HSI Ready Interrupt Clear */
  147. #define LL_RCC_CIR_HSERDYC                RCC_CIR_HSERDYC     /*!< HSE Ready Interrupt Clear */
  148. #define LL_RCC_CIR_PLLRDYC                RCC_CIR_PLLRDYC     /*!< PLL Ready Interrupt Clear */
  149. #define LL_RCC_CIR_HSI14RDYC               RCC_CIR_HSI14RDYC  /*!< HSI14 Ready Interrupt Clear */
  150. #if defined(RCC_HSI48_SUPPORT)
  151. #define LL_RCC_CIR_HSI48RDYC               RCC_CIR_HSI48RDYC  /*!< HSI48 Ready Interrupt Clear */
  152. #endif /* RCC_HSI48_SUPPORT */
  153. #define LL_RCC_CIR_CSSC                   RCC_CIR_CSSC        /*!< Clock Security System Interrupt Clear */
  154. /**
  155.   * @}
  156.   */
  157.  
  158. /** @defgroup RCC_LL_EC_GET_FLAG Get Flags Defines
  159.   * @brief    Flags defines which can be used with LL_RCC_ReadReg function
  160.   * @{
  161.   */
  162. #define LL_RCC_CIR_LSIRDYF                RCC_CIR_LSIRDYF     /*!< LSI Ready Interrupt flag */
  163. #define LL_RCC_CIR_LSERDYF                RCC_CIR_LSERDYF     /*!< LSE Ready Interrupt flag */
  164. #define LL_RCC_CIR_HSIRDYF                RCC_CIR_HSIRDYF     /*!< HSI Ready Interrupt flag */
  165. #define LL_RCC_CIR_HSERDYF                RCC_CIR_HSERDYF     /*!< HSE Ready Interrupt flag */
  166. #define LL_RCC_CIR_PLLRDYF                RCC_CIR_PLLRDYF     /*!< PLL Ready Interrupt flag */
  167. #define LL_RCC_CIR_HSI14RDYF               RCC_CIR_HSI14RDYF  /*!< HSI14 Ready Interrupt flag */
  168. #if defined(RCC_HSI48_SUPPORT)
  169. #define LL_RCC_CIR_HSI48RDYF               RCC_CIR_HSI48RDYF  /*!< HSI48 Ready Interrupt flag */
  170. #endif /* RCC_HSI48_SUPPORT */
  171. #define LL_RCC_CIR_CSSF                   RCC_CIR_CSSF       /*!< Clock Security System Interrupt flag */
  172. #define LL_RCC_CSR_OBLRSTF                RCC_CSR_OBLRSTF         /*!< OBL reset flag */
  173. #define LL_RCC_CSR_PINRSTF                RCC_CSR_PINRSTF         /*!< PIN reset flag */
  174. #define LL_RCC_CSR_PORRSTF                RCC_CSR_PORRSTF         /*!< POR/PDR reset flag */
  175. #define LL_RCC_CSR_SFTRSTF                RCC_CSR_SFTRSTF         /*!< Software Reset flag */
  176. #define LL_RCC_CSR_IWDGRSTF               RCC_CSR_IWDGRSTF        /*!< Independent Watchdog reset flag */
  177. #define LL_RCC_CSR_WWDGRSTF               RCC_CSR_WWDGRSTF        /*!< Window watchdog reset flag */
  178. #define LL_RCC_CSR_LPWRRSTF               RCC_CSR_LPWRRSTF        /*!< Low-Power reset flag */
  179. #if defined(RCC_CSR_V18PWRRSTF)
  180. #define LL_RCC_CSR_V18PWRRSTF             RCC_CSR_V18PWRRSTF      /*!< Reset flag of the 1.8 V domain. */
  181. #endif /* RCC_CSR_V18PWRRSTF */
  182. /**
  183.   * @}
  184.   */
  185.  
  186. /** @defgroup RCC_LL_EC_IT IT Defines
  187.   * @brief    IT defines which can be used with LL_RCC_ReadReg and  LL_RCC_WriteReg functions
  188.   * @{
  189.   */
  190. #define LL_RCC_CIR_LSIRDYIE               RCC_CIR_LSIRDYIE      /*!< LSI Ready Interrupt Enable */
  191. #define LL_RCC_CIR_LSERDYIE               RCC_CIR_LSERDYIE      /*!< LSE Ready Interrupt Enable */
  192. #define LL_RCC_CIR_HSIRDYIE               RCC_CIR_HSIRDYIE      /*!< HSI Ready Interrupt Enable */
  193. #define LL_RCC_CIR_HSERDYIE               RCC_CIR_HSERDYIE      /*!< HSE Ready Interrupt Enable */
  194. #define LL_RCC_CIR_PLLRDYIE               RCC_CIR_PLLRDYIE      /*!< PLL Ready Interrupt Enable */
  195. #define LL_RCC_CIR_HSI14RDYIE              RCC_CIR_HSI14RDYIE   /*!< HSI14 Ready Interrupt Enable */
  196. #if defined(RCC_HSI48_SUPPORT)
  197. #define LL_RCC_CIR_HSI48RDYIE              RCC_CIR_HSI48RDYIE   /*!< HSI48 Ready Interrupt Enable */
  198. #endif /* RCC_HSI48_SUPPORT */
  199. /**
  200.   * @}
  201.   */
  202.  
  203. /** @defgroup RCC_LL_EC_LSEDRIVE  LSE oscillator drive capability
  204.   * @{
  205.   */
  206. #define LL_RCC_LSEDRIVE_LOW                ((uint32_t)0x00000000U) /*!< Xtal mode lower driving capability */
  207. #define LL_RCC_LSEDRIVE_MEDIUMLOW          RCC_BDCR_LSEDRV_1 /*!< Xtal mode medium low driving capability */
  208. #define LL_RCC_LSEDRIVE_MEDIUMHIGH         RCC_BDCR_LSEDRV_0 /*!< Xtal mode medium high driving capability */
  209. #define LL_RCC_LSEDRIVE_HIGH               RCC_BDCR_LSEDRV   /*!< Xtal mode higher driving capability */
  210. /**
  211.   * @}
  212.   */
  213.  
  214. /** @defgroup RCC_LL_EC_SYS_CLKSOURCE  System clock switch
  215.   * @{
  216.   */
  217. #define LL_RCC_SYS_CLKSOURCE_HSI           RCC_CFGR_SW_HSI    /*!< HSI selection as system clock */
  218. #define LL_RCC_SYS_CLKSOURCE_HSE           RCC_CFGR_SW_HSE    /*!< HSE selection as system clock */
  219. #define LL_RCC_SYS_CLKSOURCE_PLL           RCC_CFGR_SW_PLL    /*!< PLL selection as system clock */
  220. #if defined(RCC_CFGR_SW_HSI48)
  221. #define LL_RCC_SYS_CLKSOURCE_HSI48         RCC_CFGR_SW_HSI48  /*!< HSI48 selection as system clock */
  222. #endif /* RCC_CFGR_SW_HSI48 */
  223. /**
  224.   * @}
  225.   */
  226.  
  227. /** @defgroup RCC_LL_EC_SYS_CLKSOURCE_STATUS  System clock switch status
  228.   * @{
  229.   */
  230. #define LL_RCC_SYS_CLKSOURCE_STATUS_HSI    RCC_CFGR_SWS_HSI   /*!< HSI used as system clock */
  231. #define LL_RCC_SYS_CLKSOURCE_STATUS_HSE    RCC_CFGR_SWS_HSE   /*!< HSE used as system clock */
  232. #define LL_RCC_SYS_CLKSOURCE_STATUS_PLL    RCC_CFGR_SWS_PLL   /*!< PLL used as system clock */
  233. #if defined(RCC_CFGR_SWS_HSI48)
  234. #define LL_RCC_SYS_CLKSOURCE_STATUS_HSI48  RCC_CFGR_SWS_HSI48 /*!< HSI48 used as system clock */
  235. #endif /* RCC_CFGR_SWS_HSI48 */
  236. /**
  237.   * @}
  238.   */
  239.  
  240. /** @defgroup RCC_LL_EC_SYSCLK_DIV  AHB prescaler
  241.   * @{
  242.   */
  243. #define LL_RCC_SYSCLK_DIV_1                RCC_CFGR_HPRE_DIV1   /*!< SYSCLK not divided */
  244. #define LL_RCC_SYSCLK_DIV_2                RCC_CFGR_HPRE_DIV2   /*!< SYSCLK divided by 2 */
  245. #define LL_RCC_SYSCLK_DIV_4                RCC_CFGR_HPRE_DIV4   /*!< SYSCLK divided by 4 */
  246. #define LL_RCC_SYSCLK_DIV_8                RCC_CFGR_HPRE_DIV8   /*!< SYSCLK divided by 8 */
  247. #define LL_RCC_SYSCLK_DIV_16               RCC_CFGR_HPRE_DIV16  /*!< SYSCLK divided by 16 */
  248. #define LL_RCC_SYSCLK_DIV_64               RCC_CFGR_HPRE_DIV64  /*!< SYSCLK divided by 64 */
  249. #define LL_RCC_SYSCLK_DIV_128              RCC_CFGR_HPRE_DIV128 /*!< SYSCLK divided by 128 */
  250. #define LL_RCC_SYSCLK_DIV_256              RCC_CFGR_HPRE_DIV256 /*!< SYSCLK divided by 256 */
  251. #define LL_RCC_SYSCLK_DIV_512              RCC_CFGR_HPRE_DIV512 /*!< SYSCLK divided by 512 */
  252. /**
  253.   * @}
  254.   */
  255.  
  256. /** @defgroup RCC_LL_EC_APB1_DIV  APB low-speed prescaler (APB1)
  257.   * @{
  258.   */
  259. #define LL_RCC_APB1_DIV_1                  RCC_CFGR_PPRE_DIV1  /*!< HCLK not divided */
  260. #define LL_RCC_APB1_DIV_2                  RCC_CFGR_PPRE_DIV2  /*!< HCLK divided by 2 */
  261. #define LL_RCC_APB1_DIV_4                  RCC_CFGR_PPRE_DIV4  /*!< HCLK divided by 4 */
  262. #define LL_RCC_APB1_DIV_8                  RCC_CFGR_PPRE_DIV8  /*!< HCLK divided by 8 */
  263. #define LL_RCC_APB1_DIV_16                 RCC_CFGR_PPRE_DIV16 /*!< HCLK divided by 16 */
  264. /**
  265.   * @}
  266.   */
  267.  
  268. /** @defgroup RCC_LL_EC_MCO1SOURCE  MCO1 SOURCE selection
  269.   * @{
  270.   */
  271. #define LL_RCC_MCO1SOURCE_NOCLOCK          RCC_CFGR_MCOSEL_NOCLOCK      /*!< MCO output disabled, no clock on MCO */
  272. #define LL_RCC_MCO1SOURCE_HSI14            RCC_CFGR_MCOSEL_HSI14        /*!< HSI14 oscillator clock selected */
  273. #define LL_RCC_MCO1SOURCE_SYSCLK           RCC_CFGR_MCOSEL_SYSCLK       /*!< SYSCLK selection as MCO source */
  274. #define LL_RCC_MCO1SOURCE_HSI              RCC_CFGR_MCOSEL_HSI          /*!< HSI selection as MCO source */
  275. #define LL_RCC_MCO1SOURCE_HSE              RCC_CFGR_MCOSEL_HSE          /*!< HSE selection as MCO source */
  276. #define LL_RCC_MCO1SOURCE_LSI              RCC_CFGR_MCOSEL_LSI          /*!< LSI selection as MCO source */
  277. #define LL_RCC_MCO1SOURCE_LSE              RCC_CFGR_MCOSEL_LSE          /*!< LSE selection as MCO source */
  278. #if defined(RCC_CFGR_MCOSEL_HSI48)
  279. #define LL_RCC_MCO1SOURCE_HSI48            RCC_CFGR_MCOSEL_HSI48        /*!< HSI48 selection as MCO source */
  280. #endif /* RCC_CFGR_MCOSEL_HSI48 */
  281. #define LL_RCC_MCO1SOURCE_PLLCLK_DIV_2     RCC_CFGR_MCOSEL_PLL_DIV2     /*!< PLL clock divided by 2*/
  282. #if defined(RCC_CFGR_PLLNODIV)
  283. #define LL_RCC_MCO1SOURCE_PLLCLK           (RCC_CFGR_MCOSEL_PLL_DIV2 | RCC_CFGR_PLLNODIV) /*!< PLL clock selected*/
  284. #endif /* RCC_CFGR_PLLNODIV */
  285. /**
  286.   * @}
  287.   */
  288.  
  289. /** @defgroup RCC_LL_EC_MCO1_DIV  MCO1 prescaler
  290.   * @{
  291.   */
  292. #define LL_RCC_MCO1_DIV_1                  ((uint32_t)0x00000000U)/*!< MCO Clock divided by 1 */
  293. #if defined(RCC_CFGR_MCOPRE)
  294. #define LL_RCC_MCO1_DIV_2                  RCC_CFGR_MCOPRE_DIV2   /*!< MCO Clock divided by 2 */
  295. #define LL_RCC_MCO1_DIV_4                  RCC_CFGR_MCOPRE_DIV4   /*!< MCO Clock divided by 4 */
  296. #define LL_RCC_MCO1_DIV_8                  RCC_CFGR_MCOPRE_DIV8   /*!< MCO Clock divided by 8 */
  297. #define LL_RCC_MCO1_DIV_16                 RCC_CFGR_MCOPRE_DIV16  /*!< MCO Clock divided by 16 */
  298. #define LL_RCC_MCO1_DIV_32                 RCC_CFGR_MCOPRE_DIV32  /*!< MCO Clock divided by 32 */
  299. #define LL_RCC_MCO1_DIV_64                 RCC_CFGR_MCOPRE_DIV64  /*!< MCO Clock divided by 64 */
  300. #define LL_RCC_MCO1_DIV_128                RCC_CFGR_MCOPRE_DIV128 /*!< MCO Clock divided by 128 */
  301. #endif /* RCC_CFGR_MCOPRE */
  302. /**
  303.   * @}
  304.   */
  305.  
  306. #if defined(USE_FULL_LL_DRIVER)
  307. /** @defgroup RCC_LL_EC_PERIPH_FREQUENCY Peripheral clock frequency
  308.   * @{
  309.   */
  310. #define LL_RCC_PERIPH_FREQUENCY_NO         0x00000000U      /*!< No clock enabled for the peripheral            */
  311. #define LL_RCC_PERIPH_FREQUENCY_NA         0xFFFFFFFFU      /*!< Frequency cannot be provided as external clock */
  312. /**
  313.   * @}
  314.   */
  315. #endif /* USE_FULL_LL_DRIVER */
  316.  
  317. /** @defgroup RCC_LL_EC_USART1_CLKSOURCE Peripheral USART clock source selection
  318.   * @{
  319.   */
  320. #define LL_RCC_USART1_CLKSOURCE_PCLK1      (uint32_t)((RCC_POSITION_USART1SW << 24) | RCC_CFGR3_USART1SW_PCLK)   /*!< PCLK1 clock used as USART1 clock source */
  321. #define LL_RCC_USART1_CLKSOURCE_SYSCLK     (uint32_t)((RCC_POSITION_USART1SW << 24) | RCC_CFGR3_USART1SW_SYSCLK) /*!< System clock selected as USART1 clock source */
  322. #define LL_RCC_USART1_CLKSOURCE_LSE        (uint32_t)((RCC_POSITION_USART1SW << 24) | RCC_CFGR3_USART1SW_LSE)    /*!< LSE oscillator clock used as USART1 clock source */
  323. #define LL_RCC_USART1_CLKSOURCE_HSI        (uint32_t)((RCC_POSITION_USART1SW << 24) | RCC_CFGR3_USART1SW_HSI)    /*!< HSI oscillator clock used as USART1 clock source */
  324. #if defined(RCC_CFGR3_USART2SW)
  325. #define LL_RCC_USART2_CLKSOURCE_PCLK1      (uint32_t)((RCC_POSITION_USART2SW << 24) | RCC_CFGR3_USART2SW_PCLK)   /*!< PCLK1 clock used as USART2 clock source */
  326. #define LL_RCC_USART2_CLKSOURCE_SYSCLK     (uint32_t)((RCC_POSITION_USART2SW << 24) | RCC_CFGR3_USART2SW_SYSCLK) /*!< System clock selected as USART2 clock source */
  327. #define LL_RCC_USART2_CLKSOURCE_LSE        (uint32_t)((RCC_POSITION_USART2SW << 24) | RCC_CFGR3_USART2SW_LSE)    /*!< LSE oscillator clock used as USART2 clock source */
  328. #define LL_RCC_USART2_CLKSOURCE_HSI        (uint32_t)((RCC_POSITION_USART2SW << 24) | RCC_CFGR3_USART2SW_HSI)    /*!< HSI oscillator clock used as USART2 clock source */
  329. #endif /* RCC_CFGR3_USART2SW */
  330. #if defined(RCC_CFGR3_USART3SW)
  331. #define LL_RCC_USART3_CLKSOURCE_PCLK1      (uint32_t)((RCC_POSITION_USART3SW << 24) | RCC_CFGR3_USART3SW_PCLK)   /*!< PCLK1 clock used as USART3 clock source */
  332. #define LL_RCC_USART3_CLKSOURCE_SYSCLK     (uint32_t)((RCC_POSITION_USART3SW << 24) | RCC_CFGR3_USART3SW_SYSCLK) /*!< System clock selected as USART3 clock source */
  333. #define LL_RCC_USART3_CLKSOURCE_LSE        (uint32_t)((RCC_POSITION_USART3SW << 24) | RCC_CFGR3_USART3SW_LSE)    /*!< LSE oscillator clock used as USART3 clock source */
  334. #define LL_RCC_USART3_CLKSOURCE_HSI        (uint32_t)((RCC_POSITION_USART3SW << 24) | RCC_CFGR3_USART3SW_HSI)    /*!< HSI oscillator clock used as USART3 clock source */
  335. #endif /* RCC_CFGR3_USART3SW */
  336. /**
  337.   * @}
  338.   */
  339.  
  340. /** @defgroup RCC_LL_EC_I2C1_CLKSOURCE Peripheral I2C clock source selection
  341.   * @{
  342.   */
  343. #define LL_RCC_I2C1_CLKSOURCE_HSI          RCC_CFGR3_I2C1SW_HSI    /*!< HSI oscillator clock used as I2C1 clock source */
  344. #define LL_RCC_I2C1_CLKSOURCE_SYSCLK       RCC_CFGR3_I2C1SW_SYSCLK /*!< System clock selected as I2C1 clock source */
  345. /**
  346.   * @}
  347.   */
  348.  
  349. #if defined(CEC)
  350. /** @defgroup RCC_LL_EC_CEC_CLKSOURCE Peripheral CEC clock source selection
  351.   * @{
  352.   */
  353. #define LL_RCC_CEC_CLKSOURCE_HSI_DIV244    RCC_CFGR3_CECSW_HSI_DIV244 /*!< HSI clock divided by 244 selected as HDMI CEC entry clock source */
  354. #define LL_RCC_CEC_CLKSOURCE_LSE           RCC_CFGR3_CECSW_LSE        /*!< LSE clock selected as HDMI CEC entry clock source */
  355. /**
  356.   * @}
  357.   */
  358.  
  359. #endif /* CEC */
  360.  
  361. #if defined(USB)
  362. /** @defgroup RCC_LL_EC_USB_CLKSOURCE Peripheral USB clock source selection
  363.   * @{
  364.   */
  365. #if defined(RCC_CFGR3_USBSW_HSI48)
  366. #define LL_RCC_USB_CLKSOURCE_HSI48         RCC_CFGR3_USBSW_HSI48   /*!< HSI48 oscillator clock used as USB clock source */
  367. #else
  368. #define LL_RCC_USB_CLKSOURCE_NONE          ((uint32_t)0x00000000)  /*!< USB Clock disabled */
  369. #endif /*RCC_CFGR3_USBSW_HSI48*/
  370. #define LL_RCC_USB_CLKSOURCE_PLL           RCC_CFGR3_USBSW_PLLCLK  /*!< PLL selected as USB clock source */
  371. /**
  372.   * @}
  373.   */
  374.  
  375. #endif /* USB */
  376.  
  377. /** @defgroup RCC_LL_EC_USART1 Peripheral USART get clock source
  378.   * @{
  379.   */
  380. #define LL_RCC_USART1_CLKSOURCE            RCC_POSITION_USART1SW /*!< USART1 Clock source selection */
  381. #if defined(RCC_CFGR3_USART2SW)
  382. #define LL_RCC_USART2_CLKSOURCE            RCC_POSITION_USART2SW /*!< USART2 Clock source selection */
  383. #endif /* RCC_CFGR3_USART2SW */
  384. #if defined(RCC_CFGR3_USART3SW)
  385. #define LL_RCC_USART3_CLKSOURCE            RCC_POSITION_USART3SW /*!< USART3 Clock source selection */
  386. #endif /* RCC_CFGR3_USART3SW */
  387. /**
  388.   * @}
  389.   */
  390.  
  391. /** @defgroup RCC_LL_EC_I2C1 Peripheral I2C get clock source
  392.   * @{
  393.   */
  394. #define LL_RCC_I2C1_CLKSOURCE              RCC_CFGR3_I2C1SW     /*!< I2C1 Clock source selection */
  395. /**
  396.   * @}
  397.   */
  398.  
  399. #if defined(CEC)
  400. /** @defgroup RCC_LL_EC_CEC Peripheral CEC get clock source
  401.   * @{
  402.   */
  403. #define LL_RCC_CEC_CLKSOURCE               RCC_CFGR3_CECSW            /*!< CEC Clock source selection */
  404. /**
  405.   * @}
  406.   */
  407. #endif /* CEC */
  408.  
  409. #if defined(USB)
  410. /** @defgroup RCC_LL_EC_USB Peripheral USB get clock source
  411.   * @{
  412.   */
  413. #define LL_RCC_USB_CLKSOURCE               RCC_CFGR3_USBSW         /*!< USB Clock source selection */
  414. /**
  415.   * @}
  416.   */
  417. #endif /* USB */
  418.  
  419. /** @defgroup RCC_LL_EC_RTC_CLKSOURCE  RTC clock source selection
  420.   * @{
  421.   */
  422. #define LL_RCC_RTC_CLKSOURCE_NONE          0x00000000U                   /*!< No clock used as RTC clock */
  423. #define LL_RCC_RTC_CLKSOURCE_LSE           RCC_BDCR_RTCSEL_0       /*!< LSE oscillator clock used as RTC clock */
  424. #define LL_RCC_RTC_CLKSOURCE_LSI           RCC_BDCR_RTCSEL_1       /*!< LSI oscillator clock used as RTC clock */
  425. #define LL_RCC_RTC_CLKSOURCE_HSE_DIV32     RCC_BDCR_RTCSEL         /*!< HSE oscillator clock divided by 32 used as RTC clock */
  426. /**
  427.   * @}
  428.   */
  429.  
  430. /** @defgroup RCC_LL_EC_PLL_MUL PLL Multiplicator factor
  431.   * @{
  432.   */
  433. #define LL_RCC_PLL_MUL_2                   RCC_CFGR_PLLMUL2  /*!< PLL input clock*2 */
  434. #define LL_RCC_PLL_MUL_3                   RCC_CFGR_PLLMUL3  /*!< PLL input clock*3 */
  435. #define LL_RCC_PLL_MUL_4                   RCC_CFGR_PLLMUL4  /*!< PLL input clock*4 */
  436. #define LL_RCC_PLL_MUL_5                   RCC_CFGR_PLLMUL5  /*!< PLL input clock*5 */
  437. #define LL_RCC_PLL_MUL_6                   RCC_CFGR_PLLMUL6  /*!< PLL input clock*6 */
  438. #define LL_RCC_PLL_MUL_7                   RCC_CFGR_PLLMUL7  /*!< PLL input clock*7 */
  439. #define LL_RCC_PLL_MUL_8                   RCC_CFGR_PLLMUL8  /*!< PLL input clock*8 */
  440. #define LL_RCC_PLL_MUL_9                   RCC_CFGR_PLLMUL9  /*!< PLL input clock*9 */
  441. #define LL_RCC_PLL_MUL_10                  RCC_CFGR_PLLMUL10  /*!< PLL input clock*10 */
  442. #define LL_RCC_PLL_MUL_11                  RCC_CFGR_PLLMUL11  /*!< PLL input clock*11 */
  443. #define LL_RCC_PLL_MUL_12                  RCC_CFGR_PLLMUL12  /*!< PLL input clock*12 */
  444. #define LL_RCC_PLL_MUL_13                  RCC_CFGR_PLLMUL13  /*!< PLL input clock*13 */
  445. #define LL_RCC_PLL_MUL_14                  RCC_CFGR_PLLMUL14  /*!< PLL input clock*14 */
  446. #define LL_RCC_PLL_MUL_15                  RCC_CFGR_PLLMUL15  /*!< PLL input clock*15 */
  447. #define LL_RCC_PLL_MUL_16                  RCC_CFGR_PLLMUL16  /*!< PLL input clock*16 */
  448. /**
  449.   * @}
  450.   */
  451.  
  452. /** @defgroup RCC_LL_EC_PLLSOURCE PLL SOURCE
  453.   * @{
  454.   */
  455. #define LL_RCC_PLLSOURCE_NONE              0x00000000U                                   /*!< No clock selected as main PLL entry clock source */
  456. #define LL_RCC_PLLSOURCE_HSE               RCC_CFGR_PLLSRC_HSE_PREDIV                    /*!< HSE/PREDIV clock selected as PLL entry clock source */
  457. #if defined(RCC_PLLSRC_PREDIV1_SUPPORT)
  458. #define LL_RCC_PLLSOURCE_HSI               RCC_CFGR_PLLSRC_HSI_PREDIV                    /*!< HSI/PREDIV clock selected as PLL entry clock source */
  459. #if defined(RCC_CFGR_SW_HSI48)
  460. #define LL_RCC_PLLSOURCE_HSI48             RCC_CFGR_PLLSRC_HSI48_PREDIV                  /*!< HSI48/PREDIV clock selected as PLL entry clock source */
  461. #endif /* RCC_CFGR_SW_HSI48 */
  462. #else
  463. #define LL_RCC_PLLSOURCE_HSI_DIV_2         RCC_CFGR_PLLSRC_HSI_DIV2                      /*!< HSI clock divided by 2 selected as PLL entry clock source */
  464. #define LL_RCC_PLLSOURCE_HSE_DIV_1         (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV1)    /*!< HSE clock selected as PLL entry clock source */
  465. #define LL_RCC_PLLSOURCE_HSE_DIV_2         (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV2)    /*!< HSE/2 clock selected as PLL entry clock source */
  466. #define LL_RCC_PLLSOURCE_HSE_DIV_3         (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV3)    /*!< HSE/3 clock selected as PLL entry clock source */
  467. #define LL_RCC_PLLSOURCE_HSE_DIV_4         (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV4)    /*!< HSE/4 clock selected as PLL entry clock source */
  468. #define LL_RCC_PLLSOURCE_HSE_DIV_5         (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV5)    /*!< HSE/5 clock selected as PLL entry clock source */
  469. #define LL_RCC_PLLSOURCE_HSE_DIV_6         (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV6)    /*!< HSE/6 clock selected as PLL entry clock source */
  470. #define LL_RCC_PLLSOURCE_HSE_DIV_7         (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV7)    /*!< HSE/7 clock selected as PLL entry clock source */
  471. #define LL_RCC_PLLSOURCE_HSE_DIV_8         (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV8)    /*!< HSE/8 clock selected as PLL entry clock source */
  472. #define LL_RCC_PLLSOURCE_HSE_DIV_9         (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV9)    /*!< HSE/9 clock selected as PLL entry clock source */
  473. #define LL_RCC_PLLSOURCE_HSE_DIV_10        (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV10)   /*!< HSE/10 clock selected as PLL entry clock source */
  474. #define LL_RCC_PLLSOURCE_HSE_DIV_11        (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV11)   /*!< HSE/11 clock selected as PLL entry clock source */
  475. #define LL_RCC_PLLSOURCE_HSE_DIV_12        (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV12)   /*!< HSE/12 clock selected as PLL entry clock source */
  476. #define LL_RCC_PLLSOURCE_HSE_DIV_13        (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV13)   /*!< HSE/13 clock selected as PLL entry clock source */
  477. #define LL_RCC_PLLSOURCE_HSE_DIV_14        (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV14)   /*!< HSE/14 clock selected as PLL entry clock source */
  478. #define LL_RCC_PLLSOURCE_HSE_DIV_15        (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV15)   /*!< HSE/15 clock selected as PLL entry clock source */
  479. #define LL_RCC_PLLSOURCE_HSE_DIV_16        (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV16)   /*!< HSE/16 clock selected as PLL entry clock source */
  480. #endif /* RCC_PLLSRC_PREDIV1_SUPPORT */
  481. /**
  482.   * @}
  483.   */
  484.  
  485. /** @defgroup RCC_LL_EC_PREDIV_DIV PREDIV Division factor
  486.   * @{
  487.   */
  488. #define LL_RCC_PREDIV_DIV_1                RCC_CFGR2_PREDIV_DIV1   /*!< PREDIV input clock not divided */
  489. #define LL_RCC_PREDIV_DIV_2                RCC_CFGR2_PREDIV_DIV2   /*!< PREDIV input clock divided by 2 */
  490. #define LL_RCC_PREDIV_DIV_3                RCC_CFGR2_PREDIV_DIV3   /*!< PREDIV input clock divided by 3 */
  491. #define LL_RCC_PREDIV_DIV_4                RCC_CFGR2_PREDIV_DIV4   /*!< PREDIV input clock divided by 4 */
  492. #define LL_RCC_PREDIV_DIV_5                RCC_CFGR2_PREDIV_DIV5   /*!< PREDIV input clock divided by 5 */
  493. #define LL_RCC_PREDIV_DIV_6                RCC_CFGR2_PREDIV_DIV6   /*!< PREDIV input clock divided by 6 */
  494. #define LL_RCC_PREDIV_DIV_7                RCC_CFGR2_PREDIV_DIV7   /*!< PREDIV input clock divided by 7 */
  495. #define LL_RCC_PREDIV_DIV_8                RCC_CFGR2_PREDIV_DIV8   /*!< PREDIV input clock divided by 8 */
  496. #define LL_RCC_PREDIV_DIV_9                RCC_CFGR2_PREDIV_DIV9   /*!< PREDIV input clock divided by 9 */
  497. #define LL_RCC_PREDIV_DIV_10               RCC_CFGR2_PREDIV_DIV10  /*!< PREDIV input clock divided by 10 */
  498. #define LL_RCC_PREDIV_DIV_11               RCC_CFGR2_PREDIV_DIV11  /*!< PREDIV input clock divided by 11 */
  499. #define LL_RCC_PREDIV_DIV_12               RCC_CFGR2_PREDIV_DIV12  /*!< PREDIV input clock divided by 12 */
  500. #define LL_RCC_PREDIV_DIV_13               RCC_CFGR2_PREDIV_DIV13  /*!< PREDIV input clock divided by 13 */
  501. #define LL_RCC_PREDIV_DIV_14               RCC_CFGR2_PREDIV_DIV14  /*!< PREDIV input clock divided by 14 */
  502. #define LL_RCC_PREDIV_DIV_15               RCC_CFGR2_PREDIV_DIV15  /*!< PREDIV input clock divided by 15 */
  503. #define LL_RCC_PREDIV_DIV_16               RCC_CFGR2_PREDIV_DIV16  /*!< PREDIV input clock divided by 16 */
  504. /**
  505.   * @}
  506.   */
  507.  
  508. /**
  509.   * @}
  510.   */
  511.  
  512. /* Exported macro ------------------------------------------------------------*/
  513. /** @defgroup RCC_LL_Exported_Macros RCC Exported Macros
  514.   * @{
  515.   */
  516.  
  517. /** @defgroup RCC_LL_EM_WRITE_READ Common Write and read registers Macros
  518.   * @{
  519.   */
  520.  
  521. /**
  522.   * @brief  Write a value in RCC register
  523.   * @param  __REG__ Register to be written
  524.   * @param  __VALUE__ Value to be written in the register
  525.   * @retval None
  526.   */
  527. #define LL_RCC_WriteReg(__REG__, __VALUE__) WRITE_REG(RCC->__REG__, (__VALUE__))
  528.  
  529. /**
  530.   * @brief  Read a value in RCC register
  531.   * @param  __REG__ Register to be read
  532.   * @retval Register value
  533.   */
  534. #define LL_RCC_ReadReg(__REG__) READ_REG(RCC->__REG__)
  535. /**
  536.   * @}
  537.   */
  538.  
  539. /** @defgroup RCC_LL_EM_CALC_FREQ Calculate frequencies
  540.   * @{
  541.   */
  542.  
  543. #if defined(RCC_PLLSRC_PREDIV1_SUPPORT)
  544. /**
  545.   * @brief  Helper macro to calculate the PLLCLK frequency
  546.   * @note ex: @ref __LL_RCC_CALC_PLLCLK_FREQ (HSE_VALUE, @ref LL_RCC_PLL_GetMultiplicator()
  547.   *             , @ref LL_RCC_PLL_GetPrediv());
  548.   * @param  __INPUTFREQ__ PLL Input frequency (based on HSE/HSI/HSI48)
  549.   * @param  __PLLMUL__ This parameter can be one of the following values:
  550.   *         @arg @ref LL_RCC_PLL_MUL_2
  551.   *         @arg @ref LL_RCC_PLL_MUL_3
  552.   *         @arg @ref LL_RCC_PLL_MUL_4
  553.   *         @arg @ref LL_RCC_PLL_MUL_5
  554.   *         @arg @ref LL_RCC_PLL_MUL_6
  555.   *         @arg @ref LL_RCC_PLL_MUL_7
  556.   *         @arg @ref LL_RCC_PLL_MUL_8
  557.   *         @arg @ref LL_RCC_PLL_MUL_9
  558.   *         @arg @ref LL_RCC_PLL_MUL_10
  559.   *         @arg @ref LL_RCC_PLL_MUL_11
  560.   *         @arg @ref LL_RCC_PLL_MUL_12
  561.   *         @arg @ref LL_RCC_PLL_MUL_13
  562.   *         @arg @ref LL_RCC_PLL_MUL_14
  563.   *         @arg @ref LL_RCC_PLL_MUL_15
  564.   *         @arg @ref LL_RCC_PLL_MUL_16
  565.   * @param  __PLLPREDIV__ This parameter can be one of the following values:
  566.   *         @arg @ref LL_RCC_PREDIV_DIV_1
  567.   *         @arg @ref LL_RCC_PREDIV_DIV_2
  568.   *         @arg @ref LL_RCC_PREDIV_DIV_3
  569.   *         @arg @ref LL_RCC_PREDIV_DIV_4
  570.   *         @arg @ref LL_RCC_PREDIV_DIV_5
  571.   *         @arg @ref LL_RCC_PREDIV_DIV_6
  572.   *         @arg @ref LL_RCC_PREDIV_DIV_7
  573.   *         @arg @ref LL_RCC_PREDIV_DIV_8
  574.   *         @arg @ref LL_RCC_PREDIV_DIV_9
  575.   *         @arg @ref LL_RCC_PREDIV_DIV_10
  576.   *         @arg @ref LL_RCC_PREDIV_DIV_11
  577.   *         @arg @ref LL_RCC_PREDIV_DIV_12
  578.   *         @arg @ref LL_RCC_PREDIV_DIV_13
  579.   *         @arg @ref LL_RCC_PREDIV_DIV_14
  580.   *         @arg @ref LL_RCC_PREDIV_DIV_15
  581.   *         @arg @ref LL_RCC_PREDIV_DIV_16
  582.   * @retval PLL clock frequency (in Hz)
  583.   */
  584. #define __LL_RCC_CALC_PLLCLK_FREQ(__INPUTFREQ__, __PLLMUL__, __PLLPREDIV__) \
  585.           (((__INPUTFREQ__) / ((((__PLLPREDIV__) & RCC_CFGR2_PREDIV) + 1U))) * ((((__PLLMUL__) & RCC_CFGR_PLLMUL) >> RCC_POSITION_PLLMUL) + 2U))
  586.  
  587. #else
  588. /**
  589.   * @brief  Helper macro to calculate the PLLCLK frequency
  590.   * @note ex: @ref __LL_RCC_CALC_PLLCLK_FREQ (HSE_VALUE / (@ref LL_RCC_PLL_GetPrediv () + 1), @ref LL_RCC_PLL_GetMultiplicator());
  591.   * @param  __INPUTFREQ__ PLL Input frequency (based on HSE div Prediv / HSI div 2)
  592.   * @param  __PLLMUL__ This parameter can be one of the following values:
  593.   *         @arg @ref LL_RCC_PLL_MUL_2
  594.   *         @arg @ref LL_RCC_PLL_MUL_3
  595.   *         @arg @ref LL_RCC_PLL_MUL_4
  596.   *         @arg @ref LL_RCC_PLL_MUL_5
  597.   *         @arg @ref LL_RCC_PLL_MUL_6
  598.   *         @arg @ref LL_RCC_PLL_MUL_7
  599.   *         @arg @ref LL_RCC_PLL_MUL_8
  600.   *         @arg @ref LL_RCC_PLL_MUL_9
  601.   *         @arg @ref LL_RCC_PLL_MUL_10
  602.   *         @arg @ref LL_RCC_PLL_MUL_11
  603.   *         @arg @ref LL_RCC_PLL_MUL_12
  604.   *         @arg @ref LL_RCC_PLL_MUL_13
  605.   *         @arg @ref LL_RCC_PLL_MUL_14
  606.   *         @arg @ref LL_RCC_PLL_MUL_15
  607.   *         @arg @ref LL_RCC_PLL_MUL_16
  608.   * @retval PLL clock frequency (in Hz)
  609.   */
  610. #define __LL_RCC_CALC_PLLCLK_FREQ(__INPUTFREQ__, __PLLMUL__) \
  611.           ((__INPUTFREQ__) * ((((__PLLMUL__) & RCC_CFGR_PLLMUL) >> RCC_POSITION_PLLMUL) + 2U))
  612. #endif /* RCC_PLLSRC_PREDIV1_SUPPORT */
  613. /**
  614.   * @brief  Helper macro to calculate the HCLK frequency
  615.   * @note: __AHBPRESCALER__ be retrieved by @ref LL_RCC_GetAHBPrescaler
  616.   *        ex: __LL_RCC_CALC_HCLK_FREQ(LL_RCC_GetAHBPrescaler())
  617.   * @param  __SYSCLKFREQ__ SYSCLK frequency (based on HSE/HSI/PLLCLK)
  618.   * @param  __AHBPRESCALER__ This parameter can be one of the following values:
  619.   *         @arg @ref LL_RCC_SYSCLK_DIV_1
  620.   *         @arg @ref LL_RCC_SYSCLK_DIV_2
  621.   *         @arg @ref LL_RCC_SYSCLK_DIV_4
  622.   *         @arg @ref LL_RCC_SYSCLK_DIV_8
  623.   *         @arg @ref LL_RCC_SYSCLK_DIV_16
  624.   *         @arg @ref LL_RCC_SYSCLK_DIV_64
  625.   *         @arg @ref LL_RCC_SYSCLK_DIV_128
  626.   *         @arg @ref LL_RCC_SYSCLK_DIV_256
  627.   *         @arg @ref LL_RCC_SYSCLK_DIV_512
  628.   * @retval HCLK clock frequency (in Hz)
  629.   */
  630. #define __LL_RCC_CALC_HCLK_FREQ(__SYSCLKFREQ__, __AHBPRESCALER__) ((__SYSCLKFREQ__) >> AHBPrescTable[((__AHBPRESCALER__) & RCC_CFGR_HPRE) >>  RCC_CFGR_HPRE_Pos])
  631.  
  632. /**
  633.   * @brief  Helper macro to calculate the PCLK1 frequency (ABP1)
  634.   * @note: __APB1PRESCALER__ be retrieved by @ref LL_RCC_GetAPB1Prescaler
  635.   *        ex: __LL_RCC_CALC_PCLK1_FREQ(LL_RCC_GetAPB1Prescaler())
  636.   * @param  __HCLKFREQ__ HCLK frequency
  637.   * @param  __APB1PRESCALER__ This parameter can be one of the following values:
  638.   *         @arg @ref LL_RCC_APB1_DIV_1
  639.   *         @arg @ref LL_RCC_APB1_DIV_2
  640.   *         @arg @ref LL_RCC_APB1_DIV_4
  641.   *         @arg @ref LL_RCC_APB1_DIV_8
  642.   *         @arg @ref LL_RCC_APB1_DIV_16
  643.   * @retval PCLK1 clock frequency (in Hz)
  644.   */
  645. #define __LL_RCC_CALC_PCLK1_FREQ(__HCLKFREQ__, __APB1PRESCALER__) ((__HCLKFREQ__) >> APBPrescTable[(__APB1PRESCALER__) >>  RCC_CFGR_PPRE_Pos])
  646.  
  647. /**
  648.   * @}
  649.   */
  650.  
  651. /**
  652.   * @}
  653.   */
  654.  
  655. /* Exported functions --------------------------------------------------------*/
  656. /** @defgroup RCC_LL_Exported_Functions RCC Exported Functions
  657.   * @{
  658.   */
  659.  
  660. /** @defgroup RCC_LL_EF_HSE HSE
  661.   * @{
  662.   */
  663.  
  664. /**
  665.   * @brief  Enable the Clock Security System.
  666.   * @rmtoll CR           CSSON         LL_RCC_HSE_EnableCSS
  667.   * @retval None
  668.   */
  669. __STATIC_INLINE void LL_RCC_HSE_EnableCSS(void)
  670. {
  671.   SET_BIT(RCC->CR, RCC_CR_CSSON);
  672. }
  673.  
  674. /**
  675.   * @brief  Disable the Clock Security System.
  676.   * @note Cannot be disabled in HSE is ready (only by hardware)
  677.   * @rmtoll CR           CSSON         LL_RCC_HSE_DisableCSS
  678.   * @retval None
  679.   */
  680. __STATIC_INLINE void LL_RCC_HSE_DisableCSS(void)
  681. {
  682.   CLEAR_BIT(RCC->CR, RCC_CR_CSSON);
  683. }
  684.  
  685. /**
  686.   * @brief  Enable HSE external oscillator (HSE Bypass)
  687.   * @rmtoll CR           HSEBYP        LL_RCC_HSE_EnableBypass
  688.   * @retval None
  689.   */
  690. __STATIC_INLINE void LL_RCC_HSE_EnableBypass(void)
  691. {
  692.   SET_BIT(RCC->CR, RCC_CR_HSEBYP);
  693. }
  694.  
  695. /**
  696.   * @brief  Disable HSE external oscillator (HSE Bypass)
  697.   * @rmtoll CR           HSEBYP        LL_RCC_HSE_DisableBypass
  698.   * @retval None
  699.   */
  700. __STATIC_INLINE void LL_RCC_HSE_DisableBypass(void)
  701. {
  702.   CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);
  703. }
  704.  
  705. /**
  706.   * @brief  Enable HSE crystal oscillator (HSE ON)
  707.   * @rmtoll CR           HSEON         LL_RCC_HSE_Enable
  708.   * @retval None
  709.   */
  710. __STATIC_INLINE void LL_RCC_HSE_Enable(void)
  711. {
  712.   SET_BIT(RCC->CR, RCC_CR_HSEON);
  713. }
  714.  
  715. /**
  716.   * @brief  Disable HSE crystal oscillator (HSE ON)
  717.   * @rmtoll CR           HSEON         LL_RCC_HSE_Disable
  718.   * @retval None
  719.   */
  720. __STATIC_INLINE void LL_RCC_HSE_Disable(void)
  721. {
  722.   CLEAR_BIT(RCC->CR, RCC_CR_HSEON);
  723. }
  724.  
  725. /**
  726.   * @brief  Check if HSE oscillator Ready
  727.   * @rmtoll CR           HSERDY        LL_RCC_HSE_IsReady
  728.   * @retval State of bit (1 or 0).
  729.   */
  730. __STATIC_INLINE uint32_t LL_RCC_HSE_IsReady(void)
  731. {
  732.   return (READ_BIT(RCC->CR, RCC_CR_HSERDY) == (RCC_CR_HSERDY));
  733. }
  734.  
  735. /**
  736.   * @}
  737.   */
  738.  
  739. /** @defgroup RCC_LL_EF_HSI HSI
  740.   * @{
  741.   */
  742.  
  743. /**
  744.   * @brief  Enable HSI oscillator
  745.   * @rmtoll CR           HSION         LL_RCC_HSI_Enable
  746.   * @retval None
  747.   */
  748. __STATIC_INLINE void LL_RCC_HSI_Enable(void)
  749. {
  750.   SET_BIT(RCC->CR, RCC_CR_HSION);
  751. }
  752.  
  753. /**
  754.   * @brief  Disable HSI oscillator
  755.   * @rmtoll CR           HSION         LL_RCC_HSI_Disable
  756.   * @retval None
  757.   */
  758. __STATIC_INLINE void LL_RCC_HSI_Disable(void)
  759. {
  760.   CLEAR_BIT(RCC->CR, RCC_CR_HSION);
  761. }
  762.  
  763. /**
  764.   * @brief  Check if HSI clock is ready
  765.   * @rmtoll CR           HSIRDY        LL_RCC_HSI_IsReady
  766.   * @retval State of bit (1 or 0).
  767.   */
  768. __STATIC_INLINE uint32_t LL_RCC_HSI_IsReady(void)
  769. {
  770.   return (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == (RCC_CR_HSIRDY));
  771. }
  772.  
  773. /**
  774.   * @brief  Get HSI Calibration value
  775.   * @note When HSITRIM is written, HSICAL is updated with the sum of
  776.   *       HSITRIM and the factory trim value
  777.   * @rmtoll CR        HSICAL        LL_RCC_HSI_GetCalibration
  778.   * @retval Between Min_Data = 0x00 and Max_Data = 0xFF
  779.   */
  780. __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibration(void)
  781. {
  782.   return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_HSICAL) >> RCC_CR_HSICAL_Pos);
  783. }
  784.  
  785. /**
  786.   * @brief  Set HSI Calibration trimming
  787.   * @note user-programmable trimming value that is added to the HSICAL
  788.   * @note Default value is 16, which, when added to the HSICAL value,
  789.   *       should trim the HSI to 16 MHz +/- 1 %
  790.   * @rmtoll CR        HSITRIM       LL_RCC_HSI_SetCalibTrimming
  791.   * @param  Value between Min_Data = 0x00 and Max_Data = 0x1F
  792.   * @retval None
  793.   */
  794. __STATIC_INLINE void LL_RCC_HSI_SetCalibTrimming(uint32_t Value)
  795. {
  796.   MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, Value << RCC_CR_HSITRIM_Pos);
  797. }
  798.  
  799. /**
  800.   * @brief  Get HSI Calibration trimming
  801.   * @rmtoll CR        HSITRIM       LL_RCC_HSI_GetCalibTrimming
  802.   * @retval Between Min_Data = 0x00 and Max_Data = 0x1F
  803.   */
  804. __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibTrimming(void)
  805. {
  806.   return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
  807. }
  808.  
  809. /**
  810.   * @}
  811.   */
  812.  
  813. #if defined(RCC_HSI48_SUPPORT)
  814. /** @defgroup RCC_LL_EF_HSI48 HSI48
  815.   * @{
  816.   */
  817.  
  818. /**
  819.   * @brief  Enable HSI48
  820.   * @rmtoll CR2          HSI48ON       LL_RCC_HSI48_Enable
  821.   * @retval None
  822.   */
  823. __STATIC_INLINE void LL_RCC_HSI48_Enable(void)
  824. {
  825.   SET_BIT(RCC->CR2, RCC_CR2_HSI48ON);
  826. }
  827.  
  828. /**
  829.   * @brief  Disable HSI48
  830.   * @rmtoll CR2          HSI48ON       LL_RCC_HSI48_Disable
  831.   * @retval None
  832.   */
  833. __STATIC_INLINE void LL_RCC_HSI48_Disable(void)
  834. {
  835.   CLEAR_BIT(RCC->CR2, RCC_CR2_HSI48ON);
  836. }
  837.  
  838. /**
  839.   * @brief  Check if HSI48 oscillator Ready
  840.   * @rmtoll CR2          HSI48RDY      LL_RCC_HSI48_IsReady
  841.   * @retval State of bit (1 or 0).
  842.   */
  843. __STATIC_INLINE uint32_t LL_RCC_HSI48_IsReady(void)
  844. {
  845.   return (READ_BIT(RCC->CR2, RCC_CR2_HSI48RDY) == (RCC_CR2_HSI48RDY));
  846. }
  847.  
  848. /**
  849.   * @brief  Get HSI48 Calibration value
  850.   * @rmtoll CR2          HSI48CAL      LL_RCC_HSI48_GetCalibration
  851.   * @retval Between Min_Data = 0x00 and Max_Data = 0xFF
  852.   */
  853. __STATIC_INLINE uint32_t LL_RCC_HSI48_GetCalibration(void)
  854. {
  855.   return (uint32_t)(READ_BIT(RCC->CR2, RCC_CR2_HSI48CAL) >> RCC_POSITION_HSI48CAL);
  856. }
  857.  
  858. /**
  859.   * @}
  860.   */
  861.  
  862. #endif /* RCC_HSI48_SUPPORT */
  863.  
  864. /** @defgroup RCC_LL_EF_HSI14 HSI14
  865.   * @{
  866.   */
  867.  
  868. /**
  869.   * @brief  Enable HSI14
  870.   * @rmtoll CR2          HSI14ON       LL_RCC_HSI14_Enable
  871.   * @retval None
  872.   */
  873. __STATIC_INLINE void LL_RCC_HSI14_Enable(void)
  874. {
  875.   SET_BIT(RCC->CR2, RCC_CR2_HSI14ON);
  876. }
  877.  
  878. /**
  879.   * @brief  Disable HSI14
  880.   * @rmtoll CR2          HSI14ON       LL_RCC_HSI14_Disable
  881.   * @retval None
  882.   */
  883. __STATIC_INLINE void LL_RCC_HSI14_Disable(void)
  884. {
  885.   CLEAR_BIT(RCC->CR2, RCC_CR2_HSI14ON);
  886. }
  887.  
  888. /**
  889.   * @brief  Check if HSI14 oscillator Ready
  890.   * @rmtoll CR2          HSI14RDY      LL_RCC_HSI14_IsReady
  891.   * @retval State of bit (1 or 0).
  892.   */
  893. __STATIC_INLINE uint32_t LL_RCC_HSI14_IsReady(void)
  894. {
  895.   return (READ_BIT(RCC->CR2, RCC_CR2_HSI14RDY) == (RCC_CR2_HSI14RDY));
  896. }
  897.  
  898. /**
  899.   * @brief  ADC interface can turn on the HSI14 oscillator
  900.   * @rmtoll CR2          HSI14DIS      LL_RCC_HSI14_EnableADCControl
  901.   * @retval None
  902.   */
  903. __STATIC_INLINE void LL_RCC_HSI14_EnableADCControl(void)
  904. {
  905.   CLEAR_BIT(RCC->CR2, RCC_CR2_HSI14DIS);
  906. }
  907.  
  908. /**
  909.   * @brief  ADC interface can not turn on the HSI14 oscillator
  910.   * @rmtoll CR2          HSI14DIS      LL_RCC_HSI14_DisableADCControl
  911.   * @retval None
  912.   */
  913. __STATIC_INLINE void LL_RCC_HSI14_DisableADCControl(void)
  914. {
  915.   SET_BIT(RCC->CR2, RCC_CR2_HSI14DIS);
  916. }
  917.  
  918. /**
  919.   * @brief  Set HSI14 Calibration trimming
  920.   * @note user-programmable trimming value that is added to the HSI14CAL
  921.   * @note Default value is 16, which, when added to the HSI14CAL value,
  922.   *       should trim the HSI14 to 14 MHz +/- 1 %
  923.   * @rmtoll CR2          HSI14TRIM     LL_RCC_HSI14_SetCalibTrimming
  924.   * @param  Value between Min_Data = 0x00 and Max_Data = 0xFF
  925.   * @retval None
  926.   */
  927. __STATIC_INLINE void LL_RCC_HSI14_SetCalibTrimming(uint32_t Value)
  928. {
  929.   MODIFY_REG(RCC->CR2, RCC_CR2_HSI14TRIM, Value << RCC_POSITION_HSI14TRIM);
  930. }
  931.  
  932. /**
  933.   * @brief  Get HSI14 Calibration value
  934.   * @note When HSI14TRIM is written, HSI14CAL is updated with the sum of
  935.   *       HSI14TRIM and the factory trim value
  936.   * @rmtoll CR2          HSI14TRIM     LL_RCC_HSI14_GetCalibTrimming
  937.   * @retval Between Min_Data = 0x00 and Max_Data = 0x1F
  938.   */
  939. __STATIC_INLINE uint32_t LL_RCC_HSI14_GetCalibTrimming(void)
  940. {
  941.   return (uint32_t)(READ_BIT(RCC->CR2, RCC_CR2_HSI14TRIM) >> RCC_POSITION_HSI14TRIM);
  942. }
  943.  
  944. /**
  945.   * @brief  Get HSI14 Calibration trimming
  946.   * @rmtoll CR2          HSI14CAL      LL_RCC_HSI14_GetCalibration
  947.   * @retval Between Min_Data = 0x00 and Max_Data = 0x1F
  948.   */
  949. __STATIC_INLINE uint32_t LL_RCC_HSI14_GetCalibration(void)
  950. {
  951.   return (uint32_t)(READ_BIT(RCC->CR2, RCC_CR2_HSI14CAL) >> RCC_POSITION_HSI14CAL);
  952. }
  953.  
  954. /**
  955.   * @}
  956.   */
  957.  
  958. /** @defgroup RCC_LL_EF_LSE LSE
  959.   * @{
  960.   */
  961.  
  962. /**
  963.   * @brief  Enable  Low Speed External (LSE) crystal.
  964.   * @rmtoll BDCR         LSEON         LL_RCC_LSE_Enable
  965.   * @retval None
  966.   */
  967. __STATIC_INLINE void LL_RCC_LSE_Enable(void)
  968. {
  969.   SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);
  970. }
  971.  
  972. /**
  973.   * @brief  Disable  Low Speed External (LSE) crystal.
  974.   * @rmtoll BDCR         LSEON         LL_RCC_LSE_Disable
  975.   * @retval None
  976.   */
  977. __STATIC_INLINE void LL_RCC_LSE_Disable(void)
  978. {
  979.   CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);
  980. }
  981.  
  982. /**
  983.   * @brief  Enable external clock source (LSE bypass).
  984.   * @rmtoll BDCR         LSEBYP        LL_RCC_LSE_EnableBypass
  985.   * @retval None
  986.   */
  987. __STATIC_INLINE void LL_RCC_LSE_EnableBypass(void)
  988. {
  989.   SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
  990. }
  991.  
  992. /**
  993.   * @brief  Disable external clock source (LSE bypass).
  994.   * @rmtoll BDCR         LSEBYP        LL_RCC_LSE_DisableBypass
  995.   * @retval None
  996.   */
  997. __STATIC_INLINE void LL_RCC_LSE_DisableBypass(void)
  998. {
  999.   CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
  1000. }
  1001.  
  1002. /**
  1003.   * @brief  Set LSE oscillator drive capability
  1004.   * @note The oscillator is in Xtal mode when it is not in bypass mode.
  1005.   * @rmtoll BDCR         LSEDRV        LL_RCC_LSE_SetDriveCapability
  1006.   * @param  LSEDrive This parameter can be one of the following values:
  1007.   *         @arg @ref LL_RCC_LSEDRIVE_LOW
  1008.   *         @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW
  1009.   *         @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH
  1010.   *         @arg @ref LL_RCC_LSEDRIVE_HIGH
  1011.   * @retval None
  1012.   */
  1013. __STATIC_INLINE void LL_RCC_LSE_SetDriveCapability(uint32_t LSEDrive)
  1014. {
  1015.   MODIFY_REG(RCC->BDCR, RCC_BDCR_LSEDRV, LSEDrive);
  1016. }
  1017.  
  1018. /**
  1019.   * @brief  Get LSE oscillator drive capability
  1020.   * @rmtoll BDCR         LSEDRV        LL_RCC_LSE_GetDriveCapability
  1021.   * @retval Returned value can be one of the following values:
  1022.   *         @arg @ref LL_RCC_LSEDRIVE_LOW
  1023.   *         @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW
  1024.   *         @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH
  1025.   *         @arg @ref LL_RCC_LSEDRIVE_HIGH
  1026.   */
  1027. __STATIC_INLINE uint32_t LL_RCC_LSE_GetDriveCapability(void)
  1028. {
  1029.   return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_LSEDRV));
  1030. }
  1031.  
  1032. /**
  1033.   * @brief  Check if LSE oscillator Ready
  1034.   * @rmtoll BDCR         LSERDY        LL_RCC_LSE_IsReady
  1035.   * @retval State of bit (1 or 0).
  1036.   */
  1037. __STATIC_INLINE uint32_t LL_RCC_LSE_IsReady(void)
  1038. {
  1039.   return (READ_BIT(RCC->BDCR, RCC_BDCR_LSERDY) == (RCC_BDCR_LSERDY));
  1040. }
  1041.  
  1042. /**
  1043.   * @}
  1044.   */
  1045.  
  1046. /** @defgroup RCC_LL_EF_LSI LSI
  1047.   * @{
  1048.   */
  1049.  
  1050. /**
  1051.   * @brief  Enable LSI Oscillator
  1052.   * @rmtoll CSR          LSION         LL_RCC_LSI_Enable
  1053.   * @retval None
  1054.   */
  1055. __STATIC_INLINE void LL_RCC_LSI_Enable(void)
  1056. {
  1057.   SET_BIT(RCC->CSR, RCC_CSR_LSION);
  1058. }
  1059.  
  1060. /**
  1061.   * @brief  Disable LSI Oscillator
  1062.   * @rmtoll CSR          LSION         LL_RCC_LSI_Disable
  1063.   * @retval None
  1064.   */
  1065. __STATIC_INLINE void LL_RCC_LSI_Disable(void)
  1066. {
  1067.   CLEAR_BIT(RCC->CSR, RCC_CSR_LSION);
  1068. }
  1069.  
  1070. /**
  1071.   * @brief  Check if LSI is Ready
  1072.   * @rmtoll CSR          LSIRDY        LL_RCC_LSI_IsReady
  1073.   * @retval State of bit (1 or 0).
  1074.   */
  1075. __STATIC_INLINE uint32_t LL_RCC_LSI_IsReady(void)
  1076. {
  1077.   return (READ_BIT(RCC->CSR, RCC_CSR_LSIRDY) == (RCC_CSR_LSIRDY));
  1078. }
  1079.  
  1080. /**
  1081.   * @}
  1082.   */
  1083.  
  1084. /** @defgroup RCC_LL_EF_System System
  1085.   * @{
  1086.   */
  1087.  
  1088. /**
  1089.   * @brief  Configure the system clock source
  1090.   * @rmtoll CFGR         SW            LL_RCC_SetSysClkSource
  1091.   * @param  Source This parameter can be one of the following values:
  1092.   *         @arg @ref LL_RCC_SYS_CLKSOURCE_HSI
  1093.   *         @arg @ref LL_RCC_SYS_CLKSOURCE_HSE
  1094.   *         @arg @ref LL_RCC_SYS_CLKSOURCE_PLL
  1095.   *         @arg @ref LL_RCC_SYS_CLKSOURCE_HSI48 (*)
  1096.   *
  1097.   *         (*) value not defined in all devices
  1098.   * @retval None
  1099.   */
  1100. __STATIC_INLINE void LL_RCC_SetSysClkSource(uint32_t Source)
  1101. {
  1102.   MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, Source);
  1103. }
  1104.  
  1105. /**
  1106.   * @brief  Get the system clock source
  1107.   * @rmtoll CFGR         SWS           LL_RCC_GetSysClkSource
  1108.   * @retval Returned value can be one of the following values:
  1109.   *         @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSI
  1110.   *         @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSE
  1111.   *         @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_PLL
  1112.   *         @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSI48 (*)
  1113.   *
  1114.   *         (*) value not defined in all devices
  1115.   */
  1116. __STATIC_INLINE uint32_t LL_RCC_GetSysClkSource(void)
  1117. {
  1118.   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS));
  1119. }
  1120.  
  1121. /**
  1122.   * @brief  Set AHB prescaler
  1123.   * @rmtoll CFGR         HPRE          LL_RCC_SetAHBPrescaler
  1124.   * @param  Prescaler This parameter can be one of the following values:
  1125.   *         @arg @ref LL_RCC_SYSCLK_DIV_1
  1126.   *         @arg @ref LL_RCC_SYSCLK_DIV_2
  1127.   *         @arg @ref LL_RCC_SYSCLK_DIV_4
  1128.   *         @arg @ref LL_RCC_SYSCLK_DIV_8
  1129.   *         @arg @ref LL_RCC_SYSCLK_DIV_16
  1130.   *         @arg @ref LL_RCC_SYSCLK_DIV_64
  1131.   *         @arg @ref LL_RCC_SYSCLK_DIV_128
  1132.   *         @arg @ref LL_RCC_SYSCLK_DIV_256
  1133.   *         @arg @ref LL_RCC_SYSCLK_DIV_512
  1134.   * @retval None
  1135.   */
  1136. __STATIC_INLINE void LL_RCC_SetAHBPrescaler(uint32_t Prescaler)
  1137. {
  1138.   MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, Prescaler);
  1139. }
  1140.  
  1141. /**
  1142.   * @brief  Set APB1 prescaler
  1143.   * @rmtoll CFGR         PPRE         LL_RCC_SetAPB1Prescaler
  1144.   * @param  Prescaler This parameter can be one of the following values:
  1145.   *         @arg @ref LL_RCC_APB1_DIV_1
  1146.   *         @arg @ref LL_RCC_APB1_DIV_2
  1147.   *         @arg @ref LL_RCC_APB1_DIV_4
  1148.   *         @arg @ref LL_RCC_APB1_DIV_8
  1149.   *         @arg @ref LL_RCC_APB1_DIV_16
  1150.   * @retval None
  1151.   */
  1152. __STATIC_INLINE void LL_RCC_SetAPB1Prescaler(uint32_t Prescaler)
  1153. {
  1154.   MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE, Prescaler);
  1155. }
  1156.  
  1157. /**
  1158.   * @brief  Get AHB prescaler
  1159.   * @rmtoll CFGR         HPRE          LL_RCC_GetAHBPrescaler
  1160.   * @retval Returned value can be one of the following values:
  1161.   *         @arg @ref LL_RCC_SYSCLK_DIV_1
  1162.   *         @arg @ref LL_RCC_SYSCLK_DIV_2
  1163.   *         @arg @ref LL_RCC_SYSCLK_DIV_4
  1164.   *         @arg @ref LL_RCC_SYSCLK_DIV_8
  1165.   *         @arg @ref LL_RCC_SYSCLK_DIV_16
  1166.   *         @arg @ref LL_RCC_SYSCLK_DIV_64
  1167.   *         @arg @ref LL_RCC_SYSCLK_DIV_128
  1168.   *         @arg @ref LL_RCC_SYSCLK_DIV_256
  1169.   *         @arg @ref LL_RCC_SYSCLK_DIV_512
  1170.   */
  1171. __STATIC_INLINE uint32_t LL_RCC_GetAHBPrescaler(void)
  1172. {
  1173.   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_HPRE));
  1174. }
  1175.  
  1176. /**
  1177.   * @brief  Get APB1 prescaler
  1178.   * @rmtoll CFGR         PPRE         LL_RCC_GetAPB1Prescaler
  1179.   * @retval Returned value can be one of the following values:
  1180.   *         @arg @ref LL_RCC_APB1_DIV_1
  1181.   *         @arg @ref LL_RCC_APB1_DIV_2
  1182.   *         @arg @ref LL_RCC_APB1_DIV_4
  1183.   *         @arg @ref LL_RCC_APB1_DIV_8
  1184.   *         @arg @ref LL_RCC_APB1_DIV_16
  1185.   */
  1186. __STATIC_INLINE uint32_t LL_RCC_GetAPB1Prescaler(void)
  1187. {
  1188.   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE));
  1189. }
  1190.  
  1191. /**
  1192.   * @}
  1193.   */
  1194.  
  1195. /** @defgroup RCC_LL_EF_MCO MCO
  1196.   * @{
  1197.   */
  1198.  
  1199. /**
  1200.   * @brief  Configure MCOx
  1201.   * @rmtoll CFGR         MCO           LL_RCC_ConfigMCO\n
  1202.   *         CFGR         MCOPRE        LL_RCC_ConfigMCO\n
  1203.   *         CFGR         PLLNODIV      LL_RCC_ConfigMCO
  1204.   * @param  MCOxSource This parameter can be one of the following values:
  1205.   *         @arg @ref LL_RCC_MCO1SOURCE_NOCLOCK
  1206.   *         @arg @ref LL_RCC_MCO1SOURCE_HSI14
  1207.   *         @arg @ref LL_RCC_MCO1SOURCE_SYSCLK
  1208.   *         @arg @ref LL_RCC_MCO1SOURCE_HSI
  1209.   *         @arg @ref LL_RCC_MCO1SOURCE_HSE
  1210.   *         @arg @ref LL_RCC_MCO1SOURCE_LSI
  1211.   *         @arg @ref LL_RCC_MCO1SOURCE_LSE
  1212.   *         @arg @ref LL_RCC_MCO1SOURCE_HSI48 (*)
  1213.   *         @arg @ref LL_RCC_MCO1SOURCE_PLLCLK (*)
  1214.   *         @arg @ref LL_RCC_MCO1SOURCE_PLLCLK_DIV_2
  1215.   *
  1216.   *         (*) value not defined in all devices
  1217.   * @param  MCOxPrescaler This parameter can be one of the following values:
  1218.   *         @arg @ref LL_RCC_MCO1_DIV_1
  1219.   *         @arg @ref LL_RCC_MCO1_DIV_2 (*)
  1220.   *         @arg @ref LL_RCC_MCO1_DIV_4 (*)
  1221.   *         @arg @ref LL_RCC_MCO1_DIV_8 (*)
  1222.   *         @arg @ref LL_RCC_MCO1_DIV_16 (*)
  1223.   *         @arg @ref LL_RCC_MCO1_DIV_32 (*)
  1224.   *         @arg @ref LL_RCC_MCO1_DIV_64 (*)
  1225.   *         @arg @ref LL_RCC_MCO1_DIV_128 (*)
  1226.   *
  1227.   *         (*) value not defined in all devices
  1228.   * @retval None
  1229.   */
  1230. __STATIC_INLINE void LL_RCC_ConfigMCO(uint32_t MCOxSource, uint32_t MCOxPrescaler)
  1231. {
  1232. #if defined(RCC_CFGR_MCOPRE)
  1233. #if defined(RCC_CFGR_PLLNODIV)
  1234.   MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL | RCC_CFGR_MCOPRE | RCC_CFGR_PLLNODIV, MCOxSource | MCOxPrescaler);
  1235. #else
  1236.   MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL | RCC_CFGR_MCOPRE, MCOxSource | MCOxPrescaler);
  1237. #endif /* RCC_CFGR_PLLNODIV */
  1238. #else
  1239.   MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL, MCOxSource);
  1240. #endif /* RCC_CFGR_MCOPRE */
  1241. }
  1242.  
  1243. /**
  1244.   * @}
  1245.   */
  1246.  
  1247. /** @defgroup RCC_LL_EF_Peripheral_Clock_Source Peripheral Clock Source
  1248.   * @{
  1249.   */
  1250.  
  1251. /**
  1252.   * @brief  Configure USARTx clock source
  1253.   * @rmtoll CFGR3        USART1SW      LL_RCC_SetUSARTClockSource\n
  1254.   *         CFGR3        USART2SW      LL_RCC_SetUSARTClockSource\n
  1255.   *         CFGR3        USART3SW      LL_RCC_SetUSARTClockSource
  1256.   * @param  USARTxSource This parameter can be one of the following values:
  1257.   *         @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK1
  1258.   *         @arg @ref LL_RCC_USART1_CLKSOURCE_SYSCLK
  1259.   *         @arg @ref LL_RCC_USART1_CLKSOURCE_LSE
  1260.   *         @arg @ref LL_RCC_USART1_CLKSOURCE_HSI
  1261.   *         @arg @ref LL_RCC_USART2_CLKSOURCE_PCLK1 (*)
  1262.   *         @arg @ref LL_RCC_USART2_CLKSOURCE_SYSCLK (*)
  1263.   *         @arg @ref LL_RCC_USART2_CLKSOURCE_LSE (*)
  1264.   *         @arg @ref LL_RCC_USART2_CLKSOURCE_HSI (*)
  1265.   *         @arg @ref LL_RCC_USART3_CLKSOURCE_PCLK1 (*)
  1266.   *         @arg @ref LL_RCC_USART3_CLKSOURCE_SYSCLK (*)
  1267.   *         @arg @ref LL_RCC_USART3_CLKSOURCE_LSE (*)
  1268.   *         @arg @ref LL_RCC_USART3_CLKSOURCE_HSI (*)
  1269.   *
  1270.   *         (*) value not defined in all devices.
  1271.   * @retval None
  1272.   */
  1273. __STATIC_INLINE void LL_RCC_SetUSARTClockSource(uint32_t USARTxSource)
  1274. {
  1275.   MODIFY_REG(RCC->CFGR3, (RCC_CFGR3_USART1SW << ((USARTxSource  & 0xFF000000U) >> 24U)), (USARTxSource & 0x00FFFFFFU));
  1276. }
  1277.  
  1278. /**
  1279.   * @brief  Configure I2Cx clock source
  1280.   * @rmtoll CFGR3        I2C1SW        LL_RCC_SetI2CClockSource
  1281.   * @param  I2CxSource This parameter can be one of the following values:
  1282.   *         @arg @ref LL_RCC_I2C1_CLKSOURCE_HSI
  1283.   *         @arg @ref LL_RCC_I2C1_CLKSOURCE_SYSCLK
  1284.   * @retval None
  1285.   */
  1286. __STATIC_INLINE void LL_RCC_SetI2CClockSource(uint32_t I2CxSource)
  1287. {
  1288.   MODIFY_REG(RCC->CFGR3, RCC_CFGR3_I2C1SW, I2CxSource);
  1289. }
  1290.  
  1291. #if defined(CEC)
  1292. /**
  1293.   * @brief  Configure CEC clock source
  1294.   * @rmtoll CFGR3        CECSW         LL_RCC_SetCECClockSource
  1295.   * @param  CECxSource This parameter can be one of the following values:
  1296.   *         @arg @ref LL_RCC_CEC_CLKSOURCE_HSI_DIV244
  1297.   *         @arg @ref LL_RCC_CEC_CLKSOURCE_LSE
  1298.   * @retval None
  1299.   */
  1300. __STATIC_INLINE void LL_RCC_SetCECClockSource(uint32_t CECxSource)
  1301. {
  1302.   MODIFY_REG(RCC->CFGR3, RCC_CFGR3_CECSW, CECxSource);
  1303. }
  1304. #endif /* CEC */
  1305.  
  1306. #if defined(USB)
  1307. /**
  1308.   * @brief  Configure USB clock source
  1309.   * @rmtoll CFGR3        USBSW         LL_RCC_SetUSBClockSource
  1310.   * @param  USBxSource This parameter can be one of the following values:
  1311.   *         @arg @ref LL_RCC_USB_CLKSOURCE_HSI48 (*)
  1312.   *         @arg @ref LL_RCC_USB_CLKSOURCE_NONE (*)
  1313.   *         @arg @ref LL_RCC_USB_CLKSOURCE_PLL
  1314.   *
  1315.   *         (*) value not defined in all devices.
  1316.   * @retval None
  1317.   */
  1318. __STATIC_INLINE void LL_RCC_SetUSBClockSource(uint32_t USBxSource)
  1319. {
  1320.   MODIFY_REG(RCC->CFGR3, RCC_CFGR3_USBSW, USBxSource);
  1321. }
  1322. #endif /* USB */
  1323.  
  1324. /**
  1325.   * @brief  Get USARTx clock source
  1326.   * @rmtoll CFGR3        USART1SW      LL_RCC_GetUSARTClockSource\n
  1327.   *         CFGR3        USART2SW      LL_RCC_GetUSARTClockSource\n
  1328.   *         CFGR3        USART3SW      LL_RCC_GetUSARTClockSource
  1329.   * @param  USARTx This parameter can be one of the following values:
  1330.   *         @arg @ref LL_RCC_USART1_CLKSOURCE
  1331.   *         @arg @ref LL_RCC_USART2_CLKSOURCE (*)
  1332.   *         @arg @ref LL_RCC_USART3_CLKSOURCE (*)
  1333.   *
  1334.   *         (*) value not defined in all devices.
  1335.   * @retval Returned value can be one of the following values:
  1336.   *         @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK1
  1337.   *         @arg @ref LL_RCC_USART1_CLKSOURCE_SYSCLK
  1338.   *         @arg @ref LL_RCC_USART1_CLKSOURCE_LSE
  1339.   *         @arg @ref LL_RCC_USART1_CLKSOURCE_HSI
  1340.   *         @arg @ref LL_RCC_USART2_CLKSOURCE_PCLK1 (*)
  1341.   *         @arg @ref LL_RCC_USART2_CLKSOURCE_SYSCLK (*)
  1342.   *         @arg @ref LL_RCC_USART2_CLKSOURCE_LSE (*)
  1343.   *         @arg @ref LL_RCC_USART2_CLKSOURCE_HSI (*)
  1344.   *         @arg @ref LL_RCC_USART3_CLKSOURCE_PCLK1 (*)
  1345.   *         @arg @ref LL_RCC_USART3_CLKSOURCE_SYSCLK (*)
  1346.   *         @arg @ref LL_RCC_USART3_CLKSOURCE_LSE (*)
  1347.   *         @arg @ref LL_RCC_USART3_CLKSOURCE_HSI (*)
  1348.   *
  1349.   *         (*) value not defined in all devices.
  1350.   */
  1351. __STATIC_INLINE uint32_t LL_RCC_GetUSARTClockSource(uint32_t USARTx)
  1352. {
  1353.   return (uint32_t)(READ_BIT(RCC->CFGR3, (RCC_CFGR3_USART1SW << USARTx)) | (USARTx << 24U));
  1354. }
  1355.  
  1356. /**
  1357.   * @brief  Get I2Cx clock source
  1358.   * @rmtoll CFGR3        I2C1SW        LL_RCC_GetI2CClockSource
  1359.   * @param  I2Cx This parameter can be one of the following values:
  1360.   *         @arg @ref LL_RCC_I2C1_CLKSOURCE
  1361.   * @retval Returned value can be one of the following values:
  1362.   *         @arg @ref LL_RCC_I2C1_CLKSOURCE_HSI
  1363.   *         @arg @ref LL_RCC_I2C1_CLKSOURCE_SYSCLK
  1364.   */
  1365. __STATIC_INLINE uint32_t LL_RCC_GetI2CClockSource(uint32_t I2Cx)
  1366. {
  1367.   return (uint32_t)(READ_BIT(RCC->CFGR3, I2Cx));
  1368. }
  1369.  
  1370. #if defined(CEC)
  1371. /**
  1372.   * @brief  Get CEC clock source
  1373.   * @rmtoll CFGR3        CECSW         LL_RCC_GetCECClockSource
  1374.   * @param  CECx This parameter can be one of the following values:
  1375.   *         @arg @ref LL_RCC_CEC_CLKSOURCE
  1376.   * @retval Returned value can be one of the following values:
  1377.   *         @arg @ref LL_RCC_CEC_CLKSOURCE_HSI_DIV244
  1378.   *         @arg @ref LL_RCC_CEC_CLKSOURCE_LSE
  1379.   */
  1380. __STATIC_INLINE uint32_t LL_RCC_GetCECClockSource(uint32_t CECx)
  1381. {
  1382.   return (uint32_t)(READ_BIT(RCC->CFGR3, CECx));
  1383. }
  1384. #endif /* CEC */
  1385.  
  1386. #if defined(USB)
  1387. /**
  1388.   * @brief  Get USBx clock source
  1389.   * @rmtoll CFGR3        USBSW         LL_RCC_GetUSBClockSource
  1390.   * @param  USBx This parameter can be one of the following values:
  1391.   *         @arg @ref LL_RCC_USB_CLKSOURCE
  1392.   * @retval Returned value can be one of the following values:
  1393.   *         @arg @ref LL_RCC_USB_CLKSOURCE_HSI48 (*)
  1394.   *         @arg @ref LL_RCC_USB_CLKSOURCE_NONE (*)
  1395.   *         @arg @ref LL_RCC_USB_CLKSOURCE_PLL
  1396.   *
  1397.   *         (*) value not defined in all devices.
  1398.   */
  1399. __STATIC_INLINE uint32_t LL_RCC_GetUSBClockSource(uint32_t USBx)
  1400. {
  1401.   return (uint32_t)(READ_BIT(RCC->CFGR3, USBx));
  1402. }
  1403. #endif /* USB */
  1404.  
  1405. /**
  1406.   * @}
  1407.   */
  1408.  
  1409. /** @defgroup RCC_LL_EF_RTC RTC
  1410.   * @{
  1411.   */
  1412.  
  1413. /**
  1414.   * @brief  Set RTC Clock Source
  1415.   * @note Once the RTC clock source has been selected, it cannot be changed any more unless
  1416.   *       the Backup domain is reset. The BDRST bit can be used to reset them.
  1417.   * @rmtoll BDCR         RTCSEL        LL_RCC_SetRTCClockSource
  1418.   * @param  Source This parameter can be one of the following values:
  1419.   *         @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
  1420.   *         @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
  1421.   *         @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
  1422.   *         @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV32
  1423.   * @retval None
  1424.   */
  1425. __STATIC_INLINE void LL_RCC_SetRTCClockSource(uint32_t Source)
  1426. {
  1427.   MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, Source);
  1428. }
  1429.  
  1430. /**
  1431.   * @brief  Get RTC Clock Source
  1432.   * @rmtoll BDCR         RTCSEL        LL_RCC_GetRTCClockSource
  1433.   * @retval Returned value can be one of the following values:
  1434.   *         @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
  1435.   *         @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
  1436.   *         @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
  1437.   *         @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV32
  1438.   */
  1439. __STATIC_INLINE uint32_t LL_RCC_GetRTCClockSource(void)
  1440. {
  1441.   return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL));
  1442. }
  1443.  
  1444. /**
  1445.   * @brief  Enable RTC
  1446.   * @rmtoll BDCR         RTCEN         LL_RCC_EnableRTC
  1447.   * @retval None
  1448.   */
  1449. __STATIC_INLINE void LL_RCC_EnableRTC(void)
  1450. {
  1451.   SET_BIT(RCC->BDCR, RCC_BDCR_RTCEN);
  1452. }
  1453.  
  1454. /**
  1455.   * @brief  Disable RTC
  1456.   * @rmtoll BDCR         RTCEN         LL_RCC_DisableRTC
  1457.   * @retval None
  1458.   */
  1459. __STATIC_INLINE void LL_RCC_DisableRTC(void)
  1460. {
  1461.   CLEAR_BIT(RCC->BDCR, RCC_BDCR_RTCEN);
  1462. }
  1463.  
  1464. /**
  1465.   * @brief  Check if RTC has been enabled or not
  1466.   * @rmtoll BDCR         RTCEN         LL_RCC_IsEnabledRTC
  1467.   * @retval State of bit (1 or 0).
  1468.   */
  1469. __STATIC_INLINE uint32_t LL_RCC_IsEnabledRTC(void)
  1470. {
  1471.   return (READ_BIT(RCC->BDCR, RCC_BDCR_RTCEN) == (RCC_BDCR_RTCEN));
  1472. }
  1473.  
  1474. /**
  1475.   * @brief  Force the Backup domain reset
  1476.   * @rmtoll BDCR         BDRST         LL_RCC_ForceBackupDomainReset
  1477.   * @retval None
  1478.   */
  1479. __STATIC_INLINE void LL_RCC_ForceBackupDomainReset(void)
  1480. {
  1481.   SET_BIT(RCC->BDCR, RCC_BDCR_BDRST);
  1482. }
  1483.  
  1484. /**
  1485.   * @brief  Release the Backup domain reset
  1486.   * @rmtoll BDCR         BDRST         LL_RCC_ReleaseBackupDomainReset
  1487.   * @retval None
  1488.   */
  1489. __STATIC_INLINE void LL_RCC_ReleaseBackupDomainReset(void)
  1490. {
  1491.   CLEAR_BIT(RCC->BDCR, RCC_BDCR_BDRST);
  1492. }
  1493.  
  1494. /**
  1495.   * @}
  1496.   */
  1497.  
  1498. /** @defgroup RCC_LL_EF_PLL PLL
  1499.   * @{
  1500.   */
  1501.  
  1502. /**
  1503.   * @brief  Enable PLL
  1504.   * @rmtoll CR           PLLON         LL_RCC_PLL_Enable
  1505.   * @retval None
  1506.   */
  1507. __STATIC_INLINE void LL_RCC_PLL_Enable(void)
  1508. {
  1509.   SET_BIT(RCC->CR, RCC_CR_PLLON);
  1510. }
  1511.  
  1512. /**
  1513.   * @brief  Disable PLL
  1514.   * @note Cannot be disabled if the PLL clock is used as the system clock
  1515.   * @rmtoll CR           PLLON         LL_RCC_PLL_Disable
  1516.   * @retval None
  1517.   */
  1518. __STATIC_INLINE void LL_RCC_PLL_Disable(void)
  1519. {
  1520.   CLEAR_BIT(RCC->CR, RCC_CR_PLLON);
  1521. }
  1522.  
  1523. /**
  1524.   * @brief  Check if PLL Ready
  1525.   * @rmtoll CR           PLLRDY        LL_RCC_PLL_IsReady
  1526.   * @retval State of bit (1 or 0).
  1527.   */
  1528. __STATIC_INLINE uint32_t LL_RCC_PLL_IsReady(void)
  1529. {
  1530.   return (READ_BIT(RCC->CR, RCC_CR_PLLRDY) == (RCC_CR_PLLRDY));
  1531. }
  1532.  
  1533. #if defined(RCC_PLLSRC_PREDIV1_SUPPORT)
  1534. /**
  1535.   * @brief  Configure PLL used for SYSCLK Domain
  1536.   * @rmtoll CFGR         PLLSRC        LL_RCC_PLL_ConfigDomain_SYS\n
  1537.   *         CFGR         PLLMUL        LL_RCC_PLL_ConfigDomain_SYS\n
  1538.   *         CFGR2        PREDIV        LL_RCC_PLL_ConfigDomain_SYS
  1539.   * @param  Source This parameter can be one of the following values:
  1540.   *         @arg @ref LL_RCC_PLLSOURCE_HSI
  1541.   *         @arg @ref LL_RCC_PLLSOURCE_HSE
  1542.   *         @arg @ref LL_RCC_PLLSOURCE_HSI48 (*)
  1543.   *
  1544.   *         (*) value not defined in all devices
  1545.   * @param  PLLMul This parameter can be one of the following values:
  1546.   *         @arg @ref LL_RCC_PLL_MUL_2
  1547.   *         @arg @ref LL_RCC_PLL_MUL_3
  1548.   *         @arg @ref LL_RCC_PLL_MUL_4
  1549.   *         @arg @ref LL_RCC_PLL_MUL_5
  1550.   *         @arg @ref LL_RCC_PLL_MUL_6
  1551.   *         @arg @ref LL_RCC_PLL_MUL_7
  1552.   *         @arg @ref LL_RCC_PLL_MUL_8
  1553.   *         @arg @ref LL_RCC_PLL_MUL_9
  1554.   *         @arg @ref LL_RCC_PLL_MUL_10
  1555.   *         @arg @ref LL_RCC_PLL_MUL_11
  1556.   *         @arg @ref LL_RCC_PLL_MUL_12
  1557.   *         @arg @ref LL_RCC_PLL_MUL_13
  1558.   *         @arg @ref LL_RCC_PLL_MUL_14
  1559.   *         @arg @ref LL_RCC_PLL_MUL_15
  1560.   *         @arg @ref LL_RCC_PLL_MUL_16
  1561.   * @param  PLLDiv This parameter can be one of the following values:
  1562.   *         @arg @ref LL_RCC_PREDIV_DIV_1
  1563.   *         @arg @ref LL_RCC_PREDIV_DIV_2
  1564.   *         @arg @ref LL_RCC_PREDIV_DIV_3
  1565.   *         @arg @ref LL_RCC_PREDIV_DIV_4
  1566.   *         @arg @ref LL_RCC_PREDIV_DIV_5
  1567.   *         @arg @ref LL_RCC_PREDIV_DIV_6
  1568.   *         @arg @ref LL_RCC_PREDIV_DIV_7
  1569.   *         @arg @ref LL_RCC_PREDIV_DIV_8
  1570.   *         @arg @ref LL_RCC_PREDIV_DIV_9
  1571.   *         @arg @ref LL_RCC_PREDIV_DIV_10
  1572.   *         @arg @ref LL_RCC_PREDIV_DIV_11
  1573.   *         @arg @ref LL_RCC_PREDIV_DIV_12
  1574.   *         @arg @ref LL_RCC_PREDIV_DIV_13
  1575.   *         @arg @ref LL_RCC_PREDIV_DIV_14
  1576.   *         @arg @ref LL_RCC_PREDIV_DIV_15
  1577.   *         @arg @ref LL_RCC_PREDIV_DIV_16
  1578.   * @retval None
  1579.   */
  1580. __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLMul, uint32_t PLLDiv)
  1581. {
  1582.   MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL, Source | PLLMul);
  1583.   MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV, PLLDiv);
  1584. }
  1585.  
  1586. #else
  1587.  
  1588. /**
  1589.   * @brief  Configure PLL used for SYSCLK Domain
  1590.   * @rmtoll CFGR         PLLSRC        LL_RCC_PLL_ConfigDomain_SYS\n
  1591.   *         CFGR         PLLMUL        LL_RCC_PLL_ConfigDomain_SYS\n
  1592.   *         CFGR2        PREDIV        LL_RCC_PLL_ConfigDomain_SYS
  1593.   * @param  Source This parameter can be one of the following values:
  1594.   *         @arg @ref LL_RCC_PLLSOURCE_HSI_DIV_2
  1595.   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_1
  1596.   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_2
  1597.   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_3
  1598.   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_4
  1599.   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_5
  1600.   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_6
  1601.   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_7
  1602.   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_8
  1603.   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_9
  1604.   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_10
  1605.   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_11
  1606.   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_12
  1607.   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_13
  1608.   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_14
  1609.   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_15
  1610.   *         @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_16
  1611.   * @param  PLLMul This parameter can be one of the following values:
  1612.   *         @arg @ref LL_RCC_PLL_MUL_2
  1613.   *         @arg @ref LL_RCC_PLL_MUL_3
  1614.   *         @arg @ref LL_RCC_PLL_MUL_4
  1615.   *         @arg @ref LL_RCC_PLL_MUL_5
  1616.   *         @arg @ref LL_RCC_PLL_MUL_6
  1617.   *         @arg @ref LL_RCC_PLL_MUL_7
  1618.   *         @arg @ref LL_RCC_PLL_MUL_8
  1619.   *         @arg @ref LL_RCC_PLL_MUL_9
  1620.   *         @arg @ref LL_RCC_PLL_MUL_10
  1621.   *         @arg @ref LL_RCC_PLL_MUL_11
  1622.   *         @arg @ref LL_RCC_PLL_MUL_12
  1623.   *         @arg @ref LL_RCC_PLL_MUL_13
  1624.   *         @arg @ref LL_RCC_PLL_MUL_14
  1625.   *         @arg @ref LL_RCC_PLL_MUL_15
  1626.   *         @arg @ref LL_RCC_PLL_MUL_16
  1627.   * @retval None
  1628.   */
  1629. __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLMul)
  1630. {
  1631.   MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL, (Source & RCC_CFGR_PLLSRC) | PLLMul);
  1632.   MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV, (Source & RCC_CFGR2_PREDIV));
  1633. }
  1634. #endif /* RCC_PLLSRC_PREDIV1_SUPPORT */
  1635.  
  1636. /**
  1637.   * @brief  Configure PLL clock source
  1638.   * @rmtoll CFGR      PLLSRC        LL_RCC_PLL_SetMainSource
  1639.   * @param PLLSource This parameter can be one of the following values:
  1640.   *         @arg @ref LL_RCC_PLLSOURCE_NONE
  1641.   *         @arg @ref LL_RCC_PLLSOURCE_HSI (*)
  1642.   *         @arg @ref LL_RCC_PLLSOURCE_HSI_DIV_2 (*)
  1643.   *         @arg @ref LL_RCC_PLLSOURCE_HSE
  1644.   *         @arg @ref LL_RCC_PLLSOURCE_HSI48 (*)
  1645.   *
  1646.   *         (*) value not defined in all devices
  1647.   * @retval None
  1648.   */
  1649. __STATIC_INLINE void LL_RCC_PLL_SetMainSource(uint32_t PLLSource)
  1650. {
  1651.   MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLSRC, PLLSource);
  1652. }
  1653.  
  1654. /**
  1655.   * @brief  Get the oscillator used as PLL clock source.
  1656.   * @rmtoll CFGR         PLLSRC        LL_RCC_PLL_GetMainSource
  1657.   * @retval Returned value can be one of the following values:
  1658.   *         @arg @ref LL_RCC_PLLSOURCE_NONE
  1659.   *         @arg @ref LL_RCC_PLLSOURCE_HSI (*)
  1660.   *         @arg @ref LL_RCC_PLLSOURCE_HSI_DIV_2 (*)
  1661.   *         @arg @ref LL_RCC_PLLSOURCE_HSE
  1662.   *         @arg @ref LL_RCC_PLLSOURCE_HSI48 (*)
  1663.   *
  1664.   *         (*) value not defined in all devices
  1665.   */
  1666. __STATIC_INLINE uint32_t LL_RCC_PLL_GetMainSource(void)
  1667. {
  1668.   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC));
  1669. }
  1670.  
  1671. /**
  1672.   * @brief  Get PLL multiplication Factor
  1673.   * @rmtoll CFGR         PLLMUL        LL_RCC_PLL_GetMultiplicator
  1674.   * @retval Returned value can be one of the following values:
  1675.   *         @arg @ref LL_RCC_PLL_MUL_2
  1676.   *         @arg @ref LL_RCC_PLL_MUL_3
  1677.   *         @arg @ref LL_RCC_PLL_MUL_4
  1678.   *         @arg @ref LL_RCC_PLL_MUL_5
  1679.   *         @arg @ref LL_RCC_PLL_MUL_6
  1680.   *         @arg @ref LL_RCC_PLL_MUL_7
  1681.   *         @arg @ref LL_RCC_PLL_MUL_8
  1682.   *         @arg @ref LL_RCC_PLL_MUL_9
  1683.   *         @arg @ref LL_RCC_PLL_MUL_10
  1684.   *         @arg @ref LL_RCC_PLL_MUL_11
  1685.   *         @arg @ref LL_RCC_PLL_MUL_12
  1686.   *         @arg @ref LL_RCC_PLL_MUL_13
  1687.   *         @arg @ref LL_RCC_PLL_MUL_14
  1688.   *         @arg @ref LL_RCC_PLL_MUL_15
  1689.   *         @arg @ref LL_RCC_PLL_MUL_16
  1690.   */
  1691. __STATIC_INLINE uint32_t LL_RCC_PLL_GetMultiplicator(void)
  1692. {
  1693.   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLMUL));
  1694. }
  1695.  
  1696. /**
  1697.   * @brief  Get PREDIV division factor for the main PLL
  1698.   * @note They can be written only when the PLL is disabled
  1699.   * @rmtoll CFGR2        PREDIV        LL_RCC_PLL_GetPrediv
  1700.   * @retval Returned value can be one of the following values:
  1701.   *         @arg @ref LL_RCC_PREDIV_DIV_1
  1702.   *         @arg @ref LL_RCC_PREDIV_DIV_2
  1703.   *         @arg @ref LL_RCC_PREDIV_DIV_3
  1704.   *         @arg @ref LL_RCC_PREDIV_DIV_4
  1705.   *         @arg @ref LL_RCC_PREDIV_DIV_5
  1706.   *         @arg @ref LL_RCC_PREDIV_DIV_6
  1707.   *         @arg @ref LL_RCC_PREDIV_DIV_7
  1708.   *         @arg @ref LL_RCC_PREDIV_DIV_8
  1709.   *         @arg @ref LL_RCC_PREDIV_DIV_9
  1710.   *         @arg @ref LL_RCC_PREDIV_DIV_10
  1711.   *         @arg @ref LL_RCC_PREDIV_DIV_11
  1712.   *         @arg @ref LL_RCC_PREDIV_DIV_12
  1713.   *         @arg @ref LL_RCC_PREDIV_DIV_13
  1714.   *         @arg @ref LL_RCC_PREDIV_DIV_14
  1715.   *         @arg @ref LL_RCC_PREDIV_DIV_15
  1716.   *         @arg @ref LL_RCC_PREDIV_DIV_16
  1717.   */
  1718. __STATIC_INLINE uint32_t LL_RCC_PLL_GetPrediv(void)
  1719. {
  1720.   return (uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV));
  1721. }
  1722.  
  1723. /**
  1724.   * @}
  1725.   */
  1726.  
  1727. /** @defgroup RCC_LL_EF_FLAG_Management FLAG Management
  1728.   * @{
  1729.   */
  1730.  
  1731. /**
  1732.   * @brief  Clear LSI ready interrupt flag
  1733.   * @rmtoll CIR         LSIRDYC       LL_RCC_ClearFlag_LSIRDY
  1734.   * @retval None
  1735.   */
  1736. __STATIC_INLINE void LL_RCC_ClearFlag_LSIRDY(void)
  1737. {
  1738.   SET_BIT(RCC->CIR, RCC_CIR_LSIRDYC);
  1739. }
  1740.  
  1741. /**
  1742.   * @brief  Clear LSE ready interrupt flag
  1743.   * @rmtoll CIR         LSERDYC       LL_RCC_ClearFlag_LSERDY
  1744.   * @retval None
  1745.   */
  1746. __STATIC_INLINE void LL_RCC_ClearFlag_LSERDY(void)
  1747. {
  1748.   SET_BIT(RCC->CIR, RCC_CIR_LSERDYC);
  1749. }
  1750.  
  1751. /**
  1752.   * @brief  Clear HSI ready interrupt flag
  1753.   * @rmtoll CIR         HSIRDYC       LL_RCC_ClearFlag_HSIRDY
  1754.   * @retval None
  1755.   */
  1756. __STATIC_INLINE void LL_RCC_ClearFlag_HSIRDY(void)
  1757. {
  1758.   SET_BIT(RCC->CIR, RCC_CIR_HSIRDYC);
  1759. }
  1760.  
  1761. /**
  1762.   * @brief  Clear HSE ready interrupt flag
  1763.   * @rmtoll CIR         HSERDYC       LL_RCC_ClearFlag_HSERDY
  1764.   * @retval None
  1765.   */
  1766. __STATIC_INLINE void LL_RCC_ClearFlag_HSERDY(void)
  1767. {
  1768.   SET_BIT(RCC->CIR, RCC_CIR_HSERDYC);
  1769. }
  1770.  
  1771. /**
  1772.   * @brief  Clear PLL ready interrupt flag
  1773.   * @rmtoll CIR         PLLRDYC       LL_RCC_ClearFlag_PLLRDY
  1774.   * @retval None
  1775.   */
  1776. __STATIC_INLINE void LL_RCC_ClearFlag_PLLRDY(void)
  1777. {
  1778.   SET_BIT(RCC->CIR, RCC_CIR_PLLRDYC);
  1779. }
  1780.  
  1781. /**
  1782.   * @brief  Clear HSI14 ready interrupt flag
  1783.   * @rmtoll CIR          HSI14RDYC     LL_RCC_ClearFlag_HSI14RDY
  1784.   * @retval None
  1785.   */
  1786. __STATIC_INLINE void LL_RCC_ClearFlag_HSI14RDY(void)
  1787. {
  1788.   SET_BIT(RCC->CIR, RCC_CIR_HSI14RDYC);
  1789. }
  1790.  
  1791. #if defined(RCC_HSI48_SUPPORT)
  1792. /**
  1793.   * @brief  Clear HSI48 ready interrupt flag
  1794.   * @rmtoll CIR          HSI48RDYC     LL_RCC_ClearFlag_HSI48RDY
  1795.   * @retval None
  1796.   */
  1797. __STATIC_INLINE void LL_RCC_ClearFlag_HSI48RDY(void)
  1798. {
  1799.   SET_BIT(RCC->CIR, RCC_CIR_HSI48RDYC);
  1800. }
  1801. #endif /* RCC_HSI48_SUPPORT */
  1802.  
  1803. /**
  1804.   * @brief  Clear Clock security system interrupt flag
  1805.   * @rmtoll CIR         CSSC          LL_RCC_ClearFlag_HSECSS
  1806.   * @retval None
  1807.   */
  1808. __STATIC_INLINE void LL_RCC_ClearFlag_HSECSS(void)
  1809. {
  1810.   SET_BIT(RCC->CIR, RCC_CIR_CSSC);
  1811. }
  1812.  
  1813. /**
  1814.   * @brief  Check if LSI ready interrupt occurred or not
  1815.   * @rmtoll CIR         LSIRDYF       LL_RCC_IsActiveFlag_LSIRDY
  1816.   * @retval State of bit (1 or 0).
  1817.   */
  1818. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSIRDY(void)
  1819. {
  1820.   return (READ_BIT(RCC->CIR, RCC_CIR_LSIRDYF) == (RCC_CIR_LSIRDYF));
  1821. }
  1822.  
  1823. /**
  1824.   * @brief  Check if LSE ready interrupt occurred or not
  1825.   * @rmtoll CIR         LSERDYF       LL_RCC_IsActiveFlag_LSERDY
  1826.   * @retval State of bit (1 or 0).
  1827.   */
  1828. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSERDY(void)
  1829. {
  1830.   return (READ_BIT(RCC->CIR, RCC_CIR_LSERDYF) == (RCC_CIR_LSERDYF));
  1831. }
  1832.  
  1833. /**
  1834.   * @brief  Check if HSI ready interrupt occurred or not
  1835.   * @rmtoll CIR         HSIRDYF       LL_RCC_IsActiveFlag_HSIRDY
  1836.   * @retval State of bit (1 or 0).
  1837.   */
  1838. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSIRDY(void)
  1839. {
  1840.   return (READ_BIT(RCC->CIR, RCC_CIR_HSIRDYF) == (RCC_CIR_HSIRDYF));
  1841. }
  1842.  
  1843. /**
  1844.   * @brief  Check if HSE ready interrupt occurred or not
  1845.   * @rmtoll CIR         HSERDYF       LL_RCC_IsActiveFlag_HSERDY
  1846.   * @retval State of bit (1 or 0).
  1847.   */
  1848. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSERDY(void)
  1849. {
  1850.   return (READ_BIT(RCC->CIR, RCC_CIR_HSERDYF) == (RCC_CIR_HSERDYF));
  1851. }
  1852.  
  1853. /**
  1854.   * @brief  Check if PLL ready interrupt occurred or not
  1855.   * @rmtoll CIR         PLLRDYF       LL_RCC_IsActiveFlag_PLLRDY
  1856.   * @retval State of bit (1 or 0).
  1857.   */
  1858. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLRDY(void)
  1859. {
  1860.   return (READ_BIT(RCC->CIR, RCC_CIR_PLLRDYF) == (RCC_CIR_PLLRDYF));
  1861. }
  1862.  
  1863. /**
  1864.   * @brief  Check if HSI14 ready interrupt occurred or not
  1865.   * @rmtoll CIR          HSI14RDYF     LL_RCC_IsActiveFlag_HSI14RDY
  1866.   * @retval State of bit (1 or 0).
  1867.   */
  1868. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSI14RDY(void)
  1869. {
  1870.   return (READ_BIT(RCC->CIR, RCC_CIR_HSI14RDYF) == (RCC_CIR_HSI14RDYF));
  1871. }
  1872.  
  1873. #if defined(RCC_HSI48_SUPPORT)
  1874. /**
  1875.   * @brief  Check if HSI48 ready interrupt occurred or not
  1876.   * @rmtoll CIR          HSI48RDYF     LL_RCC_IsActiveFlag_HSI48RDY
  1877.   * @retval State of bit (1 or 0).
  1878.   */
  1879. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSI48RDY(void)
  1880. {
  1881.   return (READ_BIT(RCC->CIR, RCC_CIR_HSI48RDYF) == (RCC_CIR_HSI48RDYF));
  1882. }
  1883. #endif /* RCC_HSI48_SUPPORT */
  1884.  
  1885. /**
  1886.   * @brief  Check if Clock security system interrupt occurred or not
  1887.   * @rmtoll CIR         CSSF          LL_RCC_IsActiveFlag_HSECSS
  1888.   * @retval State of bit (1 or 0).
  1889.   */
  1890. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSECSS(void)
  1891. {
  1892.   return (READ_BIT(RCC->CIR, RCC_CIR_CSSF) == (RCC_CIR_CSSF));
  1893. }
  1894.  
  1895. /**
  1896.   * @brief  Check if RCC flag Independent Watchdog reset is set or not.
  1897.   * @rmtoll CSR          IWDGRSTF      LL_RCC_IsActiveFlag_IWDGRST
  1898.   * @retval State of bit (1 or 0).
  1899.   */
  1900. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_IWDGRST(void)
  1901. {
  1902.   return (READ_BIT(RCC->CSR, RCC_CSR_IWDGRSTF) == (RCC_CSR_IWDGRSTF));
  1903. }
  1904.  
  1905. /**
  1906.   * @brief  Check if RCC flag Low Power reset is set or not.
  1907.   * @rmtoll CSR          LPWRRSTF      LL_RCC_IsActiveFlag_LPWRRST
  1908.   * @retval State of bit (1 or 0).
  1909.   */
  1910. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LPWRRST(void)
  1911. {
  1912.   return (READ_BIT(RCC->CSR, RCC_CSR_LPWRRSTF) == (RCC_CSR_LPWRRSTF));
  1913. }
  1914.  
  1915. /**
  1916.   * @brief  Check if RCC flag is set or not.
  1917.   * @rmtoll CSR          OBLRSTF       LL_RCC_IsActiveFlag_OBLRST
  1918.   * @retval State of bit (1 or 0).
  1919.   */
  1920. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_OBLRST(void)
  1921. {
  1922.   return (READ_BIT(RCC->CSR, RCC_CSR_OBLRSTF) == (RCC_CSR_OBLRSTF));
  1923. }
  1924.  
  1925. /**
  1926.   * @brief  Check if RCC flag Pin reset is set or not.
  1927.   * @rmtoll CSR          PINRSTF       LL_RCC_IsActiveFlag_PINRST
  1928.   * @retval State of bit (1 or 0).
  1929.   */
  1930. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PINRST(void)
  1931. {
  1932.   return (READ_BIT(RCC->CSR, RCC_CSR_PINRSTF) == (RCC_CSR_PINRSTF));
  1933. }
  1934.  
  1935. /**
  1936.   * @brief  Check if RCC flag POR/PDR reset is set or not.
  1937.   * @rmtoll CSR          PORRSTF       LL_RCC_IsActiveFlag_PORRST
  1938.   * @retval State of bit (1 or 0).
  1939.   */
  1940. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PORRST(void)
  1941. {
  1942.   return (READ_BIT(RCC->CSR, RCC_CSR_PORRSTF) == (RCC_CSR_PORRSTF));
  1943. }
  1944.  
  1945. /**
  1946.   * @brief  Check if RCC flag Software reset is set or not.
  1947.   * @rmtoll CSR          SFTRSTF       LL_RCC_IsActiveFlag_SFTRST
  1948.   * @retval State of bit (1 or 0).
  1949.   */
  1950. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_SFTRST(void)
  1951. {
  1952.   return (READ_BIT(RCC->CSR, RCC_CSR_SFTRSTF) == (RCC_CSR_SFTRSTF));
  1953. }
  1954.  
  1955. /**
  1956.   * @brief  Check if RCC flag Window Watchdog reset is set or not.
  1957.   * @rmtoll CSR          WWDGRSTF      LL_RCC_IsActiveFlag_WWDGRST
  1958.   * @retval State of bit (1 or 0).
  1959.   */
  1960. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_WWDGRST(void)
  1961. {
  1962.   return (READ_BIT(RCC->CSR, RCC_CSR_WWDGRSTF) == (RCC_CSR_WWDGRSTF));
  1963. }
  1964.  
  1965. #if defined(RCC_CSR_V18PWRRSTF)
  1966. /**
  1967.   * @brief  Check if RCC Reset flag of the 1.8 V domain is set or not.
  1968.   * @rmtoll CSR          V18PWRRSTF    LL_RCC_IsActiveFlag_V18PWRRST
  1969.   * @retval State of bit (1 or 0).
  1970.   */
  1971. __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_V18PWRRST(void)
  1972. {
  1973.   return (READ_BIT(RCC->CSR, RCC_CSR_V18PWRRSTF) == (RCC_CSR_V18PWRRSTF));
  1974. }
  1975. #endif /* RCC_CSR_V18PWRRSTF */
  1976.  
  1977. /**
  1978.   * @brief  Set RMVF bit to clear the reset flags.
  1979.   * @rmtoll CSR          RMVF          LL_RCC_ClearResetFlags
  1980.   * @retval None
  1981.   */
  1982. __STATIC_INLINE void LL_RCC_ClearResetFlags(void)
  1983. {
  1984.   SET_BIT(RCC->CSR, RCC_CSR_RMVF);
  1985. }
  1986.  
  1987. /**
  1988.   * @}
  1989.   */
  1990.  
  1991. /** @defgroup RCC_LL_EF_IT_Management IT Management
  1992.   * @{
  1993.   */
  1994.  
  1995. /**
  1996.   * @brief  Enable LSI ready interrupt
  1997.   * @rmtoll CIR         LSIRDYIE      LL_RCC_EnableIT_LSIRDY
  1998.   * @retval None
  1999.   */
  2000. __STATIC_INLINE void LL_RCC_EnableIT_LSIRDY(void)
  2001. {
  2002.   SET_BIT(RCC->CIR, RCC_CIR_LSIRDYIE);
  2003. }
  2004.  
  2005. /**
  2006.   * @brief  Enable LSE ready interrupt
  2007.   * @rmtoll CIR         LSERDYIE      LL_RCC_EnableIT_LSERDY
  2008.   * @retval None
  2009.   */
  2010. __STATIC_INLINE void LL_RCC_EnableIT_LSERDY(void)
  2011. {
  2012.   SET_BIT(RCC->CIR, RCC_CIR_LSERDYIE);
  2013. }
  2014.  
  2015. /**
  2016.   * @brief  Enable HSI ready interrupt
  2017.   * @rmtoll CIR         HSIRDYIE      LL_RCC_EnableIT_HSIRDY
  2018.   * @retval None
  2019.   */
  2020. __STATIC_INLINE void LL_RCC_EnableIT_HSIRDY(void)
  2021. {
  2022.   SET_BIT(RCC->CIR, RCC_CIR_HSIRDYIE);
  2023. }
  2024.  
  2025. /**
  2026.   * @brief  Enable HSE ready interrupt
  2027.   * @rmtoll CIR         HSERDYIE      LL_RCC_EnableIT_HSERDY
  2028.   * @retval None
  2029.   */
  2030. __STATIC_INLINE void LL_RCC_EnableIT_HSERDY(void)
  2031. {
  2032.   SET_BIT(RCC->CIR, RCC_CIR_HSERDYIE);
  2033. }
  2034.  
  2035. /**
  2036.   * @brief  Enable PLL ready interrupt
  2037.   * @rmtoll CIR         PLLRDYIE      LL_RCC_EnableIT_PLLRDY
  2038.   * @retval None
  2039.   */
  2040. __STATIC_INLINE void LL_RCC_EnableIT_PLLRDY(void)
  2041. {
  2042.   SET_BIT(RCC->CIR, RCC_CIR_PLLRDYIE);
  2043. }
  2044.  
  2045. /**
  2046.   * @brief  Enable HSI14 ready interrupt
  2047.   * @rmtoll CIR          HSI14RDYIE    LL_RCC_EnableIT_HSI14RDY
  2048.   * @retval None
  2049.   */
  2050. __STATIC_INLINE void LL_RCC_EnableIT_HSI14RDY(void)
  2051. {
  2052.   SET_BIT(RCC->CIR, RCC_CIR_HSI14RDYIE);
  2053. }
  2054.  
  2055. #if defined(RCC_HSI48_SUPPORT)
  2056. /**
  2057.   * @brief  Enable HSI48 ready interrupt
  2058.   * @rmtoll CIR          HSI48RDYIE    LL_RCC_EnableIT_HSI48RDY
  2059.   * @retval None
  2060.   */
  2061. __STATIC_INLINE void LL_RCC_EnableIT_HSI48RDY(void)
  2062. {
  2063.   SET_BIT(RCC->CIR, RCC_CIR_HSI48RDYIE);
  2064. }
  2065. #endif /* RCC_HSI48_SUPPORT */
  2066.  
  2067. /**
  2068.   * @brief  Disable LSI ready interrupt
  2069.   * @rmtoll CIR         LSIRDYIE      LL_RCC_DisableIT_LSIRDY
  2070.   * @retval None
  2071.   */
  2072. __STATIC_INLINE void LL_RCC_DisableIT_LSIRDY(void)
  2073. {
  2074.   CLEAR_BIT(RCC->CIR, RCC_CIR_LSIRDYIE);
  2075. }
  2076.  
  2077. /**
  2078.   * @brief  Disable LSE ready interrupt
  2079.   * @rmtoll CIR         LSERDYIE      LL_RCC_DisableIT_LSERDY
  2080.   * @retval None
  2081.   */
  2082. __STATIC_INLINE void LL_RCC_DisableIT_LSERDY(void)
  2083. {
  2084.   CLEAR_BIT(RCC->CIR, RCC_CIR_LSERDYIE);
  2085. }
  2086.  
  2087. /**
  2088.   * @brief  Disable HSI ready interrupt
  2089.   * @rmtoll CIR         HSIRDYIE      LL_RCC_DisableIT_HSIRDY
  2090.   * @retval None
  2091.   */
  2092. __STATIC_INLINE void LL_RCC_DisableIT_HSIRDY(void)
  2093. {
  2094.   CLEAR_BIT(RCC->CIR, RCC_CIR_HSIRDYIE);
  2095. }
  2096.  
  2097. /**
  2098.   * @brief  Disable HSE ready interrupt
  2099.   * @rmtoll CIR         HSERDYIE      LL_RCC_DisableIT_HSERDY
  2100.   * @retval None
  2101.   */
  2102. __STATIC_INLINE void LL_RCC_DisableIT_HSERDY(void)
  2103. {
  2104.   CLEAR_BIT(RCC->CIR, RCC_CIR_HSERDYIE);
  2105. }
  2106.  
  2107. /**
  2108.   * @brief  Disable PLL ready interrupt
  2109.   * @rmtoll CIR         PLLRDYIE      LL_RCC_DisableIT_PLLRDY
  2110.   * @retval None
  2111.   */
  2112. __STATIC_INLINE void LL_RCC_DisableIT_PLLRDY(void)
  2113. {
  2114.   CLEAR_BIT(RCC->CIR, RCC_CIR_PLLRDYIE);
  2115. }
  2116.  
  2117. /**
  2118.   * @brief  Disable HSI14 ready interrupt
  2119.   * @rmtoll CIR          HSI14RDYIE    LL_RCC_DisableIT_HSI14RDY
  2120.   * @retval None
  2121.   */
  2122. __STATIC_INLINE void LL_RCC_DisableIT_HSI14RDY(void)
  2123. {
  2124.   CLEAR_BIT(RCC->CIR, RCC_CIR_HSI14RDYIE);
  2125. }
  2126.  
  2127. #if defined(RCC_HSI48_SUPPORT)
  2128. /**
  2129.   * @brief  Disable HSI48 ready interrupt
  2130.   * @rmtoll CIR          HSI48RDYIE    LL_RCC_DisableIT_HSI48RDY
  2131.   * @retval None
  2132.   */
  2133. __STATIC_INLINE void LL_RCC_DisableIT_HSI48RDY(void)
  2134. {
  2135.   CLEAR_BIT(RCC->CIR, RCC_CIR_HSI48RDYIE);
  2136. }
  2137. #endif /* RCC_HSI48_SUPPORT */
  2138.  
  2139. /**
  2140.   * @brief  Checks if LSI ready interrupt source is enabled or disabled.
  2141.   * @rmtoll CIR         LSIRDYIE      LL_RCC_IsEnabledIT_LSIRDY
  2142.   * @retval State of bit (1 or 0).
  2143.   */
  2144. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSIRDY(void)
  2145. {
  2146.   return (READ_BIT(RCC->CIR, RCC_CIR_LSIRDYIE) == (RCC_CIR_LSIRDYIE));
  2147. }
  2148.  
  2149. /**
  2150.   * @brief  Checks if LSE ready interrupt source is enabled or disabled.
  2151.   * @rmtoll CIR         LSERDYIE      LL_RCC_IsEnabledIT_LSERDY
  2152.   * @retval State of bit (1 or 0).
  2153.   */
  2154. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSERDY(void)
  2155. {
  2156.   return (READ_BIT(RCC->CIR, RCC_CIR_LSERDYIE) == (RCC_CIR_LSERDYIE));
  2157. }
  2158.  
  2159. /**
  2160.   * @brief  Checks if HSI ready interrupt source is enabled or disabled.
  2161.   * @rmtoll CIR         HSIRDYIE      LL_RCC_IsEnabledIT_HSIRDY
  2162.   * @retval State of bit (1 or 0).
  2163.   */
  2164. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSIRDY(void)
  2165. {
  2166.   return (READ_BIT(RCC->CIR, RCC_CIR_HSIRDYIE) == (RCC_CIR_HSIRDYIE));
  2167. }
  2168.  
  2169. /**
  2170.   * @brief  Checks if HSE ready interrupt source is enabled or disabled.
  2171.   * @rmtoll CIR         HSERDYIE      LL_RCC_IsEnabledIT_HSERDY
  2172.   * @retval State of bit (1 or 0).
  2173.   */
  2174. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSERDY(void)
  2175. {
  2176.   return (READ_BIT(RCC->CIR, RCC_CIR_HSERDYIE) == (RCC_CIR_HSERDYIE));
  2177. }
  2178.  
  2179. /**
  2180.   * @brief  Checks if PLL ready interrupt source is enabled or disabled.
  2181.   * @rmtoll CIR         PLLRDYIE      LL_RCC_IsEnabledIT_PLLRDY
  2182.   * @retval State of bit (1 or 0).
  2183.   */
  2184. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLRDY(void)
  2185. {
  2186.   return (READ_BIT(RCC->CIR, RCC_CIR_PLLRDYIE) == (RCC_CIR_PLLRDYIE));
  2187. }
  2188.  
  2189. /**
  2190.   * @brief  Checks if HSI14 ready interrupt source is enabled or disabled.
  2191.   * @rmtoll CIR          HSI14RDYIE    LL_RCC_IsEnabledIT_HSI14RDY
  2192.   * @retval State of bit (1 or 0).
  2193.   */
  2194. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSI14RDY(void)
  2195. {
  2196.   return (READ_BIT(RCC->CIR, RCC_CIR_HSI14RDYIE) == (RCC_CIR_HSI14RDYIE));
  2197. }
  2198.  
  2199. #if defined(RCC_HSI48_SUPPORT)
  2200. /**
  2201.   * @brief  Checks if HSI48 ready interrupt source is enabled or disabled.
  2202.   * @rmtoll CIR          HSI48RDYIE    LL_RCC_IsEnabledIT_HSI48RDY
  2203.   * @retval State of bit (1 or 0).
  2204.   */
  2205. __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSI48RDY(void)
  2206. {
  2207.   return (READ_BIT(RCC->CIR, RCC_CIR_HSI48RDYIE) == (RCC_CIR_HSI48RDYIE));
  2208. }
  2209. #endif /* RCC_HSI48_SUPPORT */
  2210.  
  2211. /**
  2212.   * @}
  2213.   */
  2214.  
  2215. #if defined(USE_FULL_LL_DRIVER)
  2216. /** @defgroup RCC_LL_EF_Init De-initialization function
  2217.   * @{
  2218.   */
  2219. ErrorStatus LL_RCC_DeInit(void);
  2220. /**
  2221.   * @}
  2222.   */
  2223.  
  2224. /** @defgroup RCC_LL_EF_Get_Freq Get system and peripherals clocks frequency functions
  2225.   * @{
  2226.   */
  2227. void        LL_RCC_GetSystemClocksFreq(LL_RCC_ClocksTypeDef *RCC_Clocks);
  2228. uint32_t    LL_RCC_GetUSARTClockFreq(uint32_t USARTxSource);
  2229. uint32_t    LL_RCC_GetI2CClockFreq(uint32_t I2CxSource);
  2230. #if defined(USB_OTG_FS) || defined(USB)
  2231. uint32_t    LL_RCC_GetUSBClockFreq(uint32_t USBxSource);
  2232. #endif /* USB_OTG_FS || USB */
  2233. #if defined(CEC)
  2234. uint32_t    LL_RCC_GetCECClockFreq(uint32_t CECxSource);
  2235. #endif /* CEC */
  2236. /**
  2237.   * @}
  2238.   */
  2239. #endif /* USE_FULL_LL_DRIVER */
  2240.  
  2241. /**
  2242.   * @}
  2243.   */
  2244.  
  2245. /**
  2246.   * @}
  2247.   */
  2248.  
  2249. #endif /* RCC */
  2250.  
  2251. /**
  2252.   * @}
  2253.   */
  2254.  
  2255. #ifdef __cplusplus
  2256. }
  2257. #endif
  2258.  
  2259. #endif /* __STM32F0xx_LL_RCC_H */
  2260.  
  2261. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
  2262.