1 /**
2   ******************************************************************************
3   * @file    stm32u0xx_ll_rcc.h
4   * @author  MCD Application Team
5   * @brief   Header file of RCC LL module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2023 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software is licensed under terms that can be found in the LICENSE file
13   * in the root directory of this software component.
14   * If no LICENSE file comes with this software, it is provided AS-IS.
15   *
16   ******************************************************************************
17   */
18 
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef __STM32U0xx_LL_RCC_H
21 #define __STM32U0xx_LL_RCC_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32u0xx.h"
29 
30 /** @addtogroup STM32U0xx_LL_Driver
31   * @{
32   */
33 
34 #if defined(RCC)
35 
36 /** @defgroup RCC_LL RCC
37   * @{
38   */
39 
40 /* Private types -------------------------------------------------------------*/
41 /* Private variables ---------------------------------------------------------*/
42 /* Private constants ---------------------------------------------------------*/
43 
44 /** @defgroup RCC_LL_Private_Constants RCC Private Constants
45   * @{
46   */
47 /* Defines used to perform offsets*/
48 /* Offset used to access to RCC_CCIPR and RCC_CCIPR2 registers */
49 #define RCC_OFFSET_CCIPR        0U
50 
51 /**
52   * @}
53   */
54 
55 /* Private macros ------------------------------------------------------------*/
56 #if defined(USE_FULL_LL_DRIVER)
57 /** @defgroup RCC_LL_Private_Macros RCC Private Macros
58   * @{
59   */
60 /**
61   * @}
62   */
63 #endif /*USE_FULL_LL_DRIVER*/
64 
65 /* Exported types ------------------------------------------------------------*/
66 #if defined(USE_FULL_LL_DRIVER)
67 /** @defgroup RCC_LL_Exported_Types RCC Exported Types
68   * @{
69   */
70 
71 /** @defgroup LL_ES_CLOCK_FREQ Clocks Frequency Structure
72   * @{
73   */
74 
75 /**
76   * @brief  RCC Clocks Frequency Structure
77   */
78 typedef struct
79 {
80   uint32_t SYSCLK_Frequency;        /*!< SYSCLK clock frequency */
81   uint32_t HCLK_Frequency;          /*!< HCLK clock frequency */
82   uint32_t PCLK1_Frequency;         /*!< PCLK1 clock frequency */
83 } LL_RCC_ClocksTypeDef;
84 
85 /**
86   * @}
87   */
88 
89 /**
90   * @}
91   */
92 #endif /* USE_FULL_LL_DRIVER */
93 
94 /* Exported constants --------------------------------------------------------*/
95 /** @defgroup RCC_LL_Exported_Constants RCC Exported Constants
96   * @{
97   */
98 
99 /** @defgroup RCC_LL_EC_OSC_VALUES Oscillator Values adaptation
100   * @brief    Defines used to adapt values of different oscillators
101   * @note     These values could be modified in the user environment according to
102   *           HW set-up.
103   * @{
104   */
105 #if !defined  (HSE_VALUE)
106 #define HSE_VALUE    8000000U   /*!< Value of the HSE oscillator in Hz */
107 #endif /* HSE_VALUE */
108 
109 #if !defined  (HSI_VALUE)
110 #define HSI_VALUE    16000000U  /*!< Value of the HSI oscillator in Hz */
111 #endif /* HSI_VALUE */
112 
113 #if !defined  (LSE_VALUE)
114 #define LSE_VALUE    32768U     /*!< Value of the LSE oscillator in Hz */
115 #endif /* LSE_VALUE */
116 
117 #if !defined  (LSI_VALUE)
118 #define LSI_VALUE    32000U     /*!< Value of the LSI oscillator in Hz */
119 #endif /* LSI_VALUE */
120 
121 #if !defined  (HSI48_VALUE)
122 #define HSI48_VALUE  48000000U   /*!< Value of the HSI48 oscillator in Hz */
123 #endif /* HSI48_VALUE */
124 /**
125   * @}
126   */
127 
128 /** @defgroup RCC_LL_EC_CLEAR_FLAG Clear Flags Defines
129   * @brief    Flags defines which can be used with LL_RCC_WriteReg function
130   * @{
131   */
132 #define LL_RCC_CICR_LSIRDYC                RCC_CICR_LSIRDYC     /*!< LSI Ready Interrupt Clear */
133 #define LL_RCC_CICR_LSERDYC                RCC_CICR_LSERDYC     /*!< LSE Ready Interrupt Clear */
134 #define LL_RCC_CICR_MSIRDYC                RCC_CICR_MSIRDYC     /*!< MSI Ready Interrupt Clear */
135 #define LL_RCC_CICR_HSIRDYC                RCC_CICR_HSIRDYC     /*!< HSI Ready Interrupt Clear */
136 #define LL_RCC_CICR_HSERDYC                RCC_CICR_HSERDYC     /*!< HSE Ready Interrupt Clear */
137 #define LL_RCC_CICR_PLLRDYC                RCC_CICR_PLLRDYC     /*!< PLL Ready Interrupt Clear */
138 #define LL_RCC_CICR_CSSC                   RCC_CICR_CSSC        /*!< Clock Security System Interrupt Clear */
139 #define LL_RCC_CICR_LSECSSC                RCC_CICR_LSECSSC     /*!< LSE Clock Security System Interrupt Clear */
140 #if defined(RCC_CRRCR_HSI48ON)
141 #define LL_RCC_CICR_HSI48RDYC              RCC_CICR_HSI48RDYC   /*!< HSI48 Clock Security System Interrupt Clear */
142 #endif /* RCC_CRRCR_HSI48ON */
143 /**
144   * @}
145   */
146 
147 /** @defgroup RCC_LL_EC_GET_FLAG Get Flags Defines
148   * @brief    Flags defines which can be used with LL_RCC_ReadReg function
149   * @{
150   */
151 #define LL_RCC_CIFR_LSIRDYF                RCC_CIFR_LSIRDYF     /*!< LSI Ready Interrupt flag */
152 #define LL_RCC_CIFR_LSERDYF                RCC_CIFR_LSERDYF     /*!< LSE Ready Interrupt flag */
153 #define LL_RCC_CIFR_MSIRDYF                RCC_CIFR_MSIRDYF     /*!< MSI Ready Interrupt flag */
154 #define LL_RCC_CIFR_HSIRDYF                RCC_CIFR_HSIRDYF     /*!< HSI Ready Interrupt flag */
155 #define LL_RCC_CIFR_HSERDYF                RCC_CIFR_HSERDYF     /*!< HSE Ready Interrupt flag */
156 #define LL_RCC_CIFR_PLLRDYF                RCC_CIFR_PLLRDYF     /*!< PLL Ready Interrupt flag */
157 #define LL_RCC_CIFR_CSSF                   RCC_CIFR_CSSF        /*!< HSE Clock Security System Interrupt flag */
158 #define LL_RCC_CIFR_LSECSSF                RCC_CIFR_LSECSSF     /*!< LSE Clock Security System Interrupt flag */
159 #if defined(RCC_CRRCR_HSI48ON)
160 #define LL_RCC_CIFR_HSI48RDYF              RCC_CIFR_HSI48RDYF   /*!< HSI48 Ready Interrupt flag */
161 #endif /* RCC_CRRCR_HSI48ON */
162 #define LL_RCC_CSR_RMVF                    RCC_CSR_RMVF         /*!< Low-Power reset flag */
163 #define LL_RCC_CSR_OBLRSTF                 RCC_CSR_OBLRSTF      /*!< OBL reset flag */
164 #define LL_RCC_CSR_PINRSTF                 RCC_CSR_PINRSTF      /*!< PIN reset flag */
165 #define LL_RCC_CSR_PWRRSTF                 RCC_CSR_PWRRSTF      /*!< PWR reset flag */
166 #define LL_RCC_CSR_SFTRSTF                 RCC_CSR_SFTRSTF      /*!< Software Reset flag */
167 #define LL_RCC_CSR_IWDGRSTF                RCC_CSR_IWDGRSTF     /*!< Independent Watchdog reset flag */
168 #define LL_RCC_CSR_WWDGRSTF                RCC_CSR_WWDGRSTF     /*!< Window watchdog reset flag */
169 #define LL_RCC_CSR_LPWRRSTF                RCC_CSR_LPWRRSTF     /*!< Low-Power reset flag */
170 /**
171   * @}
172   */
173 
174 /** @defgroup RCC_LL_EC_IT IT Defines
175   * @brief    IT defines which can be used with LL_RCC_ReadReg and  LL_RCC_WriteReg functions
176   * @{
177   */
178 #define LL_RCC_CIER_LSIRDYIE               RCC_CIER_LSIRDYIE      /*!< LSI Ready Interrupt Enable */
179 #define LL_RCC_CIER_LSERDYIE               RCC_CIER_LSERDYIE      /*!< LSE Ready Interrupt Enable */
180 #define LL_RCC_CIER_MSIRDYIE               RCC_CIER_MSIRDYIE      /*!< MSI Ready Interrupt Enable */
181 #define LL_RCC_CIER_HSIRDYIE               RCC_CIER_HSIRDYIE      /*!< HSI Ready Interrupt Enable */
182 #define LL_RCC_CIER_HSERDYIE               RCC_CIER_HSERDYIE      /*!< HSE Ready Interrupt Enable */
183 #define LL_RCC_CIER_PLLRDYIE               RCC_CIER_PLLRDYIE      /*!< PLL Ready Interrupt Enable */
184 #define LL_RCC_CIER_LSECSSIE               RCC_CIER_LSECSSIE      /*!< LSE CSS Interrupt Enable */
185 #if defined(RCC_CRRCR_HSI48ON)
186 #define LL_RCC_CIER_HSI48RDYIE             RCC_CIER_HSI48RDYIE    /*!< HSI48 Ready Interrupt Enable */
187 #endif /* RCC_CRRCR_HSI48ON */
188 /**
189   * @}
190   */
191 
192 /** @defgroup RCC_LL_EC_LSIPRE  LSI prescaler
193   * @{
194   */
195 #define LL_RCC_LSI_DIV_1                   0UL                     /*!< LSI divided by 1   */
196 #define LL_RCC_LSI_DIV_128                 RCC_CSR_LSIPREDIV       /*!< LSI divided by 128 */
197 /**
198   * @}
199   */
200 
201 /** @defgroup RCC_LL_EC_LSEDRIVE  LSE oscillator drive capability
202   * @{
203   */
204 #define LL_RCC_LSEDRIVE_LOW                0x00000000U             /*!< Xtal mode lower driving capability */
205 #define LL_RCC_LSEDRIVE_MEDIUMLOW          RCC_BDCR_LSEDRV_0       /*!< Xtal mode medium low driving capability */
206 #define LL_RCC_LSEDRIVE_MEDIUMHIGH         RCC_BDCR_LSEDRV_1       /*!< Xtal mode medium high driving capability */
207 #define LL_RCC_LSEDRIVE_HIGH               RCC_BDCR_LSEDRV         /*!< Xtal mode higher driving capability */
208 /**
209   * @}
210   */
211 
212 /** @defgroup RCC_LL_EC_MSIRANGE  MSI clock ranges
213   * @{
214   */
215 #define LL_RCC_MSIRANGE_0                  RCC_CR_MSIRANGE_0  /*!< MSI = 100 KHz  */
216 #define LL_RCC_MSIRANGE_1                  RCC_CR_MSIRANGE_1  /*!< MSI = 200 KHz  */
217 #define LL_RCC_MSIRANGE_2                  RCC_CR_MSIRANGE_2  /*!< MSI = 400 KHz  */
218 #define LL_RCC_MSIRANGE_3                  RCC_CR_MSIRANGE_3  /*!< MSI = 800 KHz  */
219 #define LL_RCC_MSIRANGE_4                  RCC_CR_MSIRANGE_4  /*!< MSI = 1 MHz    */
220 #define LL_RCC_MSIRANGE_5                  RCC_CR_MSIRANGE_5  /*!< MSI = 2 MHz    */
221 #define LL_RCC_MSIRANGE_6                  RCC_CR_MSIRANGE_6  /*!< MSI = 4 MHz    */
222 #define LL_RCC_MSIRANGE_7                  RCC_CR_MSIRANGE_7  /*!< MSI = 8 MHz    */
223 #define LL_RCC_MSIRANGE_8                  RCC_CR_MSIRANGE_8  /*!< MSI = 16 MHz   */
224 #define LL_RCC_MSIRANGE_9                  RCC_CR_MSIRANGE_9  /*!< MSI = 24 MHz   */
225 #define LL_RCC_MSIRANGE_10                 RCC_CR_MSIRANGE_10 /*!< MSI = 32 MHz   */
226 #define LL_RCC_MSIRANGE_11                 RCC_CR_MSIRANGE_11 /*!< MSI = 48 MHz   */
227 /**
228   * @}
229   */
230 
231 /** @defgroup RCC_LL_EC_MSISRANGE  MSI range after Standby mode
232   * @{
233   */
234 #define LL_RCC_MSISRANGE_4                 RCC_CSR_MSISTBYRG_1  /*!< MSI = 1 MHz    */
235 #define LL_RCC_MSISRANGE_5                 RCC_CSR_MSISTBYRG_2  /*!< MSI = 2 MHz    */
236 #define LL_RCC_MSISRANGE_6                 RCC_CSR_MSISTBYRG_4  /*!< MSI = 4 MHz    */
237 #define LL_RCC_MSISRANGE_7                 RCC_CSR_MSISTBYRG_8  /*!< MSI = 8 MHz    */
238 /**
239   * @}
240   */
241 
242 /** @defgroup RCC_LL_EC_LSCO_CLKSOURCE  LSCO Selection
243   * @{
244   */
245 #define LL_RCC_LSCO_CLKSOURCE_LSI          0x00000000U          /*!< LSI selection for low speed clock  */
246 #define LL_RCC_LSCO_CLKSOURCE_LSE          RCC_BDCR_LSCOSEL     /*!< LSE selection for low speed clock  */
247 /**
248   * @}
249   */
250 
251 /** @defgroup RCC_LL_EC_SYS_CLKSOURCE  System clock switch
252   * @{
253   */
254 #define LL_RCC_SYS_CLKSOURCE_MSI           (0x00000000U)                     /*!< MSI selection as system clock */
255 #define LL_RCC_SYS_CLKSOURCE_HSI           RCC_CFGR_SW_0                     /*!< HSI selection as system clock */
256 #define LL_RCC_SYS_CLKSOURCE_HSE           RCC_CFGR_SW_1                     /*!< HSE selection as system clock */
257 #define LL_RCC_SYS_CLKSOURCE_PLL           (RCC_CFGR_SW_1 | RCC_CFGR_SW_0)   /*!< PLL selection as system clock */
258 #define LL_RCC_SYS_CLKSOURCE_LSI           RCC_CFGR_SW_2                     /*!< LSI selection as system clock */
259 #define LL_RCC_SYS_CLKSOURCE_LSE           (RCC_CFGR_SW_2  |RCC_CFGR_SW_0)   /*!< LSE selection as system clock */
260 /**
261   * @}
262   */
263 
264 /** @defgroup RCC_LL_EC_SYS_CLKSOURCE_STATUS  System clock switch status
265   * @{
266   */
267 #define LL_RCC_SYS_CLKSOURCE_STATUS_MSI    (0x00000000U)                      /*!< MSI used as system clock */
268 #define LL_RCC_SYS_CLKSOURCE_STATUS_HSI    RCC_CFGR_SWS_0                     /*!< HSI used as system clock */
269 #define LL_RCC_SYS_CLKSOURCE_STATUS_HSE    RCC_CFGR_SWS_1                     /*!< HSE used as system clock */
270 #define LL_RCC_SYS_CLKSOURCE_STATUS_PLL    (RCC_CFGR_SWS_1 | RCC_CFGR_SWS_0)  /*!< PLL used as system clock */
271 #define LL_RCC_SYS_CLKSOURCE_STATUS_LSI    RCC_CFGR_SWS_2                     /*!< LSI used as system clock */
272 #define LL_RCC_SYS_CLKSOURCE_STATUS_LSE    (RCC_CFGR_SWS_2  |RCC_CFGR_SWS_0)  /*!< LSE used as system clock */
273 /**
274   * @}
275   */
276 
277 /** @defgroup RCC_LL_EC_SYSCLK_DIV  AHB prescaler
278   * @{
279   */
280 #define LL_RCC_SYSCLK_DIV_1       (0x00000000U)                                                           /*!< SYSCLK not divided */
281 #define LL_RCC_SYSCLK_DIV_2       RCC_CFGR_HPRE_3                                                         /*!< SYSCLK divided by 2 */
282 #define LL_RCC_SYSCLK_DIV_4       (RCC_CFGR_HPRE_3 | RCC_CFGR_HPRE_0)                                     /*!< SYSCLK divided by 4 */
283 #define LL_RCC_SYSCLK_DIV_8       (RCC_CFGR_HPRE_3 | RCC_CFGR_HPRE_1)                                     /*!< SYSCLK divided by 8 */
284 #define LL_RCC_SYSCLK_DIV_16      (RCC_CFGR_HPRE_3 | RCC_CFGR_HPRE_1 | RCC_CFGR_HPRE_0)                   /*!< SYSCLK divided by 16 */
285 #define LL_RCC_SYSCLK_DIV_64      (RCC_CFGR_HPRE_3 | RCC_CFGR_HPRE_2)                                     /*!< SYSCLK divided by 64 */
286 #define LL_RCC_SYSCLK_DIV_128     (RCC_CFGR_HPRE_3 | RCC_CFGR_HPRE_2 | RCC_CFGR_HPRE_0)                   /*!< SYSCLK divided by 128 */
287 #define LL_RCC_SYSCLK_DIV_256     (RCC_CFGR_HPRE_3 | RCC_CFGR_HPRE_2 | RCC_CFGR_HPRE_1)                   /*!< SYSCLK divided by 256 */
288 #define LL_RCC_SYSCLK_DIV_512     (RCC_CFGR_HPRE_3 | RCC_CFGR_HPRE_2 | RCC_CFGR_HPRE_1 | RCC_CFGR_HPRE_0) /*!< SYSCLK divided by 512 */
289 /**
290   * @}
291   */
292 
293 /** @defgroup RCC_LL_EC_APB1_DIV  APB low-speed prescaler (APB1)
294   * @{
295   */
296 #define LL_RCC_APB1_DIV_1         (0x00000000U)                                         /*!< APB not divided */
297 #define LL_RCC_APB1_DIV_2         RCC_CFGR_PPRE_2                                       /*!< APB divided by 2 */
298 #define LL_RCC_APB1_DIV_4         (RCC_CFGR_PPRE_2 | RCC_CFGR_PPRE_0)                   /*!< APB divided by 4 */
299 #define LL_RCC_APB1_DIV_8         (RCC_CFGR_PPRE_2 | RCC_CFGR_PPRE_1)                   /*!< APB divided by 8 */
300 #define LL_RCC_APB1_DIV_16        (RCC_CFGR_PPRE_2 | RCC_CFGR_PPRE_1 | RCC_CFGR_PPRE_0) /*!< APB divided by 16 */
301 /**
302   * @}
303   */
304 
305 /** @defgroup RCC_LL_EC_STOP_WAKEUPCLOCK  Wakeup from Stop and CSS backup clock selection
306   * @{
307   */
308 #define LL_RCC_STOP_WAKEUPCLOCK_MSI        0x00000000U             /*!< MSI selection after wake-up from STOP */
309 #define LL_RCC_STOP_WAKEUPCLOCK_HSI        RCC_CFGR_STOPWUCK       /*!< HSI selection after wake-up from STOP */
310 /**
311   * @}
312   */
313 
314 /** @defgroup RCC_LL_EC_MCO1SOURCE  MCO1 SOURCE selection
315   * @{
316   */
317 #define LL_RCC_MCO1SOURCE_NOCLOCK    (uint32_t)((RCC_CFGR_MCO1SEL>>16U) | 0x00000000U)            /*!< MCO output disabled, no clock on MCO */
318 #define LL_RCC_MCO1SOURCE_SYSCLK     (uint32_t)((RCC_CFGR_MCO1SEL>>16U) | RCC_CFGR_MCO1SEL_0)     /*!< SYSCLK selection as MCO1 source */
319 #define LL_RCC_MCO1SOURCE_MSI        (uint32_t)((RCC_CFGR_MCO1SEL>>16U) | RCC_CFGR_MCO1SEL_1)     /*!< MSI selection as MCO1 source */
320 #define LL_RCC_MCO1SOURCE_HSI16      (uint32_t)((RCC_CFGR_MCO1SEL>>16U) | RCC_CFGR_MCO1SEL_1 |\
321                                                 RCC_CFGR_MCO1SEL_0)                               /*!< HSI16 selection as MCO1 source */
322 #define LL_RCC_MCO1SOURCE_HSE        (uint32_t)((RCC_CFGR_MCO1SEL>>16U) | RCC_CFGR_MCO1SEL_2)     /*!< HSE selection as MCO1 source */
323 #define LL_RCC_MCO1SOURCE_PLLCLK     (uint32_t)((RCC_CFGR_MCO1SEL>>16U) | RCC_CFGR_MCO1SEL_2 |\
324                                                 RCC_CFGR_MCO1SEL_0)                               /*!< Main PLL selection as MCO1 source */
325 #define LL_RCC_MCO1SOURCE_LSI        (uint32_t)((RCC_CFGR_MCO1SEL>>16U) | RCC_CFGR_MCO1SEL_2 |\
326                                                 RCC_CFGR_MCO1SEL_1)                               /*!< LSI selection as MCO1 source */
327 #define LL_RCC_MCO1SOURCE_LSE        (uint32_t)((RCC_CFGR_MCO1SEL>>16U) | RCC_CFGR_MCO1SEL_2 |\
328                                                 RCC_CFGR_MCO1SEL_1     | RCC_CFGR_MCO1SEL_0)      /*!< LSE selection as MCO1 source */
329 #if defined(RCC_CRRCR_HSI48ON)
330 #define LL_RCC_MCO1SOURCE_HSI48      (uint32_t)((RCC_CFGR_MCO1SEL>>16U) | RCC_CFGR_MCO1SEL_3)     /*!< HSI48 selection as MCO1 source */
331 #endif /* RCC_CRRCR_HSI48ON */
332 #define LL_RCC_MCO1SOURCE_RTC        (uint32_t)((RCC_CFGR_MCO1SEL>>16U) | RCC_CFGR_MCO1SEL_3 |\
333                                                 RCC_CFGR_MCO1SEL_0)                               /*!< RTC alter clk selection as MCO1 source */
334 #define LL_RCC_MCO1SOURCE_RTCWUPI    (uint32_t)((RCC_CFGR_MCO1SEL>>16U) | RCC_CFGR_MCO1SEL_3 |\
335                                                 RCC_CFGR_MCO1SEL_1)                               /*!< RTC wakeup interrupt signal selection as MCO1 source */
336 /**
337   * @}
338   */
339 
340 /** @defgroup RCC_LL_EC_MCO1_DIV  MCO1 prescaler
341   * @{
342   */
343 
344 #define LL_RCC_MCO1_DIV_1        (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | 0x00000000U)             /*!< MCO not divided */
345 
346 #define LL_RCC_MCO1_DIV_2        (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_0)      /*!< MCO divided by 2 */
347 #define LL_RCC_MCO1_DIV_4        (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_1)      /*!< MCO divided by 4 */
348 #define LL_RCC_MCO1_DIV_8        (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_1 |\
349                                             RCC_CFGR_MCO1PRE_0)                                /*!< MCO divided by 8 */
350 #define LL_RCC_MCO1_DIV_16       (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_2)      /*!< MCO divided by 16 */
351 #define LL_RCC_MCO1_DIV_32       (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_2 |\
352                                             RCC_CFGR_MCO1PRE_0)                                /*!< MCO divided by 32 */
353 #define LL_RCC_MCO1_DIV_64       (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_2 |\
354                                             RCC_CFGR_MCO1PRE_1)                                /*!< MCO divided by 64 */
355 #define LL_RCC_MCO1_DIV_128      (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_2 |\
356                                             RCC_CFGR_MCO1PRE_1     | RCC_CFGR_MCO1PRE_0)      /*!< MCO divided by 128 */
357 #define LL_RCC_MCO1_DIV_256      (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_3)     /*!< MCO divided by 256 */
358 #define LL_RCC_MCO1_DIV_512      (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_3 |\
359                                             RCC_CFGR_MCO1PRE_0)                               /*!< MCO divided by 512 */
360 #define LL_RCC_MCO1_DIV_1024     (uint32_t)((RCC_CFGR_MCO1PRE>>16U) | RCC_CFGR_MCO1PRE_3 |\
361                                             RCC_CFGR_MCO1PRE_1)                              /*!< MCO divided by 1024 */
362 /**
363   * @}
364   */
365 
366 /** @defgroup RCC_LL_EC_MCO2SOURCE  MCO2 SOURCE selection
367   * @{
368   */
369 #define LL_RCC_MCO2SOURCE_NOCLOCK    (uint32_t)((RCC_CFGR_MCO2SEL>>16U) | 0x00000000U)           /*!< MCO output disabled, no clock on MCO2 */
370 #define LL_RCC_MCO2SOURCE_SYSCLK     (uint32_t)((RCC_CFGR_MCO2SEL>>16U) | RCC_CFGR_MCO2SEL_0)    /*!< SYSCLK selection as MCO2 source */
371 #define LL_RCC_MCO2SOURCE_MSI        (uint32_t)((RCC_CFGR_MCO2SEL>>16U) | RCC_CFGR_MCO2SEL_1)    /*!< MSI selection as MCO2 source */
372 #define LL_RCC_MCO2SOURCE_HSI16      (uint32_t)((RCC_CFGR_MCO2SEL>>16U) | RCC_CFGR_MCO2SEL_1 |\
373                                                 RCC_CFGR_MCO2SEL_0)                              /*!< HSI16 selection as MCO2 source */
374 #define LL_RCC_MCO2SOURCE_HSE        (uint32_t)((RCC_CFGR_MCO2SEL>>16U) | RCC_CFGR_MCO2SEL_2)    /*!< HSE selection as MCO2 source */
375 #define LL_RCC_MCO2SOURCE_PLLCLK     (uint32_t)((RCC_CFGR_MCO2SEL>>16U) | RCC_CFGR_MCO2SEL_2 |\
376                                                 RCC_CFGR_MCO2SEL_0)                              /*!< Main PLL selection as MCO2 source */
377 #define LL_RCC_MCO2SOURCE_LSI        (uint32_t)((RCC_CFGR_MCO2SEL>>16U) | RCC_CFGR_MCO2SEL_2 |\
378                                                 RCC_CFGR_MCO2SEL_1)                              /*!< LSI selection as MCO2 source */
379 #define LL_RCC_MCO2SOURCE_LSE        (uint32_t)((RCC_CFGR_MCO2SEL>>16U) | RCC_CFGR_MCO2SEL_2 |\
380                                                 RCC_CFGR_MCO2SEL_1     | RCC_CFGR_MCO2SEL_0)     /*!< LSE selection as MCO2 source */
381 #if defined(RCC_CRRCR_HSI48ON)
382 #define LL_RCC_MCO2SOURCE_HSI48      (uint32_t)((RCC_CFGR_MCO2SEL>>16U) | RCC_CFGR_MCO2SEL_3)    /*!< HSI48 selection as MCO2 source */
383 #endif /* RCC_CRRCR_HSI48ON */
384 #define LL_RCC_MCO2SOURCE_RTC        (uint32_t)((RCC_CFGR_MCO2SEL>>16U) | RCC_CFGR_MCO2SEL_3 |\
385                                                 RCC_CFGR_MCO2SEL_0)                              /*!< RTC alter clk selection as MCO2 source */
386 #define LL_RCC_MCO2SOURCE_RTCWUPI    (uint32_t)((RCC_CFGR_MCO2SEL>>16U) | RCC_CFGR_MCO2SEL_3 |\
387                                                 RCC_CFGR_MCO2SEL_1)                              /*!< RTC wakeup interrupt signal selection as MCO2 source */
388 /**
389   * @}
390   */
391 
392 /** @defgroup RCC_LL_EC_MCO2_DIV  MCO2 prescaler
393   * @{
394   */
395 
396 #define LL_RCC_MCO2_DIV_1         (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | 0x00000000U)           /*!< MCO not divided */
397 
398 #define LL_RCC_MCO2_DIV_2         (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_0)    /*!< MCO divided by 2 */
399 #define LL_RCC_MCO2_DIV_4         (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_1)    /*!< MCO divided by 4 */
400 #define LL_RCC_MCO2_DIV_8         (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_1 |\
401                                              RCC_CFGR_MCO2PRE_0)                              /*!< MCO divided by 8 */
402 #define LL_RCC_MCO2_DIV_16        (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_2)    /*!< MCO divided by 16 */
403 #define LL_RCC_MCO2_DIV_32        (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_2 |\
404                                              RCC_CFGR_MCO2PRE_0)                              /*!< MCO divided by 32 */
405 #define LL_RCC_MCO2_DIV_64        (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_2 |\
406                                              RCC_CFGR_MCO2PRE_1)                              /*!< MCO divided by 64 */
407 #define LL_RCC_MCO2_DIV_128       (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_2 |\
408                                              RCC_CFGR_MCO2PRE_1     | RCC_CFGR_MCO2PRE_0)     /*!< MCO divided by 128 */
409 #define LL_RCC_MCO2_DIV_256       (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_3)    /*!< MCO divided by 256 */
410 #define LL_RCC_MCO2_DIV_512       (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_3 |\
411                                              RCC_CFGR_MCO2PRE_0)                              /*!< MCO divided by 512 */
412 #define LL_RCC_MCO2_DIV_1024      (uint32_t)((RCC_CFGR_MCO2PRE>>16U) | RCC_CFGR_MCO2PRE_3 |\
413                                              RCC_CFGR_MCO2PRE_1)                             /*!< MCO divided by 1024 */
414 /**
415   * @}
416   */
417 
418 #if defined(USE_FULL_LL_DRIVER)
419 /** @defgroup RCC_LL_EC_PERIPH_FREQUENCY Peripheral clock frequency
420   * @{
421   */
422 #define LL_RCC_PERIPH_FREQUENCY_NO         0x00000000U          /*!< No clock enabled for the peripheral */
423 #define LL_RCC_PERIPH_FREQUENCY_NA         0xFFFFFFFFU          /*!< Frequency cannot be provided as external clock */
424 /**
425   * @}
426   */
427 #endif /* USE_FULL_LL_DRIVER */
428 
429 /** @defgroup RCC_LL_EC_USART1_CLKSOURCE  Peripheral USART clock source selection
430   * @{
431   */
432 #define LL_RCC_USART1_CLKSOURCE_PCLK1      (RCC_CCIPR_USART1SEL << 16U)                           /*!< PCLK clock used as USART1 clock source */
433 #define LL_RCC_USART1_CLKSOURCE_SYSCLK     ((RCC_CCIPR_USART1SEL << 16U) | RCC_CCIPR_USART1SEL_0) /*!< SYSCLK clock used as USART1 clock source */
434 #define LL_RCC_USART1_CLKSOURCE_HSI        ((RCC_CCIPR_USART1SEL << 16U) | RCC_CCIPR_USART1SEL_1) /*!< HSI clock used as USART1 clock source */
435 #define LL_RCC_USART1_CLKSOURCE_LSE        ((RCC_CCIPR_USART1SEL << 16U) | RCC_CCIPR_USART1SEL)   /*!< LSE clock used as USART1 clock source */
436 
437 #define LL_RCC_USART2_CLKSOURCE_PCLK1      (RCC_CCIPR_USART2SEL << 16U)                           /*!< PCLK clock used as USART2 clock source */
438 #define LL_RCC_USART2_CLKSOURCE_SYSCLK     ((RCC_CCIPR_USART2SEL << 16U) | RCC_CCIPR_USART2SEL_0) /*!< SYSCLK clock used as USART2 clock source */
439 #define LL_RCC_USART2_CLKSOURCE_HSI        ((RCC_CCIPR_USART2SEL << 16U) | RCC_CCIPR_USART2SEL_1) /*!< HSI clock used as USART2 clock source */
440 #define LL_RCC_USART2_CLKSOURCE_LSE        ((RCC_CCIPR_USART2SEL << 16U) | RCC_CCIPR_USART2SEL)   /*!< LSE clock used as USART2 clock source */
441 /**
442   * @}
443   */
444 
445 /** @defgroup RCC_LL_EC_LPUARTx_CLKSOURCE Peripheral LPUART clock source selection
446   * @{
447   */
448 #if defined (LPUART3)
449 #define LL_RCC_LPUART3_CLKSOURCE_PCLK1     ((RCC_CCIPR_LPUART3SEL << 16U) | 0x00000000U)             /*!< PCLK clock used as LPUART3 clock source */
450 #define LL_RCC_LPUART3_CLKSOURCE_SYSCLK    ((RCC_CCIPR_LPUART3SEL << 16U) | RCC_CCIPR_LPUART3SEL_0)  /*!< SYSCLK clock used as LPUART3 clock source */
451 #define LL_RCC_LPUART3_CLKSOURCE_HSI       ((RCC_CCIPR_LPUART3SEL << 16U) | RCC_CCIPR_LPUART3SEL_1)  /*!< HSI clock used as LPUART3 clock source */
452 #define LL_RCC_LPUART3_CLKSOURCE_LSE       ((RCC_CCIPR_LPUART3SEL << 16U) | RCC_CCIPR_LPUART3SEL)    /*!< LSE clock used as LPUART3 clock source */
453 #endif /* LPUART3 */
454 #define LL_RCC_LPUART2_CLKSOURCE_PCLK1     ((RCC_CCIPR_LPUART2SEL << 16U) | 0x00000000U)             /*!< PCLK clock used as LPUART2 clock source */
455 #define LL_RCC_LPUART2_CLKSOURCE_SYSCLK    ((RCC_CCIPR_LPUART2SEL << 16U) | RCC_CCIPR_LPUART2SEL_0)  /*!< SYSCLK clock used as LPUART2 clock source */
456 #define LL_RCC_LPUART2_CLKSOURCE_HSI       ((RCC_CCIPR_LPUART2SEL << 16U) | RCC_CCIPR_LPUART2SEL_1)  /*!< HSI clock used as LPUART2 clock source */
457 #define LL_RCC_LPUART2_CLKSOURCE_LSE       ((RCC_CCIPR_LPUART2SEL << 16U) | RCC_CCIPR_LPUART2SEL)    /*!< LSE clock used as LPUART2 clock source */
458 #define LL_RCC_LPUART1_CLKSOURCE_PCLK1     ((RCC_CCIPR_LPUART1SEL << 16U) | 0x00000000U)             /*!< PCLK clock used as LPUART1 clock source */
459 #define LL_RCC_LPUART1_CLKSOURCE_SYSCLK    ((RCC_CCIPR_LPUART1SEL << 16U) | RCC_CCIPR_LPUART1SEL_0)  /*!< SYSCLK clock used as LPUART1 clock source */
460 #define LL_RCC_LPUART1_CLKSOURCE_HSI       ((RCC_CCIPR_LPUART1SEL << 16U) | RCC_CCIPR_LPUART1SEL_1)  /*!< HSI clock used as LPUART1 clock source */
461 #define LL_RCC_LPUART1_CLKSOURCE_LSE       ((RCC_CCIPR_LPUART1SEL << 16U) | RCC_CCIPR_LPUART1SEL)    /*!< LSE clock used as LPUART1 clock source */
462 /**
463   * @}
464   */
465 
466 /** @defgroup RCC_LL_EC_I2C1_CLKSOURCE  Peripheral I2C clock source selection
467   * @{
468   */
469 #define LL_RCC_I2C1_CLKSOURCE_PCLK1        ((RCC_OFFSET_CCIPR << 24U) | (RCC_CCIPR_I2C1SEL_Pos << 16U))    /*!< PCLK1 clock used as I2C1 clock source */
470 #define LL_RCC_I2C1_CLKSOURCE_SYSCLK       ((RCC_OFFSET_CCIPR << 24U) | (RCC_CCIPR_I2C1SEL_Pos << 16U) | \
471                                             (RCC_CCIPR_I2C1SEL_0 >> RCC_CCIPR_I2C1SEL_Pos))                /*!< SYSCLK clock used as I2C1 clock source */
472 #define LL_RCC_I2C1_CLKSOURCE_HSI          ((RCC_OFFSET_CCIPR << 24U) | (RCC_CCIPR_I2C1SEL_Pos << 16U) | \
473                                             (RCC_CCIPR_I2C1SEL_1 >> RCC_CCIPR_I2C1SEL_Pos))                /*!< HSI clock used as I2C1 clock source */
474 #define LL_RCC_I2C3_CLKSOURCE_PCLK1        ((RCC_OFFSET_CCIPR << 24U) | (RCC_CCIPR_I2C3SEL_Pos << 16U))    /*!< PCLK1 clock used as I2C3 clock source */
475 #define LL_RCC_I2C3_CLKSOURCE_SYSCLK       ((RCC_OFFSET_CCIPR << 24U) | (RCC_CCIPR_I2C3SEL_Pos << 16U) | \
476                                             (RCC_CCIPR_I2C3SEL_0 >> RCC_CCIPR_I2C3SEL_Pos))                /*!< SYSCLK clock used as I2C3 clock source */
477 #define LL_RCC_I2C3_CLKSOURCE_HSI          ((RCC_OFFSET_CCIPR << 24U) | (RCC_CCIPR_I2C3SEL_Pos << 16U) | \
478                                             (RCC_CCIPR_I2C3SEL_1 >> RCC_CCIPR_I2C3SEL_Pos))                /*!< HSI clock used as I2C3 clock source */
479 /**
480   * @}
481   */
482 
483 /** @defgroup RCC_LL_EC_TIMx_CLKSOURCE Peripheral TIM clock source selection
484   * @{
485   */
486 #define LL_RCC_TIM1_CLKSOURCE_PCLK1     (RCC_CCIPR_TIM1SEL   | (0x00000000U >> 16U))        /*!< PCLK clock used as TIM1 clock source */
487 #define LL_RCC_TIM1_CLKSOURCE_PLLQ      (RCC_CCIPR_TIM1SEL   | (RCC_CCIPR_TIM1SEL >> 16U))  /*!< PLL used as TIM1 clock source */
488 /**
489   * @}
490   */
491 /** @addtogroup RCC_LL_EC_TIMx_CLKSOURCE
492   * @{
493   */
494 #define LL_RCC_TIM15_CLKSOURCE_PCLK1    (RCC_CCIPR_TIM15SEL   | (0x00000000U >> 16U))          /*!< PCLK clock used as TIM15 clock source */
495 #define LL_RCC_TIM15_CLKSOURCE_PLLQ     (RCC_CCIPR_TIM15SEL   | (RCC_CCIPR_TIM15SEL >> 16U))   /*!< PLL used as TIM15 clock source */
496 /**
497   * @}
498   */
499 /** @defgroup RCC_LL_EC_LPTIMx_CLKSOURCE Peripheral LPTIM clock source selection
500   * @{
501   */
502 #define LL_RCC_LPTIM1_CLKSOURCE_PCLK1   (RCC_CCIPR_LPTIM1SEL | (0x00000000U >> 16U))           /*!< PCLK selected as LPTIM1 clock */
503 #define LL_RCC_LPTIM1_CLKSOURCE_LSI     (RCC_CCIPR_LPTIM1SEL | (RCC_CCIPR_LPTIM1SEL_0 >> 16U)) /*!< LSI selected as LPTIM1 clock */
504 #define LL_RCC_LPTIM1_CLKSOURCE_HSI     (RCC_CCIPR_LPTIM1SEL | (RCC_CCIPR_LPTIM1SEL_1 >> 16U)) /*!< HSI selected as LPTIM1 clock */
505 #define LL_RCC_LPTIM1_CLKSOURCE_LSE     (RCC_CCIPR_LPTIM1SEL | (RCC_CCIPR_LPTIM1SEL >> 16U))   /*!< LSE selected as LPTIM1 clock */
506 #define LL_RCC_LPTIM2_CLKSOURCE_PCLK1   (RCC_CCIPR_LPTIM2SEL | (0x00000000U >> 16U))           /*!< PCLK selected as LPTIM2 clock */
507 #define LL_RCC_LPTIM2_CLKSOURCE_LSI     (RCC_CCIPR_LPTIM2SEL | (RCC_CCIPR_LPTIM2SEL_0 >> 16U)) /*!< LSI selected as LPTIM2 clock */
508 #define LL_RCC_LPTIM2_CLKSOURCE_HSI     (RCC_CCIPR_LPTIM2SEL | (RCC_CCIPR_LPTIM2SEL_1 >> 16U)) /*!< HSI selected as LPTIM2 clock */
509 #define LL_RCC_LPTIM2_CLKSOURCE_LSE     (RCC_CCIPR_LPTIM2SEL | (RCC_CCIPR_LPTIM2SEL >> 16U))   /*!< LSE selected as LPTIM2 clock */
510 #if defined (LPTIM3)
511 #define LL_RCC_LPTIM3_CLKSOURCE_PCLK1   (RCC_CCIPR_LPTIM3SEL | (0x00000000U >> 16U))           /*!< PCLK selected as LPTIM3 clock */
512 #define LL_RCC_LPTIM3_CLKSOURCE_LSI     (RCC_CCIPR_LPTIM3SEL | (RCC_CCIPR_LPTIM3SEL_0 >> 16U)) /*!< LSI selected as LPTIM3 clock */
513 #define LL_RCC_LPTIM3_CLKSOURCE_HSI     (RCC_CCIPR_LPTIM3SEL | (RCC_CCIPR_LPTIM3SEL_1 >> 16U)) /*!< HSI selected as LPTIM3 clock */
514 #define LL_RCC_LPTIM3_CLKSOURCE_LSE     (RCC_CCIPR_LPTIM3SEL | (RCC_CCIPR_LPTIM3SEL >> 16U))   /*!< LSE selected as LPTIM3 clock */
515 #endif /* LPTIM3 */
516 /**
517   * @}
518   */
519 #if defined(USB_DRD_FS)
520 /** @defgroup RCC_LL_EC_USB_CLKSOURCE  Peripheral USB clock source selection
521   * @{
522   */
523 #define LL_RCC_USB_CLKSOURCE_NONE          0x00000000U          /*!< No clock used as USB clock source */
524 #define LL_RCC_USB_CLKSOURCE_MSI           RCC_CCIPR_CLK48SEL_0 /*!< MSI clock used as USB clock source */
525 #define LL_RCC_USB_CLKSOURCE_PLLQ          RCC_CCIPR_CLK48SEL_1 /*!< PLL clock used as USB clock source */
526 #define LL_RCC_USB_CLKSOURCE_HSI48         RCC_CCIPR_CLK48SEL   /*!< HSI48 clock used as USB clock source */
527 #endif /* USB_DRD_FS */
528 /**
529   * @}
530   */
531 
532 /** @defgroup RCC_LL_EC_RNG_CLKSOURCE  Peripheral RNG clock source selection
533   * @{
534   */
535 #define LL_RCC_RNG_CLKSOURCE_NONE          0x00000000U          /*!< No clock used as RNG clock source */
536 #define LL_RCC_RNG_CLKSOURCE_MSI           RCC_CCIPR_CLK48SEL_0 /*!< MSI clock used as RNG clock source */
537 #define LL_RCC_RNG_CLKSOURCE_PLLQ          RCC_CCIPR_CLK48SEL_1 /*!< PLL clock used as RNG clock source */
538 #if defined(RCC_CRRCR_HSI48ON)
539 #define LL_RCC_RNG_CLKSOURCE_HSI48         RCC_CCIPR_CLK48SEL   /*!< HSI48 clock used as RNG clock source */
540 #endif /* RCC_CRRCR_HSI48ON */
541 /**
542   * @}
543   */
544 
545 /** @defgroup RCC_LL_EC_ADC_CLKSOURCE  Peripheral ADC clock source selection
546   * @{
547   */
548 #define LL_RCC_ADC_CLKSOURCE_SYSCLK        0x00000000U          /*!< SYSCLK clock used as ADC clock source */
549 #define LL_RCC_ADC_CLKSOURCE_PLLP          RCC_CCIPR_ADCSEL_0   /*!< PLL P clock used as ADC clock source */
550 #define LL_RCC_ADC_CLKSOURCE_HSI           RCC_CCIPR_ADCSEL_1   /*!< HSI clock used as ADC clock source */
551 #define LL_RCC_ADC_CLKSOURCE_NONE          RCC_CCIPR_ADCSEL     /*!< No clock used as ADC clock source */
552 
553 /**
554   * @}
555   */
556 
557 /** @defgroup RCC_LL_EC_USART1 Peripheral USART get clock source
558   * @{
559   */
560 #define LL_RCC_USART1_CLKSOURCE            RCC_CCIPR_USART1SEL /*!< USART1 Clock source selection */
561 #define LL_RCC_USART2_CLKSOURCE            RCC_CCIPR_USART2SEL /*!< USART2 Clock source selection */
562 #define LL_RCC_USART3_CLKSOURCE            0x00000000U         /*!< To be used for USART3 Clock frequency retrieval */
563 #define LL_RCC_USART4_CLKSOURCE            0x00000001U         /*!< To be used for USART4 Clock frequency retrieval */
564 /**
565   * @}
566   */
567 
568 /** @defgroup RCC_LL_EC_LPUART1 Peripheral LPUART get clock source
569   * @{
570   */
571 #define LL_RCC_LPUART1_CLKSOURCE           RCC_CCIPR_LPUART1SEL /*!< LPUART1 Clock source selection */
572 #define LL_RCC_LPUART2_CLKSOURCE           RCC_CCIPR_LPUART2SEL /*!< LPUART2 Clock source selection */
573 #if defined (LPUART3)
574 #define LL_RCC_LPUART3_CLKSOURCE           RCC_CCIPR_LPUART3SEL /*!< LPUART3 Clock source selection */
575 #endif /* LPUART3 */
576 /**
577   * @}
578   */
579 
580 /** @defgroup RCC_LL_EC_I2C1 Peripheral I2C get clock source
581   * @{
582   */
583 #define LL_RCC_I2C1_CLKSOURCE              ((RCC_OFFSET_CCIPR << 24U) | (RCC_CCIPR_I2C1SEL_Pos << 16U) | \
584                                             (RCC_CCIPR_I2C1SEL >> RCC_CCIPR_I2C1SEL_Pos))    /*!< I2C1 Clock source selection */
585 #define LL_RCC_I2C3_CLKSOURCE              ((RCC_OFFSET_CCIPR << 24U) | (RCC_CCIPR_I2C3SEL_Pos << 16U) | \
586                                             (RCC_CCIPR_I2C3SEL >> RCC_CCIPR_I2C3SEL_Pos))    /*!< I2C3 Clock source selection */
587 /**
588   * @}
589   */
590 
591 /** @defgroup RCC_LL_EC_TIMx Peripheral TIMx get clock source
592   * @{
593   */
594 #define LL_RCC_TIM1_CLKSOURCE              RCC_CCIPR_TIM1SEL   /*!< TIM1 Clock source selection */
595 #define LL_RCC_TIM15_CLKSOURCE             RCC_CCIPR_TIM15SEL  /*!< TIM15 Clock source selection */
596 /**
597   * @}
598   */
599 
600 /** @defgroup RCC_LL_EC_LPTIM1 Peripheral LPTIM get clock source
601   * @{
602   */
603 #define LL_RCC_LPTIM1_CLKSOURCE            RCC_CCIPR_LPTIM1SEL /*!< LPTIM2 Clock source selection */
604 #define LL_RCC_LPTIM2_CLKSOURCE            RCC_CCIPR_LPTIM2SEL /*!< LPTIM2 Clock source selection */
605 #if defined (LPTIM3)
606 #define LL_RCC_LPTIM3_CLKSOURCE            RCC_CCIPR_LPTIM3SEL /*!< LPTIM2 Clock source selection */
607 #endif /* LPTIM3 */
608 /**
609   * @}
610   */
611 
612 /** @defgroup RCC_LL_EC_RNG  Peripheral RNG get clock source
613   * @{
614   */
615 #define LL_RCC_RNG_CLKSOURCE               RCC_CCIPR_CLK48SEL /*!< RNG Clock source selection */
616 /**
617   * @}
618   */
619 #if defined (USB_DRD_FS)
620 /** @defgroup RCC_LL_EC_USB  Peripheral USB get clock source
621   * @{
622   */
623 #define LL_RCC_USB_CLKSOURCE               RCC_CCIPR_CLK48SEL /*!< USB Clock source selection */
624 #endif /* USB_DRD_FS */
625 /**
626   * @}
627   */
628 
629 /** @defgroup RCC_LL_EC_ADC  Peripheral ADC get clock source
630   * @{
631   */
632 #define LL_RCC_ADC_CLKSOURCE               RCC_CCIPR_ADCSEL /*!< ADC Clock source selection */
633 /**
634   * @}
635   */
636 
637 /** @defgroup RCC_LL_EC_RTC_CLKSOURCE  RTC clock source selection
638   * @{
639   */
640 #define LL_RCC_RTC_CLKSOURCE_NONE          0x00000000U         /*!< No clock used as RTC clock */
641 #define LL_RCC_RTC_CLKSOURCE_LSE           RCC_BDCR_RTCSEL_0   /*!< LSE oscillator clock used as RTC clock */
642 #define LL_RCC_RTC_CLKSOURCE_LSI           RCC_BDCR_RTCSEL_1   /*!< LSI oscillator clock used as RTC clock */
643 #define LL_RCC_RTC_CLKSOURCE_HSE_DIV32     RCC_BDCR_RTCSEL     /*!< HSE oscillator clock divided by 32 used as RTC clock */
644 /**
645   * @}
646   */
647 
648 /** @defgroup RCC_LL_EC_PLLSOURCE  PLL entry clock source
649   * @{
650   */
651 #define LL_RCC_PLLSOURCE_NONE     0UL                                            /*!< No clock selected as main PLL entry clock source */
652 #define LL_RCC_PLLSOURCE_MSI      RCC_PLLCFGR_PLLSRC_0                           /*!< MSI clock selected as main PLL entry clock source */
653 #define LL_RCC_PLLSOURCE_HSI      RCC_PLLCFGR_PLLSRC_1                           /*!< HSI16 clock selected as main PLL entry clock source */
654 #define LL_RCC_PLLSOURCE_HSE      (RCC_PLLCFGR_PLLSRC_1 | RCC_PLLCFGR_PLLSRC_0)  /*!< HSE clock selected as main PLL entry clock source */
655 
656 /**
657   * @}
658   */
659 
660 /** @defgroup RCC_LL_EC_PLLM_DIV  PLL division factor
661   * @{
662   */
663 #define LL_RCC_PLLM_DIV_1       0x00000000U                                  /*!< Main PLL division factor for PLLM input by 1 */
664 #define LL_RCC_PLLM_DIV_2       (RCC_PLLCFGR_PLLM_0)                         /*!< Main PLL division factor for PLLM input by 2 */
665 #define LL_RCC_PLLM_DIV_3       (RCC_PLLCFGR_PLLM_1)                         /*!< Main PLL division factor for PLLM input by 3 */
666 #define LL_RCC_PLLM_DIV_4       (RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0)    /*!< Main PLL division factor for PLLM input by 4 */
667 #define LL_RCC_PLLM_DIV_5       (RCC_PLLCFGR_PLLM_2)                         /*!< Main PLL division factor for PLLM input by 5 */
668 #define LL_RCC_PLLM_DIV_6       (RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0)    /*!< Main PLL division factor for PLLM input by 6 */
669 #define LL_RCC_PLLM_DIV_7       (RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1)    /*!< Main PLL division factor for PLLM input by 7 */
670 #define LL_RCC_PLLM_DIV_8       (RCC_PLLCFGR_PLLM)                           /*!< Main PLL division factor for PLLM input by 8 */
671 /**
672   * @}
673   */
674 
675 /** @defgroup RCC_LL_EC_PLLR_DIV  PLL division factor (PLLR)
676   * @{
677   */
678 #define LL_RCC_PLLR_DIV_2       (RCC_PLLCFGR_PLLR_0)                        /*!< Main PLL division factor for PLLCLK (system clock) by 2 */
679 #define LL_RCC_PLLR_DIV_3       (RCC_PLLCFGR_PLLR_1)                        /*!< Main PLL division factor for PLLCLK (system clock) by 3 */
680 #define LL_RCC_PLLR_DIV_4       (RCC_PLLCFGR_PLLR_1 | RCC_PLLCFGR_PLLR_0)   /*!< Main PLL division factor for PLLCLK (system clock) by 4 */
681 #define LL_RCC_PLLR_DIV_5       (RCC_PLLCFGR_PLLR_2)                        /*!< Main PLL division factor for PLLCLK (system clock) by 5 */
682 #define LL_RCC_PLLR_DIV_6       (RCC_PLLCFGR_PLLR_2 | RCC_PLLCFGR_PLLR_0)   /*!< Main PLL division factor for PLLCLK (system clock) by 6 */
683 #define LL_RCC_PLLR_DIV_7       (RCC_PLLCFGR_PLLR_2 | RCC_PLLCFGR_PLLR_1)   /*!< Main PLL division factor for PLLCLK (system clock) by 7 */
684 #define LL_RCC_PLLR_DIV_8       (RCC_PLLCFGR_PLLR)                          /*!< Main PLL division factor for PLLCLK (system clock) by 8 */
685 /**
686   * @}
687   */
688 
689 /** @defgroup RCC_LL_EC_PLLP_DIV  PLL division factor (PLLP)
690   * @{
691   */
692 #define LL_RCC_PLLP_DIV_2      (RCC_PLLCFGR_PLLP_0)                                              /*!< Main PLL division factor for PLLP output by 2 */
693 #define LL_RCC_PLLP_DIV_3      (RCC_PLLCFGR_PLLP_1)                                              /*!< Main PLL division factor for PLLP output by 3 */
694 #define LL_RCC_PLLP_DIV_4      (RCC_PLLCFGR_PLLP_1|RCC_PLLCFGR_PLLP_0)                        /*!< Main PLL division factor for PLLP output by 4 */
695 #define LL_RCC_PLLP_DIV_5      (RCC_PLLCFGR_PLLP_2)                                              /*!< Main PLL division factor for PLLP output by 5 */
696 #define LL_RCC_PLLP_DIV_6      (RCC_PLLCFGR_PLLP_2|RCC_PLLCFGR_PLLP_0)                        /*!< Main PLL division factor for PLLP output by 6 */
697 #define LL_RCC_PLLP_DIV_7      (RCC_PLLCFGR_PLLP_2|RCC_PLLCFGR_PLLP_1)                        /*!< Main PLL division factor for PLLP output by 7 */
698 #define LL_RCC_PLLP_DIV_8      (RCC_PLLCFGR_PLLP_2|RCC_PLLCFGR_PLLP_1|RCC_PLLCFGR_PLLP_0)  /*!< Main PLL division factor for PLLP output by 8 */
699 #define LL_RCC_PLLP_DIV_9      (RCC_PLLCFGR_PLLP_3)                                              /*!< Main PLL division factor for PLLP output by 9 */
700 #define LL_RCC_PLLP_DIV_10     (RCC_PLLCFGR_PLLP_3|RCC_PLLCFGR_PLLP_0)                        /*!< Main PLL division factor for PLLP output by 10 */
701 #define LL_RCC_PLLP_DIV_11     (RCC_PLLCFGR_PLLP_3|RCC_PLLCFGR_PLLP_1)                        /*!< Main PLL division factor for PLLP output by 11 */
702 #define LL_RCC_PLLP_DIV_12     (RCC_PLLCFGR_PLLP_3|RCC_PLLCFGR_PLLP_1|RCC_PLLCFGR_PLLP_0)  /*!< Main PLL division factor for PLLP output by 12 */
703 #define LL_RCC_PLLP_DIV_13     (RCC_PLLCFGR_PLLP_3|RCC_PLLCFGR_PLLP_2)                        /*!< Main PLL division factor for PLLP output by 13 */
704 #define LL_RCC_PLLP_DIV_14     (RCC_PLLCFGR_PLLP_3|RCC_PLLCFGR_PLLP_2|RCC_PLLCFGR_PLLP_0)  /*!< Main PLL division factor for PLLP output by 14 */
705 #define LL_RCC_PLLP_DIV_15     (RCC_PLLCFGR_PLLP_3|RCC_PLLCFGR_PLLP_2|RCC_PLLCFGR_PLLP_1)  /*!< Main PLL division factor for PLLP output by 15 */
706 #define LL_RCC_PLLP_DIV_16     (RCC_PLLCFGR_PLLP_3|RCC_PLLCFGR_PLLP_2|RCC_PLLCFGR_PLLP_1|RCC_PLLCFGR_PLLP_0) /*!< Main PLL division factor for PLLP output by 16 */
707 #define LL_RCC_PLLP_DIV_17     (RCC_PLLCFGR_PLLP_4)                                              /*!< Main PLL division factor for PLLP output by 17 */
708 #define LL_RCC_PLLP_DIV_18     (RCC_PLLCFGR_PLLP_4|RCC_PLLCFGR_PLLP_0)                        /*!< Main PLL division factor for PLLP output by 18 */
709 #define LL_RCC_PLLP_DIV_19     (RCC_PLLCFGR_PLLP_4|RCC_PLLCFGR_PLLP_1)                        /*!< Main PLL division factor for PLLP output by 19 */
710 #define LL_RCC_PLLP_DIV_20     (RCC_PLLCFGR_PLLP_4|RCC_PLLCFGR_PLLP_1|RCC_PLLCFGR_PLLP_0)  /*!< Main PLL division factor for PLLP output by 20 */
711 #define LL_RCC_PLLP_DIV_21     (RCC_PLLCFGR_PLLP_4|RCC_PLLCFGR_PLLP_2)                        /*!< Main PLL division factor for PLLP output by 21 */
712 #define LL_RCC_PLLP_DIV_22     (RCC_PLLCFGR_PLLP_4|RCC_PLLCFGR_PLLP_2|RCC_PLLCFGR_PLLP_0)  /*!< Main PLL division factor for PLLP output by 22 */
713 #define LL_RCC_PLLP_DIV_23     (RCC_PLLCFGR_PLLP_4|RCC_PLLCFGR_PLLP_2|RCC_PLLCFGR_PLLP_1)  /*!< Main PLL division factor for PLLP output by 23 */
714 #define LL_RCC_PLLP_DIV_24     (RCC_PLLCFGR_PLLP_4|RCC_PLLCFGR_PLLP_2|RCC_PLLCFGR_PLLP_1|RCC_PLLCFGR_PLLP_0) /*!< Main PLL division factor for PLLP output by 24 */
715 #define LL_RCC_PLLP_DIV_25     (RCC_PLLCFGR_PLLP_4|RCC_PLLCFGR_PLLP_3)                        /*!< Main PLL division factor for PLLP output by 25 */
716 #define LL_RCC_PLLP_DIV_26     (RCC_PLLCFGR_PLLP_4|RCC_PLLCFGR_PLLP_3|RCC_PLLCFGR_PLLP_0)  /*!< Main PLL division factor for PLLP output by 26 */
717 #define LL_RCC_PLLP_DIV_27     (RCC_PLLCFGR_PLLP_4|RCC_PLLCFGR_PLLP_3|RCC_PLLCFGR_PLLP_1)  /*!< Main PLL division factor for PLLP output by 27 */
718 #define LL_RCC_PLLP_DIV_28     (RCC_PLLCFGR_PLLP_4|RCC_PLLCFGR_PLLP_3|RCC_PLLCFGR_PLLP_1|RCC_PLLCFGR_PLLP_0) /*!< Main PLL division factor for PLLP output by 28 */
719 #define LL_RCC_PLLP_DIV_29     (RCC_PLLCFGR_PLLP_4|RCC_PLLCFGR_PLLP_3|RCC_PLLCFGR_PLLP_2)  /*!< Main PLL division factor for PLLP output by 29 */
720 #define LL_RCC_PLLP_DIV_30     (RCC_PLLCFGR_PLLP_4|RCC_PLLCFGR_PLLP_3|RCC_PLLCFGR_PLLP_2|RCC_PLLCFGR_PLLP_0) /*!< Main PLL division factor for PLLP output by 30 */
721 #define LL_RCC_PLLP_DIV_31     (RCC_PLLCFGR_PLLP_4|RCC_PLLCFGR_PLLP_3|RCC_PLLCFGR_PLLP_2|RCC_PLLCFGR_PLLP_1) /*!< Main PLL division factor for PLLP output by 31 */
722 #define LL_RCC_PLLP_DIV_32     (RCC_PLLCFGR_PLLP_4|RCC_PLLCFGR_PLLP_3|RCC_PLLCFGR_PLLP_2|RCC_PLLCFGR_PLLP_1| \
723                                 RCC_PLLCFGR_PLLP_0)                                       /*!< Main PLL division factor for PLLP output by 32 */
724 /**
725   * @}
726   */
727 
728 /** @defgroup RCC_LL_EC_PLLQ_DIV  PLL division factor (PLLQ)
729   * @{
730   */
731 #define LL_RCC_PLLQ_DIV_2       (RCC_PLLCFGR_PLLQ_0)    /*!< Main PLL division factor for PLLQ output by 2 */
732 #define LL_RCC_PLLQ_DIV_3       (RCC_PLLCFGR_PLLQ_1)    /*!< Main PLL division factor for PLLQ output by 3 */
733 #define LL_RCC_PLLQ_DIV_4       (RCC_PLLCFGR_PLLQ_1 | RCC_PLLCFGR_PLLQ_0)    /*!< Main PLL division factor for PLLQ output by 4 */
734 #define LL_RCC_PLLQ_DIV_5       (RCC_PLLCFGR_PLLQ_2)    /*!< Main PLL division factor for PLLQ output by 5 */
735 #define LL_RCC_PLLQ_DIV_6       (RCC_PLLCFGR_PLLQ_2 | RCC_PLLCFGR_PLLQ_0)      /*!< Main PLL division factor for PLLQ output by 6 */
736 #define LL_RCC_PLLQ_DIV_7       (RCC_PLLCFGR_PLLQ_2 | RCC_PLLCFGR_PLLQ_1)      /*!< Main PLL division factor for PLLQ output by 7 */
737 #define LL_RCC_PLLQ_DIV_8       (RCC_PLLCFGR_PLLQ_2 | RCC_PLLCFGR_PLLQ_1 | RCC_PLLCFGR_PLLQ_0)      /*!< Main PLL division factor for PLLQ output by 8 */
738 /**
739   * @}
740   */
741 
742 /** @defgroup RCC_LL_EC_MSIRANGESEL  MSI clock range selection
743   * @{
744   */
745 #define LL_RCC_MSIRANGESEL_STANDBY         0U                  /*!< MSI Range is provided by MSISRANGE */
746 #define LL_RCC_MSIRANGESEL_RUN             1U                  /*!< MSI Range is provided by MSIRANGE */
747 /**
748   * @}
749   */
750 
751 /**
752   * @}
753   */
754 
755 /* Exported macro ------------------------------------------------------------*/
756 /** @defgroup RCC_LL_Exported_Macros RCC Exported Macros
757   * @{
758   */
759 
760 /** @defgroup RCC_LL_EM_WRITE_READ Common Write and read registers Macros
761   * @{
762   */
763 
764 /**
765   * @brief  Write a value in RCC register
766   * @param  __REG__ Register to be written
767   * @param  __VALUE__ Value to be written in the register
768   * @retval None
769   */
770 #define LL_RCC_WriteReg(__REG__, __VALUE__) WRITE_REG(RCC->__REG__, (__VALUE__))
771 
772 /**
773   * @brief  Read a value in RCC register
774   * @param  __REG__ Register to be read
775   * @retval Register value
776   */
777 #define LL_RCC_ReadReg(__REG__) READ_REG(RCC->__REG__)
778 /**
779   * @}
780   */
781 
782 /** @defgroup RCC_LL_EM_CALC_FREQ Calculate frequencies
783   * @{
784   */
785 
786 /**
787   * @brief  Helper macro to calculate the PLLCLK frequency on system domain
788   * @note ex: @ref __LL_RCC_CALC_PLLCLK_R_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetM (),
789   *             @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetR ());
790   * @param  __INPUTFREQ__ PLL Input frequency (based on MSI/HSE/HSI)
791   * @param  __PLLM__ This parameter can be one of the following values:
792   *         @arg @ref LL_RCC_PLLM_DIV_1
793   *         @arg @ref LL_RCC_PLLM_DIV_2
794   *         @arg @ref LL_RCC_PLLM_DIV_3
795   *         @arg @ref LL_RCC_PLLM_DIV_4
796   *         @arg @ref LL_RCC_PLLM_DIV_5
797   *         @arg @ref LL_RCC_PLLM_DIV_6
798   *         @arg @ref LL_RCC_PLLM_DIV_7
799   *         @arg @ref LL_RCC_PLLM_DIV_8
800   *
801   * @param  __PLLN__ Between 4 and 127
802   * @param  __PLLR__ This parameter can be one of the following values:
803   *         @arg @ref LL_RCC_PLLR_DIV_2
804   *         @arg @ref LL_RCC_PLLR_DIV_3
805   *         @arg @ref LL_RCC_PLLR_DIV_4
806   *         @arg @ref LL_RCC_PLLR_DIV_5
807   *         @arg @ref LL_RCC_PLLR_DIV_6
808   *         @arg @ref LL_RCC_PLLR_DIV_7
809   *         @arg @ref LL_RCC_PLLR_DIV_8
810   * @retval PLL clock frequency (in Hz)
811   */
812 #define __LL_RCC_CALC_PLLCLK_R_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLR__) \
813   ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_PLLCFGR_PLLM_Pos) + 1U)) * (__PLLN__) / \
814    (((__PLLR__)>> RCC_PLLCFGR_PLLR_Pos) + 1U))
815 
816 /**
817   * @brief  Helper macro to calculate the PLLCLK frequency used on 48M domain
818   * @note ex: @ref __LL_RCC_CALC_PLLCLK_Q_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetM (),
819   *             @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetQ ());
820   * @param  __INPUTFREQ__ PLL Input frequency (based on MSI/HSE/HSI)
821   * @param  __PLLM__ This parameter can be one of the following values:
822   *         @arg @ref LL_RCC_PLLM_DIV_1
823   *         @arg @ref LL_RCC_PLLM_DIV_2
824   *         @arg @ref LL_RCC_PLLM_DIV_3
825   *         @arg @ref LL_RCC_PLLM_DIV_4
826   *         @arg @ref LL_RCC_PLLM_DIV_5
827   *         @arg @ref LL_RCC_PLLM_DIV_6
828   *         @arg @ref LL_RCC_PLLM_DIV_7
829   *         @arg @ref LL_RCC_PLLM_DIV_8
830   *
831   * @param  __PLLN__ Between 4 and 127
832   * @param  __PLLQ__ This parameter can be one of the following values:
833   *         @arg @ref LL_RCC_PLLQ_DIV_2
834   *         @arg @ref LL_RCC_PLLR_DIV_3
835   *         @arg @ref LL_RCC_PLLQ_DIV_4
836   *         @arg @ref LL_RCC_PLLR_DIV_5
837   *         @arg @ref LL_RCC_PLLQ_DIV_6
838   *         @arg @ref LL_RCC_PLLR_DIV_7
839   *         @arg @ref LL_RCC_PLLQ_DIV_8
840   * @retval PLL clock frequency (in Hz)
841   */
842 #define __LL_RCC_CALC_PLLCLK_Q_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLQ__) ((((__INPUTFREQ__) \
843     /(((__PLLM__)>> RCC_PLLCFGR_PLLM_Pos) +1UL))) * (__PLLN__)) / (((__PLLQ__)>> RCC_PLLCFGR_PLLQ_Pos) + 1UL)
844 
845 /**
846   * @brief  Helper macro to calculate the HCLK frequency
847   * @param  __SYSCLKFREQ__ SYSCLK frequency (based on MSI/HSE/HSI/PLLCLK)
848   * @param  __AHBPRESCALER__ This parameter can be one of the following values:
849   *         @arg @ref LL_RCC_SYSCLK_DIV_1
850   *         @arg @ref LL_RCC_SYSCLK_DIV_2
851   *         @arg @ref LL_RCC_SYSCLK_DIV_4
852   *         @arg @ref LL_RCC_SYSCLK_DIV_8
853   *         @arg @ref LL_RCC_SYSCLK_DIV_16
854   *         @arg @ref LL_RCC_SYSCLK_DIV_64
855   *         @arg @ref LL_RCC_SYSCLK_DIV_128
856   *         @arg @ref LL_RCC_SYSCLK_DIV_256
857   *         @arg @ref LL_RCC_SYSCLK_DIV_512
858   * @retval HCLK clock frequency (in Hz)
859   */
860 #define __LL_RCC_CALC_HCLK_FREQ(__SYSCLKFREQ__, __AHBPRESCALER__) \
861   ((__SYSCLKFREQ__) >> AHBPrescTable[((__AHBPRESCALER__) & \
862                                       RCC_CFGR_HPRE) >>  RCC_CFGR_HPRE_Pos])
863 
864 /**
865   * @brief  Helper macro to calculate the PCLK frequency (APB)
866   * @param  __HCLKFREQ__ HCLK frequency
867   * @param  __APBPRESCALER__ This parameter can be one of the following values:
868   *         @arg @ref LL_RCC_APB1_DIV_1
869   *         @arg @ref LL_RCC_APB1_DIV_2
870   *         @arg @ref LL_RCC_APB1_DIV_4
871   *         @arg @ref LL_RCC_APB1_DIV_8
872   *         @arg @ref LL_RCC_APB1_DIV_16
873   * @retval PCLK1 clock frequency (in Hz)
874   */
875 #define __LL_RCC_CALC_PCLK1_FREQ(__HCLKFREQ__, __APBPRESCALER__) \
876   ((__HCLKFREQ__) >> APBPrescTable[(__APBPRESCALER__) >>  RCC_CFGR_PPRE_Pos])
877 
878 /**
879   * @brief  Helper macro to calculate the MSI frequency (in Hz)
880   * @note __MSISEL__ can be retrieved thanks to function LL_RCC_MSI_IsEnabledRangeSelect()
881   * @note if __MSISEL__ is equal to LL_RCC_MSIRANGESEL_STANDBY,
882   *        __MSIRANGE__can be retrieved by LL_RCC_MSI_GetRangeAfterStandby()
883   *        else by LL_RCC_MSI_GetRange()
884   *        ex: __LL_RCC_CALC_MSI_FREQ(LL_RCC_MSI_IsEnabledRangeSelect(),
885   *              (LL_RCC_MSI_IsEnabledRangeSelect()?
886   *               LL_RCC_MSI_GetRange():
887   *               LL_RCC_MSI_GetRangeAfterStandby()))
888   * @param  __MSISEL__ This parameter can be one of the following values:
889   *         @arg @ref LL_RCC_MSIRANGESEL_STANDBY
890   *         @arg @ref LL_RCC_MSIRANGESEL_RUN
891   * @param  __MSIRANGE__ This parameter can be one of the following values:
892   *         @arg @ref LL_RCC_MSIRANGE_0
893   *         @arg @ref LL_RCC_MSIRANGE_1
894   *         @arg @ref LL_RCC_MSIRANGE_2
895   *         @arg @ref LL_RCC_MSIRANGE_3
896   *         @arg @ref LL_RCC_MSIRANGE_4
897   *         @arg @ref LL_RCC_MSIRANGE_5
898   *         @arg @ref LL_RCC_MSIRANGE_6
899   *         @arg @ref LL_RCC_MSIRANGE_7
900   *         @arg @ref LL_RCC_MSIRANGE_8
901   *         @arg @ref LL_RCC_MSIRANGE_9
902   *         @arg @ref LL_RCC_MSIRANGE_10
903   *         @arg @ref LL_RCC_MSIRANGE_11
904   *         @arg @ref LL_RCC_MSISRANGE_4
905   *         @arg @ref LL_RCC_MSISRANGE_5
906   *         @arg @ref LL_RCC_MSISRANGE_6
907   *         @arg @ref LL_RCC_MSISRANGE_7
908   * @retval MSI clock frequency (in Hz)
909   */
910 #define __LL_RCC_CALC_MSI_FREQ(__MSISEL__, __MSIRANGE__)   (((__MSISEL__) == LL_RCC_MSIRANGESEL_STANDBY) ? \
911                                                             (MSIRangeTable[(__MSIRANGE__) >> 8U]) : \
912                                                             (MSIRangeTable[(__MSIRANGE__) >> 4U]))
913 
914 /**
915   * @brief  Helper macro to calculate the PLLPCLK frequency used on P domain
916   * @note ex: @ref __LL_RCC_CALC_PLLCLK_P_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetM (),
917   *             @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetP ());
918   * @param  __INPUTFREQ__ PLL Input frequency (based on HSE/HSI)
919   * @param  __PLLM__ This parameter can be one of the following values:
920   *         @arg @ref LL_RCC_PLLM_DIV_1
921   *         @arg @ref LL_RCC_PLLM_DIV_2
922   *         @arg @ref LL_RCC_PLLM_DIV_3
923   *         @arg @ref LL_RCC_PLLM_DIV_4
924   *         @arg @ref LL_RCC_PLLM_DIV_5
925   *         @arg @ref LL_RCC_PLLM_DIV_6
926   *         @arg @ref LL_RCC_PLLM_DIV_7
927   *         @arg @ref LL_RCC_PLLM_DIV_8
928   * @param  __PLLN__ Between Min_Data = 4 and Max_Data = 127
929   * @param  __PLLP__ This parameter can be one of the following values:
930   *         @arg @ref LL_RCC_PLLP_DIV_2
931   *         @arg @ref LL_RCC_PLLP_DIV_3
932   *         @arg @ref LL_RCC_PLLP_DIV_4
933   *         @arg @ref LL_RCC_PLLP_DIV_5
934   *         @arg @ref LL_RCC_PLLP_DIV_6
935   *         @arg @ref LL_RCC_PLLP_DIV_7
936   *         @arg @ref LL_RCC_PLLP_DIV_8
937   *         @arg @ref LL_RCC_PLLP_DIV_9
938   *         @arg @ref LL_RCC_PLLP_DIV_10
939   *         @arg @ref LL_RCC_PLLP_DIV_11
940   *         @arg @ref LL_RCC_PLLP_DIV_12
941   *         @arg @ref LL_RCC_PLLP_DIV_13
942   *         @arg @ref LL_RCC_PLLP_DIV_14
943   *         @arg @ref LL_RCC_PLLP_DIV_15
944   *         @arg @ref LL_RCC_PLLP_DIV_16
945   *         @arg @ref LL_RCC_PLLP_DIV_17
946   *         @arg @ref LL_RCC_PLLP_DIV_18
947   *         @arg @ref LL_RCC_PLLP_DIV_19
948   *         @arg @ref LL_RCC_PLLP_DIV_20
949   *         @arg @ref LL_RCC_PLLP_DIV_21
950   *         @arg @ref LL_RCC_PLLP_DIV_22
951   *         @arg @ref LL_RCC_PLLP_DIV_23
952   *         @arg @ref LL_RCC_PLLP_DIV_24
953   *         @arg @ref LL_RCC_PLLP_DIV_25
954   *         @arg @ref LL_RCC_PLLP_DIV_26
955   *         @arg @ref LL_RCC_PLLP_DIV_27
956   *         @arg @ref LL_RCC_PLLP_DIV_28
957   *         @arg @ref LL_RCC_PLLP_DIV_29
958   *         @arg @ref LL_RCC_PLLP_DIV_30
959   *         @arg @ref LL_RCC_PLLP_DIV_31
960   *         @arg @ref LL_RCC_PLLP_DIV_32
961   * @retval PLL clock frequency (in Hz)
962   */
963 #define __LL_RCC_CALC_PLLCLK_P_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLP__)  \
964   ((__INPUTFREQ__) * (__PLLN__) / ((((__PLLM__)>> RCC_PLLCFGR_PLLM_Pos) + 1U)) /    \
965    (((__PLLP__) >> RCC_PLLCFGR_PLLP_Pos) + 1U))
966 /**
967   * @}
968   */
969 
970 /**
971   * @}
972   */
973 
974 /* Exported functions --------------------------------------------------------*/
975 /** @defgroup RCC_LL_Exported_Functions RCC Exported Functions
976   * @{
977   */
978 
979 /** @defgroup RCC_LL_EF_HSE HSE
980   * @{
981   */
982 
983 /**
984   * @brief  Enable the Clock Security System.
985   * @rmtoll CR           CSSON         LL_RCC_EnableCSS
986   * @retval None
987   */
LL_RCC_EnableCSS(void)988 __STATIC_INLINE void LL_RCC_EnableCSS(void)
989 {
990   SET_BIT(RCC->CR, RCC_CR_CSSON);
991 }
992 
993 /**
994   * @brief  Disable the Clock Security System.
995   * @rmtoll CR           CSSON         LL_RCC_DisableCSS
996   * @retval None
997   */
LL_RCC_DisableCSS(void)998 __STATIC_INLINE void LL_RCC_DisableCSS(void)
999 {
1000   CLEAR_BIT(RCC->CR, RCC_CR_CSSON);
1001 }
1002 
1003 /**
1004   * @brief  Enable HSE external oscillator (HSE Bypass)
1005   * @rmtoll CR           HSEBYP        LL_RCC_HSE_EnableBypass
1006   * @retval None
1007   */
LL_RCC_HSE_EnableBypass(void)1008 __STATIC_INLINE void LL_RCC_HSE_EnableBypass(void)
1009 {
1010   SET_BIT(RCC->CR, RCC_CR_HSEBYP);
1011 }
1012 
1013 /**
1014   * @brief  Disable HSE external oscillator (HSE Bypass)
1015   * @rmtoll CR           HSEBYP        LL_RCC_HSE_DisableBypass
1016   * @retval None
1017   */
LL_RCC_HSE_DisableBypass(void)1018 __STATIC_INLINE void LL_RCC_HSE_DisableBypass(void)
1019 {
1020   CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);
1021 }
1022 
1023 /**
1024   * @brief  Enable HSE crystal oscillator (HSE ON)
1025   * @rmtoll CR           HSEON         LL_RCC_HSE_Enable
1026   * @retval None
1027   */
LL_RCC_HSE_Enable(void)1028 __STATIC_INLINE void LL_RCC_HSE_Enable(void)
1029 {
1030   SET_BIT(RCC->CR, RCC_CR_HSEON);
1031 }
1032 
1033 /**
1034   * @brief  Disable HSE crystal oscillator (HSE ON)
1035   * @rmtoll CR           HSEON         LL_RCC_HSE_Disable
1036   * @retval None
1037   */
LL_RCC_HSE_Disable(void)1038 __STATIC_INLINE void LL_RCC_HSE_Disable(void)
1039 {
1040   CLEAR_BIT(RCC->CR, RCC_CR_HSEON);
1041 }
1042 
1043 /**
1044   * @brief  Check if HSE oscillator Ready
1045   * @rmtoll CR           HSERDY        LL_RCC_HSE_IsReady
1046   * @retval State of bit (1 or 0).
1047   */
LL_RCC_HSE_IsReady(void)1048 __STATIC_INLINE uint32_t LL_RCC_HSE_IsReady(void)
1049 {
1050   return (READ_BIT(RCC->CR, RCC_CR_HSERDY) == (RCC_CR_HSERDY));
1051 }
1052 
1053 /**
1054   * @}
1055   */
1056 
1057 /** @defgroup RCC_LL_EF_HSI HSI
1058   * @{
1059   */
1060 
1061 /**
1062   * @brief  Enable HSI even in stop mode
1063   * @note HSI oscillator is forced ON even in Stop mode
1064   * @rmtoll CR           HSIKERON      LL_RCC_HSI_EnableInStopMode
1065   * @retval None
1066   */
LL_RCC_HSI_EnableInStopMode(void)1067 __STATIC_INLINE void LL_RCC_HSI_EnableInStopMode(void)
1068 {
1069   SET_BIT(RCC->CR, RCC_CR_HSIKERON);
1070 }
1071 
1072 /**
1073   * @brief  Disable HSI in stop mode
1074   * @rmtoll CR           HSIKERON      LL_RCC_HSI_DisableInStopMode
1075   * @retval None
1076   */
LL_RCC_HSI_DisableInStopMode(void)1077 __STATIC_INLINE void LL_RCC_HSI_DisableInStopMode(void)
1078 {
1079   CLEAR_BIT(RCC->CR, RCC_CR_HSIKERON);
1080 }
1081 
1082 /**
1083   * @brief  IsEnabled HSI in stop mode
1084   * @rmtoll CR           HSIKERON      LL_RCC_HSI_IsEnabledInStopMode
1085   * @retval State of bit (1 or 0).
1086   */
LL_RCC_HSI_IsEnabledInStopMode(void)1087 __STATIC_INLINE uint32_t LL_RCC_HSI_IsEnabledInStopMode(void)
1088 {
1089   return (READ_BIT(RCC->CR, RCC_CR_HSIKERON) == (RCC_CR_HSIKERON));
1090 }
1091 
1092 /**
1093   * @brief  Enable HSI oscillator
1094   * @rmtoll CR           HSION         LL_RCC_HSI_Enable
1095   * @retval None
1096   */
LL_RCC_HSI_Enable(void)1097 __STATIC_INLINE void LL_RCC_HSI_Enable(void)
1098 {
1099   SET_BIT(RCC->CR, RCC_CR_HSION);
1100 }
1101 
1102 /**
1103   * @brief  Disable HSI oscillator
1104   * @rmtoll CR           HSION         LL_RCC_HSI_Disable
1105   * @retval None
1106   */
LL_RCC_HSI_Disable(void)1107 __STATIC_INLINE void LL_RCC_HSI_Disable(void)
1108 {
1109   CLEAR_BIT(RCC->CR, RCC_CR_HSION);
1110 }
1111 
1112 /**
1113   * @brief  Check if HSI clock is ready
1114   * @rmtoll CR           HSIRDY        LL_RCC_HSI_IsReady
1115   * @retval State of bit (1 or 0).
1116   */
LL_RCC_HSI_IsReady(void)1117 __STATIC_INLINE uint32_t LL_RCC_HSI_IsReady(void)
1118 {
1119   return (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == (RCC_CR_HSIRDY));
1120 }
1121 
1122 /**
1123   * @brief  Enable HSI oscillator in auto start from stop mode
1124   * @rmtoll CR           HSIASFS         LL_RCC_HSI_EnableAutoFromStop
1125   * @retval None
1126   */
LL_RCC_HSI_EnableAutoFromStop(void)1127 __STATIC_INLINE void LL_RCC_HSI_EnableAutoFromStop(void)
1128 {
1129   SET_BIT(RCC->CR, RCC_CR_HSIASFS);
1130 }
1131 
1132 /**
1133   * @brief  Disable HSI oscillator in auto start from stop mode
1134   * @rmtoll CR           HSIASFS         LL_RCC_HSI_DisableAutoFromStop
1135   * @retval None
1136   */
LL_RCC_HSI_DisableAutoFromStop(void)1137 __STATIC_INLINE void LL_RCC_HSI_DisableAutoFromStop(void)
1138 {
1139   CLEAR_BIT(RCC->CR, RCC_CR_HSIASFS);
1140 }
1141 
1142 /**
1143   * @brief  Check if HSI is enabled in auto start from stop mode
1144   * @rmtoll CR           HSIASFS        LL_RCC_HSI_IsEnabledInAutoFromStop
1145   * @retval State of bit (1 or 0).
1146   */
LL_RCC_HSI_IsEnabledInAutoFromStop(void)1147 __STATIC_INLINE uint32_t LL_RCC_HSI_IsEnabledInAutoFromStop(void)
1148 {
1149   return ((READ_BIT(RCC->CR, RCC_CR_HSIASFS) == RCC_CR_HSIASFS) ? 1U : 0U);
1150 }
1151 
1152 /**
1153   * @brief  Get HSI Calibration value
1154   * @note When HSITRIM is written, HSICAL is updated with the sum of
1155   *       HSITRIM and the factory trim value
1156   * @rmtoll ICSCR        HSICAL        LL_RCC_HSI_GetCalibration
1157   * @retval Between Min_Data = 0x00 and Max_Data = 0xFF
1158   */
LL_RCC_HSI_GetCalibration(void)1159 __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibration(void)
1160 {
1161   return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_HSICAL) >> RCC_ICSCR_HSICAL_Pos);
1162 }
1163 
1164 /**
1165   * @brief  Set HSI Calibration trimming
1166   * @note user-programmable trimming value that is added to the HSICAL
1167   * @note Default value is 16, which, when added to the HSICAL value,
1168   *       should trim the HSI to 16 MHz +/- 1 %
1169   * @rmtoll ICSCR        HSITRIM       LL_RCC_HSI_SetCalibTrimming
1170   * @param  Value Between Min_Data = 0 and Max_Data = 31
1171   * @retval None
1172   */
LL_RCC_HSI_SetCalibTrimming(uint32_t Value)1173 __STATIC_INLINE void LL_RCC_HSI_SetCalibTrimming(uint32_t Value)
1174 {
1175   MODIFY_REG(RCC->ICSCR, RCC_ICSCR_HSITRIM, Value << RCC_ICSCR_HSITRIM_Pos);
1176 }
1177 
1178 /**
1179   * @brief  Get HSI Calibration trimming
1180   * @rmtoll ICSCR        HSITRIM       LL_RCC_HSI_GetCalibTrimming
1181   * @retval Between Min_Data = 0 and Max_Data = 31
1182   */
LL_RCC_HSI_GetCalibTrimming(void)1183 __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibTrimming(void)
1184 {
1185   return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_HSITRIM) >> RCC_ICSCR_HSITRIM_Pos);
1186 }
1187 
1188 /**
1189   * @}
1190   */
1191 
1192 /** @defgroup RCC_LL_EF_LSE LSE
1193   * @{
1194   */
1195 
1196 /**
1197   * @brief  Enable  Low Speed External (LSE) crystal.
1198   * @rmtoll BDCR         LSEON         LL_RCC_LSE_Enable
1199   * @retval None
1200   */
LL_RCC_LSE_Enable(void)1201 __STATIC_INLINE void LL_RCC_LSE_Enable(void)
1202 {
1203   SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);
1204 }
1205 
1206 /**
1207   * @brief  Disable  Low Speed External (LSE) crystal.
1208   * @rmtoll BDCR         LSEON         LL_RCC_LSE_Disable
1209   * @retval None
1210   */
LL_RCC_LSE_Disable(void)1211 __STATIC_INLINE void LL_RCC_LSE_Disable(void)
1212 {
1213   CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);
1214 }
1215 
1216 /**
1217   * @brief  Enable LSE oscillator propagation for system clock
1218   * @rmtoll BDCR         LSESYSEN      LL_RCC_LSE_EnablePropagation
1219   * @retval None
1220   */
LL_RCC_LSE_EnablePropagation(void)1221 __STATIC_INLINE void LL_RCC_LSE_EnablePropagation(void)
1222 {
1223   SET_BIT(RCC->BDCR, RCC_BDCR_LSESYSEN);
1224 }
1225 
1226 /**
1227   * @brief  Disable LSE oscillator propagation for system clock
1228   * @rmtoll BDCR         LSESYSEN      LL_RCC_LSE_DisablePropagation
1229   * @retval None
1230   */
LL_RCC_LSE_DisablePropagation(void)1231 __STATIC_INLINE void LL_RCC_LSE_DisablePropagation(void)
1232 {
1233   CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSESYSEN);
1234 }
1235 
1236 /**
1237   * @brief  Enable external clock source (LSE bypass).
1238   * @rmtoll BDCR         LSEBYP        LL_RCC_LSE_EnableBypass
1239   * @retval None
1240   */
LL_RCC_LSE_EnableBypass(void)1241 __STATIC_INLINE void LL_RCC_LSE_EnableBypass(void)
1242 {
1243   SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
1244 }
1245 
1246 /**
1247   * @brief  Disable external clock source (LSE bypass).
1248   * @rmtoll BDCR         LSEBYP        LL_RCC_LSE_DisableBypass
1249   * @retval None
1250   */
LL_RCC_LSE_DisableBypass(void)1251 __STATIC_INLINE void LL_RCC_LSE_DisableBypass(void)
1252 {
1253   CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
1254 }
1255 
1256 /**
1257   * @brief  Set LSE oscillator drive capability
1258   * @note The oscillator is in Xtal mode when it is not in bypass mode.
1259   * @rmtoll BDCR         LSEDRV        LL_RCC_LSE_SetDriveCapability
1260   * @param  LSEDrive This parameter can be one of the following values:
1261   *         @arg @ref LL_RCC_LSEDRIVE_LOW
1262   *         @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW
1263   *         @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH
1264   *         @arg @ref LL_RCC_LSEDRIVE_HIGH
1265   * @retval None
1266   */
LL_RCC_LSE_SetDriveCapability(uint32_t LSEDrive)1267 __STATIC_INLINE void LL_RCC_LSE_SetDriveCapability(uint32_t LSEDrive)
1268 {
1269   MODIFY_REG(RCC->BDCR, RCC_BDCR_LSEDRV, LSEDrive);
1270 }
1271 
1272 /**
1273   * @brief  Get LSE oscillator drive capability
1274   * @rmtoll BDCR         LSEDRV        LL_RCC_LSE_GetDriveCapability
1275   * @retval Returned value can be one of the following values:
1276   *         @arg @ref LL_RCC_LSEDRIVE_LOW
1277   *         @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW
1278   *         @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH
1279   *         @arg @ref LL_RCC_LSEDRIVE_HIGH
1280   */
LL_RCC_LSE_GetDriveCapability(void)1281 __STATIC_INLINE uint32_t LL_RCC_LSE_GetDriveCapability(void)
1282 {
1283   return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_LSEDRV));
1284 }
1285 
1286 /**
1287   * @brief  Enable Clock security system on LSE.
1288   * @rmtoll BDCR         LSECSSON      LL_RCC_LSE_EnableCSS
1289   * @retval None
1290   */
LL_RCC_LSE_EnableCSS(void)1291 __STATIC_INLINE void LL_RCC_LSE_EnableCSS(void)
1292 {
1293   SET_BIT(RCC->BDCR, RCC_BDCR_LSECSSON);
1294 }
1295 
1296 /**
1297   * @brief  Disable Clock security system on LSE.
1298   * @note Clock security system can be disabled only after a LSE
1299   *       failure detection. In that case it MUST be disabled by software.
1300   * @rmtoll BDCR         LSECSSON      LL_RCC_LSE_DisableCSS
1301   * @retval None
1302   */
LL_RCC_LSE_DisableCSS(void)1303 __STATIC_INLINE void LL_RCC_LSE_DisableCSS(void)
1304 {
1305   CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSECSSON);
1306 }
1307 
1308 /**
1309   * @brief  Check if LSE oscillator Ready
1310   * @rmtoll BDCR         LSERDY        LL_RCC_LSE_IsReady
1311   * @retval State of bit (1 or 0).
1312   */
LL_RCC_LSE_IsReady(void)1313 __STATIC_INLINE uint32_t LL_RCC_LSE_IsReady(void)
1314 {
1315   return (READ_BIT(RCC->BDCR, RCC_BDCR_LSERDY) == (RCC_BDCR_LSERDY));
1316 }
1317 
1318 /**
1319   * @brief  Check if LSE oscillator propagation for system clock Ready
1320   * @rmtoll BDCR         LSESYSRDY     LL_RCC_LSE_IsPropagationReady
1321   * @retval State of bit (1 or 0).
1322   */
LL_RCC_LSE_IsPropagationReady(void)1323 __STATIC_INLINE uint32_t LL_RCC_LSE_IsPropagationReady(void)
1324 {
1325   return ((READ_BIT(RCC->BDCR, RCC_BDCR_LSESYSRDY) == RCC_BDCR_LSESYSRDY));
1326 }
1327 
1328 /**
1329   * @brief  Check if CSS on LSE failure Detection
1330   * @rmtoll BDCR         LSECSSD       LL_RCC_LSE_IsCSSDetected
1331   * @retval State of bit (1 or 0).
1332   */
LL_RCC_LSE_IsCSSDetected(void)1333 __STATIC_INLINE uint32_t LL_RCC_LSE_IsCSSDetected(void)
1334 {
1335   return (READ_BIT(RCC->BDCR, RCC_BDCR_LSECSSD) == (RCC_BDCR_LSECSSD));
1336 }
1337 
1338 /**
1339   * @}
1340   */
1341 
1342 /** @defgroup RCC_LL_EF_LSI LSI
1343   * @{
1344   */
1345 
1346 /**
1347   * @brief  Enable LSI Oscillator
1348   * @rmtoll CSR          LSION         LL_RCC_LSI_Enable
1349   * @retval None
1350   */
LL_RCC_LSI_Enable(void)1351 __STATIC_INLINE void LL_RCC_LSI_Enable(void)
1352 {
1353   SET_BIT(RCC->CSR, RCC_CSR_LSION);
1354 }
1355 
1356 /**
1357   * @brief  Disable LSI Oscillator
1358   * @rmtoll CSR          LSION         LL_RCC_LSI_Disable
1359   * @retval None
1360   */
LL_RCC_LSI_Disable(void)1361 __STATIC_INLINE void LL_RCC_LSI_Disable(void)
1362 {
1363   CLEAR_BIT(RCC->CSR, RCC_CSR_LSION);
1364 }
1365 
1366 /**
1367   * @brief  Check if LSI is Ready
1368   * @rmtoll CSR          LSIRDY        LL_RCC_LSI_IsReady
1369   * @retval State of bit (1 or 0).
1370   */
LL_RCC_LSI_IsReady(void)1371 __STATIC_INLINE uint32_t LL_RCC_LSI_IsReady(void)
1372 {
1373   return (READ_BIT(RCC->CSR, RCC_CSR_LSIRDY) == (RCC_CSR_LSIRDY));
1374 }
1375 /**
1376   * @brief  Set LSI prescaler
1377   * @rmtoll CSR          LSIPRE        LL_RCC_LSI_SetPrescaler
1378   * @param  LSIPrescaler This parameter can be one of the following values:
1379   *         @arg @ref LL_RCC_LSI_DIV_1
1380   *         @arg @ref LL_RCC_LSI_DIV_128
1381   * @retval None
1382   */
LL_RCC_LSI_SetPrescaler(uint32_t LSIPrescaler)1383 __STATIC_INLINE void LL_RCC_LSI_SetPrescaler(uint32_t LSIPrescaler)
1384 {
1385   MODIFY_REG(RCC->CSR, RCC_CSR_LSIPREDIV, LSIPrescaler);
1386 }
1387 
1388 /**
1389   * @brief  Get LSI prescaler
1390   * @rmtoll CSR          LSIPRE        LL_RCC_LSI_GetPrescaler
1391   * @retval Returned value can be one of the following values:
1392   *         @arg @ref LL_RCC_LSI_DIV_1
1393   *         @arg @ref LL_RCC_LSI_DIV_128
1394   */
LL_RCC_LSI_GetPrescaler(void)1395 __STATIC_INLINE uint32_t LL_RCC_LSI_GetPrescaler(void)
1396 {
1397   return (READ_BIT(RCC->CSR, RCC_CSR_LSIPREDIV));
1398 }
1399 
1400 /**
1401   * @}
1402   */
1403 /**
1404   * @}
1405   */
1406 
1407 /** @defgroup RCC_LL_EF_MSI MSI
1408   * @{
1409   */
1410 
1411 /**
1412   * @brief  Enable MSI oscillator
1413   * @rmtoll CR           MSION         LL_RCC_MSI_Enable
1414   * @retval None
1415   */
LL_RCC_MSI_Enable(void)1416 __STATIC_INLINE void LL_RCC_MSI_Enable(void)
1417 {
1418   SET_BIT(RCC->CR, RCC_CR_MSION);
1419 }
1420 
1421 /**
1422   * @brief  Disable MSI oscillator
1423   * @rmtoll CR           MSION         LL_RCC_MSI_Disable
1424   * @retval None
1425   */
LL_RCC_MSI_Disable(void)1426 __STATIC_INLINE void LL_RCC_MSI_Disable(void)
1427 {
1428   CLEAR_BIT(RCC->CR, RCC_CR_MSION);
1429 }
1430 
1431 /**
1432   * @brief  Check if MSI oscillator Ready
1433   * @rmtoll CR           MSIRDY        LL_RCC_MSI_IsReady
1434   * @retval State of bit (1 or 0).
1435   */
LL_RCC_MSI_IsReady(void)1436 __STATIC_INLINE uint32_t LL_RCC_MSI_IsReady(void)
1437 {
1438   return (READ_BIT(RCC->CR, RCC_CR_MSIRDY) == (RCC_CR_MSIRDY));
1439 }
1440 
1441 /**
1442   * @brief  Enable MSI PLL-mode (Hardware auto calibration with LSE)
1443   * @note MSIPLLEN must be enabled after LSE is enabled (LSEON enabled)
1444   *       and ready (LSERDY set by hardware)
1445   * @note hardware protection to avoid enabling MSIPLLEN if LSE is not
1446   *       ready
1447   * @rmtoll CR           MSIPLLEN      LL_RCC_MSI_EnablePLLMode
1448   * @retval None
1449   */
LL_RCC_MSI_EnablePLLMode(void)1450 __STATIC_INLINE void LL_RCC_MSI_EnablePLLMode(void)
1451 {
1452   SET_BIT(RCC->CR, RCC_CR_MSIPLLEN);
1453 }
1454 
1455 /**
1456   * @brief  Disable MSI-PLL mode
1457   * @note cleared by hardware when LSE is disabled (LSEON = 0) or when
1458   *       the Clock Security System on LSE detects a LSE failure
1459   * @rmtoll CR           MSIPLLEN      LL_RCC_MSI_DisablePLLMode
1460   * @retval None
1461   */
LL_RCC_MSI_DisablePLLMode(void)1462 __STATIC_INLINE void LL_RCC_MSI_DisablePLLMode(void)
1463 {
1464   CLEAR_BIT(RCC->CR, RCC_CR_MSIPLLEN);
1465 }
1466 
1467 /**
1468   * @brief  Enable MSI clock range selection with MSIRANGE register
1469   * @note Write 0 has no effect. After a standby or a reset
1470   *       MSIRGSEL is at 0 and the MSI range value is provided by
1471   *       MSISRANGE
1472   * @rmtoll CR           MSIRGSEL      LL_RCC_MSI_EnableRangeSelection
1473   * @retval None
1474   */
LL_RCC_MSI_EnableRangeSelection(void)1475 __STATIC_INLINE void LL_RCC_MSI_EnableRangeSelection(void)
1476 {
1477   SET_BIT(RCC->CR, RCC_CR_MSIRGSEL);
1478 }
1479 
1480 /**
1481   * @brief  Check if MSI clock range is selected with MSIRANGE register
1482   * @rmtoll CR           MSIRGSEL      LL_RCC_MSI_IsEnabledRangeSelect
1483   * @retval State of bit (1 or 0).
1484   */
LL_RCC_MSI_IsEnabledRangeSelect(void)1485 __STATIC_INLINE uint32_t LL_RCC_MSI_IsEnabledRangeSelect(void)
1486 {
1487   return (READ_BIT(RCC->CR, RCC_CR_MSIRGSEL) == (RCC_CR_MSIRGSEL));
1488 }
1489 
1490 /**
1491   * @brief  Configure the Internal Multi Speed oscillator (MSI) clock range in run mode.
1492   * @rmtoll CR           MSIRANGE      LL_RCC_MSI_SetRange
1493   * @param  Range This parameter can be one of the following values:
1494   *         @arg @ref LL_RCC_MSIRANGE_0
1495   *         @arg @ref LL_RCC_MSIRANGE_1
1496   *         @arg @ref LL_RCC_MSIRANGE_2
1497   *         @arg @ref LL_RCC_MSIRANGE_3
1498   *         @arg @ref LL_RCC_MSIRANGE_4
1499   *         @arg @ref LL_RCC_MSIRANGE_5
1500   *         @arg @ref LL_RCC_MSIRANGE_6
1501   *         @arg @ref LL_RCC_MSIRANGE_7
1502   *         @arg @ref LL_RCC_MSIRANGE_8
1503   *         @arg @ref LL_RCC_MSIRANGE_9
1504   *         @arg @ref LL_RCC_MSIRANGE_10
1505   *         @arg @ref LL_RCC_MSIRANGE_11
1506   * @retval None
1507   */
LL_RCC_MSI_SetRange(uint32_t Range)1508 __STATIC_INLINE void LL_RCC_MSI_SetRange(uint32_t Range)
1509 {
1510   MODIFY_REG(RCC->CR, RCC_CR_MSIRANGE, Range);
1511 }
1512 
1513 /**
1514   * @brief  Get the Internal Multi Speed oscillator (MSI) clock range in run mode.
1515   * @rmtoll CR           MSIRANGE      LL_RCC_MSI_GetRange
1516   * @retval Returned value can be one of the following values:
1517   *         @arg @ref LL_RCC_MSIRANGE_0
1518   *         @arg @ref LL_RCC_MSIRANGE_1
1519   *         @arg @ref LL_RCC_MSIRANGE_2
1520   *         @arg @ref LL_RCC_MSIRANGE_3
1521   *         @arg @ref LL_RCC_MSIRANGE_4
1522   *         @arg @ref LL_RCC_MSIRANGE_5
1523   *         @arg @ref LL_RCC_MSIRANGE_6
1524   *         @arg @ref LL_RCC_MSIRANGE_7
1525   *         @arg @ref LL_RCC_MSIRANGE_8
1526   *         @arg @ref LL_RCC_MSIRANGE_9
1527   *         @arg @ref LL_RCC_MSIRANGE_10
1528   *         @arg @ref LL_RCC_MSIRANGE_11
1529   */
LL_RCC_MSI_GetRange(void)1530 __STATIC_INLINE uint32_t LL_RCC_MSI_GetRange(void)
1531 {
1532   return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_MSIRANGE));
1533 }
1534 
1535 /**
1536   * @brief  Configure MSI range used after standby
1537   * @rmtoll CSR          MSISTBYRG     LL_RCC_MSI_SetRangeAfterStandby
1538   * @param  Range This parameter can be one of the following values:
1539   *         @arg @ref LL_RCC_MSISRANGE_4
1540   *         @arg @ref LL_RCC_MSISRANGE_5
1541   *         @arg @ref LL_RCC_MSISRANGE_6
1542   *         @arg @ref LL_RCC_MSISRANGE_7
1543   * @retval None
1544   */
LL_RCC_MSI_SetRangeAfterStandby(uint32_t Range)1545 __STATIC_INLINE void LL_RCC_MSI_SetRangeAfterStandby(uint32_t Range)
1546 {
1547   MODIFY_REG(RCC->CSR, RCC_CSR_MSISTBYRG, Range);
1548 }
1549 
1550 /**
1551   * @brief  Get MSI range used after standby
1552   * @rmtoll CSR          MSISTBYRG     LL_RCC_MSI_GetRangeAfterStandby
1553   * @retval Returned value can be one of the following values:
1554   *         @arg @ref LL_RCC_MSISRANGE_4
1555   *         @arg @ref LL_RCC_MSISRANGE_5
1556   *         @arg @ref LL_RCC_MSISRANGE_6
1557   *         @arg @ref LL_RCC_MSISRANGE_7
1558   */
LL_RCC_MSI_GetRangeAfterStandby(void)1559 __STATIC_INLINE uint32_t LL_RCC_MSI_GetRangeAfterStandby(void)
1560 {
1561   return (uint32_t)(READ_BIT(RCC->CSR, RCC_CSR_MSISTBYRG));
1562 }
1563 
1564 /**
1565   * @brief  Get MSI Calibration value
1566   * @note When MSITRIM is written, MSICAL is updated with the sum of
1567   *       MSITRIM and the factory trim value
1568   * @rmtoll ICSCR        MSICAL        LL_RCC_MSI_GetCalibration
1569   * @retval Between Min_Data = 0 and Max_Data = 255
1570   */
LL_RCC_MSI_GetCalibration(void)1571 __STATIC_INLINE uint32_t LL_RCC_MSI_GetCalibration(void)
1572 {
1573   return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_MSICAL) >> RCC_ICSCR_MSICAL_Pos);
1574 }
1575 
1576 /**
1577   * @brief  Set MSI Calibration trimming
1578   * @note user-programmable trimming value that is added to the MSICAL
1579   * @rmtoll ICSCR        MSITRIM       LL_RCC_MSI_SetCalibTrimming
1580   * @param  Value Between Min_Data = 0 and Max_Data = 255
1581   * @retval None
1582   */
LL_RCC_MSI_SetCalibTrimming(uint32_t Value)1583 __STATIC_INLINE void LL_RCC_MSI_SetCalibTrimming(uint32_t Value)
1584 {
1585   MODIFY_REG(RCC->ICSCR, RCC_ICSCR_MSITRIM, Value << RCC_ICSCR_MSITRIM_Pos);
1586 }
1587 
1588 /**
1589   * @brief  Get MSI Calibration trimming
1590   * @rmtoll ICSCR        MSITRIM       LL_RCC_MSI_GetCalibTrimming
1591   * @retval Between 0 and 255
1592   */
LL_RCC_MSI_GetCalibTrimming(void)1593 __STATIC_INLINE uint32_t LL_RCC_MSI_GetCalibTrimming(void)
1594 {
1595   return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_MSITRIM) >> RCC_ICSCR_MSITRIM_Pos);
1596 }
1597 
1598 /**
1599   * @}
1600   */
1601 
1602 /** @defgroup RCC_LL_EF_LSCO LSCO
1603   * @{
1604   */
1605 
1606 /**
1607   * @brief  Enable Low speed clock
1608   * @rmtoll BDCR         LSCOEN        LL_RCC_LSCO_Enable
1609   * @retval None
1610   */
LL_RCC_LSCO_Enable(void)1611 __STATIC_INLINE void LL_RCC_LSCO_Enable(void)
1612 {
1613   SET_BIT(RCC->BDCR, RCC_BDCR_LSCOEN);
1614 }
1615 
1616 /**
1617   * @brief  Disable Low speed clock
1618   * @rmtoll BDCR         LSCOEN        LL_RCC_LSCO_Disable
1619   * @retval None
1620   */
LL_RCC_LSCO_Disable(void)1621 __STATIC_INLINE void LL_RCC_LSCO_Disable(void)
1622 {
1623   CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSCOEN);
1624 }
1625 
1626 /**
1627   * @brief  Configure Low speed clock selection
1628   * @rmtoll BDCR         LSCOSEL       LL_RCC_LSCO_SetSource
1629   * @param  Source This parameter can be one of the following values:
1630   *         @arg @ref LL_RCC_LSCO_CLKSOURCE_LSI
1631   *         @arg @ref LL_RCC_LSCO_CLKSOURCE_LSE
1632   * @retval None
1633   */
LL_RCC_LSCO_SetSource(uint32_t Source)1634 __STATIC_INLINE void LL_RCC_LSCO_SetSource(uint32_t Source)
1635 {
1636   MODIFY_REG(RCC->BDCR, RCC_BDCR_LSCOSEL, Source);
1637 }
1638 
1639 /**
1640   * @brief  Get Low speed clock selection
1641   * @rmtoll BDCR         LSCOSEL       LL_RCC_LSCO_GetSource
1642   * @retval Returned value can be one of the following values:
1643   *         @arg @ref LL_RCC_LSCO_CLKSOURCE_LSI
1644   *         @arg @ref LL_RCC_LSCO_CLKSOURCE_LSE
1645   */
LL_RCC_LSCO_GetSource(void)1646 __STATIC_INLINE uint32_t LL_RCC_LSCO_GetSource(void)
1647 {
1648   return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_LSCOSEL));
1649 }
1650 
1651 /**
1652   * @}
1653   */
1654 
1655 /** @defgroup RCC_LL_EF_System System
1656   * @{
1657   */
1658 
1659 /**
1660   * @brief  Configure the system clock source
1661   * @rmtoll CFGR         SW            LL_RCC_SetSysClkSource
1662   * @param  Source This parameter can be one of the following values:
1663   *         @arg @ref LL_RCC_SYS_CLKSOURCE_MSI
1664   *         @arg @ref LL_RCC_SYS_CLKSOURCE_HSI
1665   *         @arg @ref LL_RCC_SYS_CLKSOURCE_HSE
1666   *         @arg @ref LL_RCC_SYS_CLKSOURCE_PLL
1667   *         @arg @ref LL_RCC_SYS_CLKSOURCE_LSI
1668   *         @arg @ref LL_RCC_SYS_CLKSOURCE_LSE
1669   * @retval None
1670   */
LL_RCC_SetSysClkSource(uint32_t Source)1671 __STATIC_INLINE void LL_RCC_SetSysClkSource(uint32_t Source)
1672 {
1673   MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, Source);
1674 }
1675 
1676 /**
1677   * @brief  Get the system clock source
1678   * @rmtoll CFGR         SWS           LL_RCC_GetSysClkSource
1679   * @retval Returned value can be one of the following values:
1680   *         @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_MSI
1681   *         @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSI
1682   *         @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSE
1683   *         @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_PLL
1684   *         @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_LSI
1685   *         @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_LSE
1686   */
LL_RCC_GetSysClkSource(void)1687 __STATIC_INLINE uint32_t LL_RCC_GetSysClkSource(void)
1688 {
1689   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS));
1690 }
1691 
1692 /**
1693   * @brief  Set AHB prescaler
1694   * @rmtoll CFGR         HPRE          LL_RCC_SetAHBPrescaler
1695   * @param  Prescaler This parameter can be one of the following values:
1696   *         @arg @ref LL_RCC_SYSCLK_DIV_1
1697   *         @arg @ref LL_RCC_SYSCLK_DIV_2
1698   *         @arg @ref LL_RCC_SYSCLK_DIV_4
1699   *         @arg @ref LL_RCC_SYSCLK_DIV_8
1700   *         @arg @ref LL_RCC_SYSCLK_DIV_16
1701   *         @arg @ref LL_RCC_SYSCLK_DIV_64
1702   *         @arg @ref LL_RCC_SYSCLK_DIV_128
1703   *         @arg @ref LL_RCC_SYSCLK_DIV_256
1704   *         @arg @ref LL_RCC_SYSCLK_DIV_512
1705   * @retval None
1706   */
LL_RCC_SetAHBPrescaler(uint32_t Prescaler)1707 __STATIC_INLINE void LL_RCC_SetAHBPrescaler(uint32_t Prescaler)
1708 {
1709   MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, Prescaler);
1710 }
1711 
1712 /**
1713   * @brief  Set APB prescaler
1714   * @rmtoll CFGR         PPRE         LL_RCC_SetAPBPrescaler
1715   * @param  Prescaler This parameter can be one of the following values:
1716   *         @arg @ref LL_RCC_APB1_DIV_1
1717   *         @arg @ref LL_RCC_APB1_DIV_2
1718   *         @arg @ref LL_RCC_APB1_DIV_4
1719   *         @arg @ref LL_RCC_APB1_DIV_8
1720   *         @arg @ref LL_RCC_APB1_DIV_16
1721   * @retval None
1722   */
LL_RCC_SetAPB1Prescaler(uint32_t Prescaler)1723 __STATIC_INLINE void LL_RCC_SetAPB1Prescaler(uint32_t Prescaler)
1724 {
1725   MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE, Prescaler);
1726 }
1727 
1728 /**
1729   * @brief  Get AHB prescaler
1730   * @rmtoll CFGR         HPRE          LL_RCC_GetAHBPrescaler
1731   * @retval Returned value can be one of the following values:
1732   *         @arg @ref LL_RCC_SYSCLK_DIV_1
1733   *         @arg @ref LL_RCC_SYSCLK_DIV_2
1734   *         @arg @ref LL_RCC_SYSCLK_DIV_4
1735   *         @arg @ref LL_RCC_SYSCLK_DIV_8
1736   *         @arg @ref LL_RCC_SYSCLK_DIV_16
1737   *         @arg @ref LL_RCC_SYSCLK_DIV_64
1738   *         @arg @ref LL_RCC_SYSCLK_DIV_128
1739   *         @arg @ref LL_RCC_SYSCLK_DIV_256
1740   *         @arg @ref LL_RCC_SYSCLK_DIV_512
1741   */
LL_RCC_GetAHBPrescaler(void)1742 __STATIC_INLINE uint32_t LL_RCC_GetAHBPrescaler(void)
1743 {
1744   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_HPRE));
1745 }
1746 
1747 /**
1748   * @brief  Get APB prescaler
1749   * @rmtoll CFGR         PPRE         LL_RCC_GetAPB1Prescaler
1750   * @retval Returned value can be one of the following values:
1751   *         @arg @ref LL_RCC_APB1_DIV_1
1752   *         @arg @ref LL_RCC_APB1_DIV_2
1753   *         @arg @ref LL_RCC_APB1_DIV_4
1754   *         @arg @ref LL_RCC_APB1_DIV_8
1755   *         @arg @ref LL_RCC_APB1_DIV_16
1756   */
LL_RCC_GetAPB1Prescaler(void)1757 __STATIC_INLINE uint32_t LL_RCC_GetAPB1Prescaler(void)
1758 {
1759   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE));
1760 }
1761 
1762 /**
1763   * @brief  Set Clock After Wake-Up From Stop mode
1764   * @rmtoll CFGR         STOPWUCK      LL_RCC_SetClkAfterWakeFromStop
1765   * @param  Clock This parameter can be one of the following values:
1766   *         @arg @ref LL_RCC_STOP_WAKEUPCLOCK_MSI
1767   *         @arg @ref LL_RCC_STOP_WAKEUPCLOCK_HSI
1768   * @retval None
1769   */
LL_RCC_SetClkAfterWakeFromStop(uint32_t Clock)1770 __STATIC_INLINE void LL_RCC_SetClkAfterWakeFromStop(uint32_t Clock)
1771 {
1772   MODIFY_REG(RCC->CFGR, RCC_CFGR_STOPWUCK, Clock);
1773 }
1774 
1775 /**
1776   * @brief  Get Clock After Wake-Up From Stop mode
1777   * @rmtoll CFGR         STOPWUCK      LL_RCC_GetClkAfterWakeFromStop
1778   * @retval Returned value can be one of the following values:
1779   *         @arg @ref LL_RCC_STOP_WAKEUPCLOCK_MSI
1780   *         @arg @ref LL_RCC_STOP_WAKEUPCLOCK_HSI
1781   */
LL_RCC_GetClkAfterWakeFromStop(void)1782 __STATIC_INLINE uint32_t LL_RCC_GetClkAfterWakeFromStop(void)
1783 {
1784   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_STOPWUCK));
1785 }
1786 
1787 /**
1788   * @}
1789   */
1790 
1791 /** @defgroup RCC_LL_EF_MCO MCO
1792   * @{
1793   */
1794 
1795 /**
1796   * @brief  Configure MCOx
1797   * @rmtoll CFGR         MCO1          LL_RCC_ConfigMCO\n
1798   *         CFGR         MCO1PRE       LL_RCC_ConfigMCO\n
1799   *         CFGR         MCO2          LL_RCC_ConfigMCO\n
1800   *         CFGR         MCO2PRE       LL_RCC_ConfigMCO
1801   * @param  MCOxSource This parameter can be one of the following values:
1802   *         @arg @ref LL_RCC_MCO1SOURCE_NOCLOCK
1803   *         @arg @ref LL_RCC_MCO1SOURCE_SYSCLK
1804   *         @arg @ref LL_RCC_MCO1SOURCE_MSI
1805   *         @arg @ref LL_RCC_MCO1SOURCE_HSI16
1806   *         @arg @ref LL_RCC_MCO1SOURCE_HSE
1807   *         @arg @ref LL_RCC_MCO1SOURCE_PLLCLK
1808   *         @arg @ref LL_RCC_MCO1SOURCE_LSI
1809   *         @arg @ref LL_RCC_MCO1SOURCE_LSE
1810   *         @arg @ref LL_RCC_MCO1SOURCE_HSI48
1811   *         @arg @ref LL_RCC_MCO2SOURCE_NOCLOCK
1812   *         @arg @ref LL_RCC_MCO2SOURCE_SYSCLK
1813   *         @arg @ref LL_RCC_MCO2SOURCE_MSI
1814   *         @arg @ref LL_RCC_MCO2SOURCE_HSI16
1815   *         @arg @ref LL_RCC_MCO2SOURCE_HSE
1816   *         @arg @ref LL_RCC_MCO2SOURCE_PLLCLK
1817   *         @arg @ref LL_RCC_MCO2SOURCE_LSI
1818   *         @arg @ref LL_RCC_MCO2SOURCE_LSE
1819   *         @arg @ref LL_RCC_MCO2SOURCE_HSI48
1820   * @param  MCOxPrescaler This parameter can be one of the following values:
1821   *         @arg @ref LL_RCC_MCO1_DIV_1
1822   *         @arg @ref LL_RCC_MCO1_DIV_2
1823   *         @arg @ref LL_RCC_MCO1_DIV_4
1824   *         @arg @ref LL_RCC_MCO1_DIV_8
1825   *         @arg @ref LL_RCC_MCO1_DIV_16
1826   *         @arg @ref LL_RCC_MCO1_DIV_32
1827   *         @arg @ref LL_RCC_MCO1_DIV_64
1828   *         @arg @ref LL_RCC_MCO1_DIV_128
1829   *         @arg @ref LL_RCC_MCO1_DIV_256
1830   *         @arg @ref LL_RCC_MCO1_DIV_512
1831   *         @arg @ref LL_RCC_MCO2_DIV_1
1832   *         @arg @ref LL_RCC_MCO2_DIV_2
1833   *         @arg @ref LL_RCC_MCO2_DIV_4
1834   *         @arg @ref LL_RCC_MCO2_DIV_8
1835   *         @arg @ref LL_RCC_MCO2_DIV_16
1836   *         @arg @ref LL_RCC_MCO2_DIV_32
1837   *         @arg @ref LL_RCC_MCO2_DIV_64
1838   *         @arg @ref LL_RCC_MCO2_DIV_128
1839   *         @arg @ref LL_RCC_MCO2_DIV_256
1840   *         @arg @ref LL_RCC_MCO2_DIV_512
1841   *         @arg @ref LL_RCC_MCO2_DIV_1024
1842   * @retval None
1843   */
LL_RCC_ConfigMCO(uint32_t MCOxSource,uint32_t MCOxPrescaler)1844 __STATIC_INLINE void LL_RCC_ConfigMCO(uint32_t MCOxSource, uint32_t MCOxPrescaler)
1845 {
1846   MODIFY_REG(RCC->CFGR, (MCOxSource << 16U) | (MCOxPrescaler << 16U), \
1847              (MCOxSource & 0xFFFF0000U) | (MCOxPrescaler & 0xFFFF0000U));
1848 }
1849 
1850 /**
1851   * @}
1852   */
1853 
1854 /** @defgroup RCC_LL_EF_Peripheral_Clock_Source Peripheral Clock Source
1855   * @{
1856   */
1857 
1858 /**
1859   * @brief  Configure USARTx clock source
1860   * @rmtoll CCIPR        USARTxSEL     LL_RCC_SetUSARTClockSource
1861   * @param  USARTxSource This parameter can be one of the following values:
1862   *         @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK1
1863   *         @arg @ref LL_RCC_USART1_CLKSOURCE_SYSCLK
1864   *         @arg @ref LL_RCC_USART1_CLKSOURCE_HSI
1865   *         @arg @ref LL_RCC_USART1_CLKSOURCE_LSE
1866   *         @arg @ref LL_RCC_USART2_CLKSOURCE_PCLK1
1867   *         @arg @ref LL_RCC_USART2_CLKSOURCE_SYSCLK
1868   *         @arg @ref LL_RCC_USART2_CLKSOURCE_HSI
1869   *         @arg @ref LL_RCC_USART2_CLKSOURCE_LSE
1870   * @retval None
1871   */
LL_RCC_SetUSARTClockSource(uint32_t USARTxSource)1872 __STATIC_INLINE void LL_RCC_SetUSARTClockSource(uint32_t USARTxSource)
1873 {
1874   MODIFY_REG(RCC->CCIPR, (USARTxSource >> 16), (USARTxSource & 0x0000FFFF));
1875 }
1876 
1877 /**
1878   * @brief  Configure LPUART1x clock source
1879   * @rmtoll CCIPR        LPUART1SEL    LL_RCC_SetLPUARTClockSource
1880   * @param  LPUARTxSource This parameter can be one of the following values:
1881   *         @arg @ref LL_RCC_LPUART1_CLKSOURCE_PCLK1
1882   *         @arg @ref LL_RCC_LPUART1_CLKSOURCE_SYSCLK
1883   *         @arg @ref LL_RCC_LPUART1_CLKSOURCE_HSI
1884   *         @arg @ref LL_RCC_LPUART1_CLKSOURCE_LSE
1885   *         @arg @ref LL_RCC_LPUART2_CLKSOURCE_PCLK1
1886   *         @arg @ref LL_RCC_LPUART2_CLKSOURCE_SYSCLK
1887   *         @arg @ref LL_RCC_LPUART2_CLKSOURCE_HSI
1888   *         @arg @ref LL_RCC_LPUART2_CLKSOURCE_LSE
1889   *         @arg @ref LL_RCC_LPUART3_CLKSOURCE_PCLK1 (*)
1890   *         @arg @ref LL_RCC_LPUART3_CLKSOURCE_SYSCLK (*)
1891   *         @arg @ref LL_RCC_LPUART3_CLKSOURCE_HSI (*)
1892   *         @arg @ref LL_RCC_LPUART3_CLKSOURCE_LSE (*)
1893   *
1894   *         (*) value not defined in all devices.
1895   * @retval None
1896   */
LL_RCC_SetLPUARTClockSource(uint32_t LPUARTxSource)1897 __STATIC_INLINE void LL_RCC_SetLPUARTClockSource(uint32_t LPUARTxSource)
1898 {
1899   MODIFY_REG(RCC->CCIPR, (LPUARTxSource >> 16), (LPUARTxSource & 0x0000FFFFU));
1900 }
1901 
1902 /**
1903   * @brief  Configure I2Cx clock source
1904   * @rmtoll CCIPR        I2CxSEL       LL_RCC_SetI2CClockSource
1905   * @param  I2CxSource This parameter can be one of the following values:
1906   *         @arg @ref LL_RCC_I2C1_CLKSOURCE_PCLK1
1907   *         @arg @ref LL_RCC_I2C1_CLKSOURCE_SYSCLK
1908   *         @arg @ref LL_RCC_I2C1_CLKSOURCE_HSI
1909   *         @arg @ref LL_RCC_I2C3_CLKSOURCE_PCLK1
1910   *         @arg @ref LL_RCC_I2C3_CLKSOURCE_SYSCLK
1911   *         @arg @ref LL_RCC_I2C3_CLKSOURCE_HSI
1912   * @retval None
1913   */
LL_RCC_SetI2CClockSource(uint32_t I2CxSource)1914 __STATIC_INLINE void LL_RCC_SetI2CClockSource(uint32_t I2CxSource)
1915 {
1916   __IO uint32_t *reg = (__IO uint32_t *)(uint32_t)(RCC_BASE + 0x88U + (I2CxSource >> 24U));
1917   MODIFY_REG(*reg, 3U << ((I2CxSource & 0x00FF0000U) >> 16U), \
1918              ((I2CxSource & 0x000000FFU) << ((I2CxSource & 0x00FF0000U) >> 16U)));
1919 }
1920 
1921 /**
1922   * @brief  Configure TIMx clock source
1923   * @rmtoll CCIPR        TIMxSEL       LL_RCC_SetTIMClockSource
1924   * @param  TIMxSource This parameter can be one of the following values:
1925   *         @arg @ref LL_RCC_TIM1_CLKSOURCE_PLLQ
1926   *         @arg @ref LL_RCC_TIM1_CLKSOURCE_PCLK1
1927   *         @arg @ref LL_RCC_TIM15_CLKSOURCE_PLLQ
1928   *         @arg @ref LL_RCC_TIM15_CLKSOURCE_PCLK1
1929   * @retval None
1930   */
LL_RCC_SetTIMClockSource(uint32_t TIMxSource)1931 __STATIC_INLINE void LL_RCC_SetTIMClockSource(uint32_t TIMxSource)
1932 {
1933   MODIFY_REG(RCC->CCIPR, (TIMxSource & 0xFFFF0000U), (TIMxSource << 16));
1934 }
1935 
1936 /**
1937   * @brief  Configure LPTIMx clock source
1938   * @rmtoll CCIPR        LPTIMxSEL     LL_RCC_SetLPTIMClockSource
1939   * @param  LPTIMxSource This parameter can be one of the following values:
1940   *         @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK1
1941   *         @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI
1942   *         @arg @ref LL_RCC_LPTIM1_CLKSOURCE_HSI
1943   *         @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE
1944   *         @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PCLK1
1945   *         @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSI
1946   *         @arg @ref LL_RCC_LPTIM2_CLKSOURCE_HSI
1947   *         @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSE
1948   *         @arg @ref LL_RCC_LPTIM3_CLKSOURCE_PCLK1 (*)
1949   *         @arg @ref LL_RCC_LPTIM3_CLKSOURCE_LSI   (*)
1950   *         @arg @ref LL_RCC_LPTIM3_CLKSOURCE_HSI   (*)
1951   *         @arg @ref LL_RCC_LPTIM3_CLKSOURCE_LSE   (*)
1952   *
1953   *         (*) value not defined in all devices.
1954   * @retval None
1955   */
LL_RCC_SetLPTIMClockSource(uint32_t LPTIMxSource)1956 __STATIC_INLINE void LL_RCC_SetLPTIMClockSource(uint32_t LPTIMxSource)
1957 {
1958   MODIFY_REG(RCC->CCIPR, (LPTIMxSource & 0xFFFF0000U), (LPTIMxSource << 16U));
1959 }
1960 
1961 /**
1962   * @brief  Configure RNG clock source
1963   * @rmtoll CCIPR        CLK48MSEL      LL_RCC_SetRNGClockSource
1964   * @param  RNGxSource This parameter can be one of the following values:
1965   *         @arg @ref LL_RCC_RNG_CLKSOURCE_NONE
1966   *         @arg @ref LL_RCC_RNG_CLKSOURCE_HSI48 (*)
1967   *         @arg @ref LL_RCC_RNG_CLKSOURCE_PLLQ
1968   *         @arg @ref LL_RCC_RNG_CLKSOURCE_MSI
1969   *
1970   *         (*) value not defined in all devices.
1971   * @retval None
1972   */
LL_RCC_SetRNGClockSource(uint32_t RNGxSource)1973 __STATIC_INLINE void LL_RCC_SetRNGClockSource(uint32_t RNGxSource)
1974 {
1975   MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, RNGxSource);
1976 }
1977 
1978 #if defined(USB_DRD_FS)
1979 /**
1980   * @brief  Configure USB clock source
1981   * @rmtoll CCIPR        USBSEL      LL_RCC_SetUSBClockSource
1982   * @param  USBxSource This parameter can be one of the following values:
1983   *         @arg @ref LL_RCC_USB_CLKSOURCE_NONE
1984   *         @arg @ref LL_RCC_USB_CLKSOURCE_HSI48
1985   *         @arg @ref LL_RCC_USB_CLKSOURCE_PLLQ
1986   *         @arg @ref LL_RCC_USB_CLKSOURCE_MSI
1987   *
1988   *         (*) value not defined in all devices.
1989   * @retval None
1990   */
LL_RCC_SetUSBClockSource(uint32_t USBxSource)1991 __STATIC_INLINE void LL_RCC_SetUSBClockSource(uint32_t USBxSource)
1992 {
1993   MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, USBxSource);
1994 }
1995 #endif /* USB_DRD_FS */
1996 
1997 /**
1998   * @brief  Configure ADC clock source
1999   * @rmtoll CCIPR        ADCSEL        LL_RCC_SetADCClockSource
2000   * @param  ADCxSource This parameter can be one of the following values:
2001   *         @arg @ref LL_RCC_ADC_CLKSOURCE_NONE
2002   *         @arg @ref LL_RCC_ADC_CLKSOURCE_PLLP
2003   *         @arg @ref LL_RCC_ADC_CLKSOURCE_HSI
2004   *         @arg @ref LL_RCC_ADC_CLKSOURCE_SYSCLK
2005   * @retval None
2006   */
LL_RCC_SetADCClockSource(uint32_t ADCxSource)2007 __STATIC_INLINE void LL_RCC_SetADCClockSource(uint32_t ADCxSource)
2008 {
2009   MODIFY_REG(RCC->CCIPR, RCC_CCIPR_ADCSEL, ADCxSource);
2010 }
2011 
2012 /**
2013   * @brief  Get USARTx clock source
2014   * @rmtoll CCIPR        USARTxSEL     LL_RCC_GetUSARTClockSource
2015   * @param  USARTx This parameter can be one of the following values:
2016   *         @arg @ref LL_RCC_USART1_CLKSOURCE
2017   *         @arg @ref LL_RCC_USART2_CLKSOURCE
2018   *
2019   *         (*) value not defined in all devices.
2020   * @retval Returned value can be one of the following values:
2021   *         @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK1
2022   *         @arg @ref LL_RCC_USART1_CLKSOURCE_SYSCLK
2023   *         @arg @ref LL_RCC_USART1_CLKSOURCE_HSI
2024   *         @arg @ref LL_RCC_USART1_CLKSOURCE_LSE
2025   *         @arg @ref LL_RCC_USART2_CLKSOURCE_PCLK1
2026   *         @arg @ref LL_RCC_USART2_CLKSOURCE_SYSCLK
2027   *         @arg @ref LL_RCC_USART2_CLKSOURCE_HSI
2028   *         @arg @ref LL_RCC_USART2_CLKSOURCE_LSE
2029   */
LL_RCC_GetUSARTClockSource(uint32_t USARTx)2030 __STATIC_INLINE uint32_t LL_RCC_GetUSARTClockSource(uint32_t USARTx)
2031 {
2032   return (uint32_t)(READ_BIT(RCC->CCIPR, USARTx) | (USARTx << 16U));
2033 }
2034 
2035 /**
2036   * @brief  Get LPUARTx clock source
2037   * @rmtoll CCIPR        LPUART1SEL    LL_RCC_GetLPUARTClockSource
2038   * @param  LPUARTx This parameter can be one of the following values:
2039   *         @arg @ref LL_RCC_LPUART1_CLKSOURCE
2040   * @retval Returned value can be one of the following values:
2041   *         @arg @ref LL_RCC_LPUART1_CLKSOURCE_PCLK1
2042   *         @arg @ref LL_RCC_LPUART1_CLKSOURCE_SYSCLK
2043   *         @arg @ref LL_RCC_LPUART1_CLKSOURCE_HSI
2044   *         @arg @ref LL_RCC_LPUART1_CLKSOURCE_LSE
2045   *         @arg @ref LL_RCC_LPUART2_CLKSOURCE_PCLK1
2046   *         @arg @ref LL_RCC_LPUART2_CLKSOURCE_SYSCLK
2047   *         @arg @ref LL_RCC_LPUART2_CLKSOURCE_HSI
2048   *         @arg @ref LL_RCC_LPUART2_CLKSOURCE_LSE
2049   *         @arg @ref LL_RCC_LPUART3_CLKSOURCE_PCLK1 (*)
2050   *         @arg @ref LL_RCC_LPUART3_CLKSOURCE_SYSCLK (*)
2051   *         @arg @ref LL_RCC_LPUART3_CLKSOURCE_HSI (*)
2052   *         @arg @ref LL_RCC_LPUART3_CLKSOURCE_LSE (*)
2053   *
2054   *         (*) value not defined in all devices.
2055   */
LL_RCC_GetLPUARTClockSource(uint32_t LPUARTx)2056 __STATIC_INLINE uint32_t LL_RCC_GetLPUARTClockSource(uint32_t LPUARTx)
2057 {
2058   return (uint32_t)((READ_BIT(RCC->CCIPR, LPUARTx) | (LPUARTx << 16U)));
2059 }
2060 
2061 /**
2062   * @brief  Get I2Cx clock source
2063   * @rmtoll CCIPR        I2CxSEL       LL_RCC_GetI2CClockSource
2064   * @param  I2Cx This parameter can be one of the following values:
2065   *         @arg @ref LL_RCC_I2C1_CLKSOURCE
2066   *         @arg @ref LL_RCC_I2C3_CLKSOURCE
2067   *
2068   *         (*) value not defined in all devices.
2069   * @retval Returned value can be one of the following values:
2070   *         @arg @ref LL_RCC_I2C1_CLKSOURCE_PCLK1
2071   *         @arg @ref LL_RCC_I2C1_CLKSOURCE_SYSCLK
2072   *         @arg @ref LL_RCC_I2C1_CLKSOURCE_HSI
2073   *         @arg @ref LL_RCC_I2C3_CLKSOURCE_PCLK1
2074   *         @arg @ref LL_RCC_I2C3_CLKSOURCE_SYSCLK
2075   *         @arg @ref LL_RCC_I2C3_CLKSOURCE_HSI
2076  */
LL_RCC_GetI2CClockSource(uint32_t I2Cx)2077 __STATIC_INLINE uint32_t LL_RCC_GetI2CClockSource(uint32_t I2Cx)
2078 {
2079   __IO uint32_t *reg = (__IO uint32_t *)(uint32_t)(RCC_BASE + 0x88U + (I2Cx >> 24U));
2080   return (uint32_t)((READ_BIT(*reg, 3U << ((I2Cx & 0x0000FF0000U) >> 16U)) >> ((I2Cx & 0x0000FF0000U) >> 16U)) | \
2081                     (I2Cx & 0xFFFF0000U));
2082 }
2083 
2084 /**
2085   * @brief  Get TIMx clock source
2086   * @rmtoll CCIPR        TIMxSEL       LL_RCC_GetTIMClockSource
2087   * @param  TIMx This parameter can be one of the following values:
2088   *         @arg @ref LL_RCC_TIM1_CLKSOURCE
2089   *         @arg @ref LL_RCC_TIM15_CLKSOURCE
2090   * @retval Returned value can be one of the following values:
2091   *         @arg @ref LL_RCC_TIM1_CLKSOURCE_PLLQ
2092   *         @arg @ref LL_RCC_TIM1_CLKSOURCE_PCLK1
2093   *         @arg @ref LL_RCC_TIM15_CLKSOURCE_PLLQ
2094   *         @arg @ref LL_RCC_TIM15_CLKSOURCE_PCLK1
2095   */
LL_RCC_GetTIMClockSource(uint32_t TIMx)2096 __STATIC_INLINE uint32_t LL_RCC_GetTIMClockSource(uint32_t TIMx)
2097 {
2098   return (uint32_t)((READ_BIT(RCC->CCIPR, TIMx) >> 16U) | TIMx);
2099 }
2100 
2101 /**
2102   * @brief  Get LPTIMx clock source
2103   * @rmtoll CCIPR        LPTIM1SEL     LL_RCC_GetLPTIMClockSource\n
2104   *         CCIPR        LPTIM2SEL     LL_RCC_GetLPTIMClockSource
2105   *         CCIPR        LPTIM3SEL     LL_RCC_GetLPTIMClockSource
2106   * @param  LPTIMx This parameter can be one of the following values:
2107   *         @arg @ref LL_RCC_LPTIM1_CLKSOURCE
2108   *         @arg @ref LL_RCC_LPTIM2_CLKSOURCE
2109   * @retval Returned value can be one of the following values:
2110   *         @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK1
2111   *         @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI
2112   *         @arg @ref LL_RCC_LPTIM1_CLKSOURCE_HSI
2113   *         @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE
2114   *         @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PCLK1
2115   *         @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSI
2116   *         @arg @ref LL_RCC_LPTIM2_CLKSOURCE_HSI
2117   *         @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSE
2118   *         @arg @ref LL_RCC_LPTIM3_CLKSOURCE_PCLK1 (*)
2119   *         @arg @ref LL_RCC_LPTIM3_CLKSOURCE_LSI   (*)
2120   *         @arg @ref LL_RCC_LPTIM3_CLKSOURCE_HSI   (*)
2121   *         @arg @ref LL_RCC_LPTIM3_CLKSOURCE_LSE   (*)
2122   *
2123   *         (*) value not defined in all devices.
2124   */
LL_RCC_GetLPTIMClockSource(uint32_t LPTIMx)2125 __STATIC_INLINE uint32_t LL_RCC_GetLPTIMClockSource(uint32_t LPTIMx)
2126 {
2127   return (uint32_t)((READ_BIT(RCC->CCIPR, LPTIMx) >> 16U) | LPTIMx);
2128 }
2129 
2130 /**
2131   * @brief  Get RNGx clock source
2132   * @rmtoll CCIPR        CLK48SEL      LL_RCC_GetRNGClockSource
2133   * @param  RNGx This parameter can be one of the following values:
2134   *         @arg @ref LL_RCC_RNG_CLKSOURCE
2135   * @retval Returned value can be one of the following values:
2136   *         @arg @ref LL_RCC_RNG_CLKSOURCE_NONE
2137   *         @arg @ref LL_RCC_RNG_CLKSOURCE_HSI48
2138   *         @arg @ref LL_RCC_RNG_CLKSOURCE_PLLQ
2139   *         @arg @ref LL_RCC_RNG_CLKSOURCE_MSI
2140   *
2141   */
LL_RCC_GetRNGClockSource(uint32_t RNGx)2142 __STATIC_INLINE uint32_t LL_RCC_GetRNGClockSource(uint32_t RNGx)
2143 {
2144   return (uint32_t)(READ_BIT(RCC->CCIPR, RNGx));
2145 }
2146 
2147 #if defined (USB_DRD_FS)
2148 /**
2149   * @brief  Get USBx clock source
2150   * @rmtoll CCIPR        CLK48SEL      LL_RCC_GetUSBClockSource
2151   * @param  USBx This parameter can be one of the following values:
2152   *         @arg @ref LL_RCC_USB_CLKSOURCE
2153   * @retval Returned value can be one of the following values:
2154   *         @arg @ref LL_RCC_USB_CLKSOURCE_NONE
2155   *         @arg @ref LL_RCC_USB_CLKSOURCE_HSI48
2156   *         @arg @ref LL_RCC_USB_CLKSOURCE_PLLQ
2157   *         @arg @ref LL_RCC_USB_CLKSOURCE_MSI
2158   *
2159   */
LL_RCC_GetUSBClockSource(uint32_t USBx)2160 __STATIC_INLINE uint32_t LL_RCC_GetUSBClockSource(uint32_t USBx)
2161 {
2162   return (uint32_t)(READ_BIT(RCC->CCIPR, USBx));
2163 }
2164 #endif /* USB_DRD_FS */
2165 
2166 /**
2167   * @brief  Get ADCx clock source
2168   * @rmtoll CCIPR        ADCSEL        LL_RCC_GetADCClockSource
2169   * @param  ADCx This parameter can be one of the following values:
2170   *         @arg @ref LL_RCC_ADC_CLKSOURCE
2171   * @retval Returned value can be one of the following values:
2172   *         @arg @ref LL_RCC_ADC_CLKSOURCE_NONE
2173   *         @arg @ref LL_RCC_ADC_CLKSOURCE_PLLP
2174   *         @arg @ref LL_RCC_ADC_CLKSOURCE_HSI
2175   *         @arg @ref LL_RCC_ADC_CLKSOURCE_SYSCLK
2176   */
LL_RCC_GetADCClockSource(uint32_t ADCx)2177 __STATIC_INLINE uint32_t LL_RCC_GetADCClockSource(uint32_t ADCx)
2178 {
2179   return (uint32_t)(READ_BIT(RCC->CCIPR, ADCx));
2180 }
2181 
2182 /**
2183   * @}
2184   */
2185 
2186 /** @defgroup RCC_LL_EF_RTC RTC
2187   * @{
2188   */
2189 
2190 /**
2191   * @brief  Set RTC Clock Source
2192   * @note Once the RTC clock source has been selected, it cannot be changed anymore unless
2193   *       the Backup domain is reset, or unless a failure is detected on LSE (LSECSSD is
2194   *       set). The BDRST bit can be used to reset them.
2195   * @rmtoll BDCR         RTCSEL        LL_RCC_SetRTCClockSource
2196   * @param  Source This parameter can be one of the following values:
2197   *         @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
2198   *         @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
2199   *         @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
2200   *         @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV32
2201   * @retval None
2202   */
LL_RCC_SetRTCClockSource(uint32_t Source)2203 __STATIC_INLINE void LL_RCC_SetRTCClockSource(uint32_t Source)
2204 {
2205   MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, Source);
2206 }
2207 
2208 /**
2209   * @brief  Get RTC Clock Source
2210   * @rmtoll BDCR         RTCSEL        LL_RCC_GetRTCClockSource
2211   * @retval Returned value can be one of the following values:
2212   *         @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
2213   *         @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
2214   *         @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
2215   *         @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV32
2216   */
LL_RCC_GetRTCClockSource(void)2217 __STATIC_INLINE uint32_t LL_RCC_GetRTCClockSource(void)
2218 {
2219   return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL));
2220 }
2221 
2222 /**
2223   * @brief  Enable RTC
2224   * @rmtoll BDCR         RTCEN         LL_RCC_EnableRTC
2225   * @retval None
2226   */
LL_RCC_EnableRTC(void)2227 __STATIC_INLINE void LL_RCC_EnableRTC(void)
2228 {
2229   SET_BIT(RCC->BDCR, RCC_BDCR_RTCEN);
2230 }
2231 
2232 /**
2233   * @brief  Disable RTC
2234   * @rmtoll BDCR         RTCEN         LL_RCC_DisableRTC
2235   * @retval None
2236   */
LL_RCC_DisableRTC(void)2237 __STATIC_INLINE void LL_RCC_DisableRTC(void)
2238 {
2239   CLEAR_BIT(RCC->BDCR, RCC_BDCR_RTCEN);
2240 }
2241 
2242 /**
2243   * @brief  Check if RTC has been enabled or not
2244   * @rmtoll BDCR         RTCEN         LL_RCC_IsEnabledRTC
2245   * @retval State of bit (1 or 0).
2246   */
LL_RCC_IsEnabledRTC(void)2247 __STATIC_INLINE uint32_t LL_RCC_IsEnabledRTC(void)
2248 {
2249   return (READ_BIT(RCC->BDCR, RCC_BDCR_RTCEN) == (RCC_BDCR_RTCEN));
2250 }
2251 
2252 /**
2253   * @brief  Force the Backup domain reset
2254   * @rmtoll BDCR         BDRST         LL_RCC_ForceBackupDomainReset
2255   * @retval None
2256   */
LL_RCC_ForceBackupDomainReset(void)2257 __STATIC_INLINE void LL_RCC_ForceBackupDomainReset(void)
2258 {
2259   SET_BIT(RCC->BDCR, RCC_BDCR_BDRST);
2260 }
2261 
2262 /**
2263   * @brief  Release the Backup domain reset
2264   * @rmtoll BDCR         BDRST         LL_RCC_ReleaseBackupDomainReset
2265   * @retval None
2266   */
LL_RCC_ReleaseBackupDomainReset(void)2267 __STATIC_INLINE void LL_RCC_ReleaseBackupDomainReset(void)
2268 {
2269   CLEAR_BIT(RCC->BDCR, RCC_BDCR_BDRST);
2270 }
2271 
2272 /**
2273   * @}
2274   */
2275 
2276 /** @defgroup RCC_LL_EF_PLL PLL
2277   * @{
2278   */
2279 
2280 /**
2281   * @brief  Enable PLL
2282   * @rmtoll CR           PLLON         LL_RCC_PLL_Enable
2283   * @retval None
2284   */
LL_RCC_PLL_Enable(void)2285 __STATIC_INLINE void LL_RCC_PLL_Enable(void)
2286 {
2287   SET_BIT(RCC->CR, RCC_CR_PLLON);
2288 }
2289 
2290 /**
2291   * @brief  Disable PLL
2292   * @note Cannot be disabled if the PLL clock is used as the system clock
2293   * @rmtoll CR           PLLON         LL_RCC_PLL_Disable
2294   * @retval None
2295   */
LL_RCC_PLL_Disable(void)2296 __STATIC_INLINE void LL_RCC_PLL_Disable(void)
2297 {
2298   CLEAR_BIT(RCC->CR, RCC_CR_PLLON);
2299 }
2300 
2301 /**
2302   * @brief  Check if PLL Ready
2303   * @rmtoll CR           PLLRDY        LL_RCC_PLL_IsReady
2304   * @retval State of bit (1 or 0).
2305   */
LL_RCC_PLL_IsReady(void)2306 __STATIC_INLINE uint32_t LL_RCC_PLL_IsReady(void)
2307 {
2308   return (READ_BIT(RCC->CR, RCC_CR_PLLRDY) == (RCC_CR_PLLRDY));
2309 }
2310 
2311 /** @defgroup RCC_LL_EF_HSI48 HSI48
2312   * @{
2313   */
2314 #if defined(RCC_CRRCR_HSI48ON)
2315 /**
2316   * @brief  Enable HSI48
2317   * @rmtoll CRRCR           HSI48ON         LL_RCC_HSI48_Enable
2318   * @retval None
2319   */
LL_RCC_HSI48_Enable(void)2320 __STATIC_INLINE void LL_RCC_HSI48_Enable(void)
2321 {
2322   SET_BIT(RCC->CRRCR, RCC_CRRCR_HSI48ON);
2323 }
2324 
2325 /**
2326   * @brief  Disable HSI48
2327   * @note Cannot be disabled if the HSI48 clock is used as the system clock
2328   * @rmtoll CRRCR           HSI48ON         LL_RCC_HSI48_Disable
2329   * @retval None
2330   */
LL_RCC_HSI48_Disable(void)2331 __STATIC_INLINE void LL_RCC_HSI48_Disable(void)
2332 {
2333   CLEAR_BIT(RCC->CRRCR, RCC_CRRCR_HSI48ON);
2334 }
2335 #endif /* RCC_CRRCR_HSI48ON */
2336 #if defined(RCC_CRRCR_HSI48ON)
2337 /**
2338   * @brief  Check if HSI48 Ready
2339   * @rmtoll CRRCR           HSI48RDY        LL_RCC_HSI48_IsReady
2340   * @retval State of bit (1 or 0).
2341   */
LL_RCC_HSI48_IsReady(void)2342 __STATIC_INLINE uint32_t LL_RCC_HSI48_IsReady(void)
2343 {
2344   return (READ_BIT(RCC->CRRCR, RCC_CRRCR_HSI48RDY) == (RCC_CRRCR_HSI48RDY));
2345 }
2346 #endif /* RCC_CRRCR_HSI48ON */
2347 #if defined(RCC_CRRCR_HSI48ON)
2348 /**
2349   * @brief  Get HSI Calibration value
2350   * @note When HSITRIM is written, HSICAL is updated with the sum of
2351   *       HSITRIM and the factory trim value
2352   * @rmtoll CRRCR        HSICAL        LL_RCC_HSI_GetCalibration
2353   * @retval Between Min_Data = 0x00 and Max_Data = 0xFF
2354   */
LL_RCC_HSI48_GetCalibration(void)2355 __STATIC_INLINE uint32_t LL_RCC_HSI48_GetCalibration(void)
2356 {
2357   return (uint32_t)(READ_BIT(RCC->CRRCR, RCC_CRRCR_HSI48CAL) >> RCC_CRRCR_HSI48CAL_Pos);
2358 }
2359 
2360 /**
2361   * @brief  Set HSI Calibration trimming
2362   * @note user-programmable trimming value that is added to the HSICAL
2363   * @note Default value is 16, which, when added to the HSICAL value,
2364   *       should trim the HSI to 16 MHz +/- 1 %
2365   * @rmtoll CRRCR        HSITRIM       LL_RCC_HSI_SetCalibTrimming
2366   * @param  Value Between Min_Data = 0 and Max_Data = 31
2367   * @retval None
2368   */
LL_RCC_HSI48_SetCalibration(uint32_t Value)2369 __STATIC_INLINE void LL_RCC_HSI48_SetCalibration(uint32_t Value)
2370 {
2371   MODIFY_REG(RCC->CRRCR, RCC_CRRCR_HSI48CAL, Value << RCC_CRRCR_HSI48CAL_Pos);
2372 }
2373 #endif /* RCC_CRRCR_HSI48ON */
2374 /**
2375   * @brief  Configure PLLR used for SYSCLK Domain
2376   * @note PLL Source and PLLM Divider can be written only when PLL
2377   *        is disabled.
2378   * @note PLLN/PLLR can be written only when PLL is disabled.
2379   * @rmtoll PLLCFGR      PLLSRC        LL_RCC_PLL_ConfigDomain_SYS\n
2380   *         PLLCFGR      PLLM          LL_RCC_PLL_ConfigDomain_SYS\n
2381   *         PLLCFGR      PLLN          LL_RCC_PLL_ConfigDomain_SYS\n
2382   *         PLLCFGR      PLLR          LL_RCC_PLL_ConfigDomain_SYS
2383   * @param  Source This parameter can be one of the following values:
2384   *         @arg @ref LL_RCC_PLLSOURCE_NONE
2385   *         @arg @ref LL_RCC_PLLSOURCE_MSI
2386   *         @arg @ref LL_RCC_PLLSOURCE_HSI
2387   *         @arg @ref LL_RCC_PLLSOURCE_HSE
2388   * @param  PLLM This parameter can be one of the following values:
2389   *         @arg @ref LL_RCC_PLLM_DIV_1
2390   *         @arg @ref LL_RCC_PLLM_DIV_2
2391   *         @arg @ref LL_RCC_PLLM_DIV_3
2392   *         @arg @ref LL_RCC_PLLM_DIV_4
2393   *         @arg @ref LL_RCC_PLLM_DIV_5
2394   *         @arg @ref LL_RCC_PLLM_DIV_6
2395   *         @arg @ref LL_RCC_PLLM_DIV_7
2396   *         @arg @ref LL_RCC_PLLM_DIV_8
2397   *
2398   * @param  PLLN Between 4 and 127
2399   * @param  PLLR This parameter can be one of the following values:
2400   *         @arg @ref LL_RCC_PLLR_DIV_2
2401   *         @arg @ref LL_RCC_PLLR_DIV_4
2402   *         @arg @ref LL_RCC_PLLR_DIV_6
2403   *         @arg @ref LL_RCC_PLLR_DIV_8
2404   * @retval None
2405   */
LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source,uint32_t PLLM,uint32_t PLLN,uint32_t PLLR)2406 __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR)
2407 {
2408   MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLR,
2409              Source | PLLM | PLLN << RCC_PLLCFGR_PLLN_Pos | PLLR);
2410 }
2411 
2412 /**
2413   * @brief  Configure PLL used for Q domain clock
2414   * @note PLL Source and PLLM Divider can be written only when PLL.
2415   * @note PLLN/PLLQ can be written only when PLL is disabled.
2416   * @note This  can be selected for USB, RNG
2417   * @rmtoll PLLCFGR      PLLSRC        LL_RCC_PLL_ConfigDomain_PLLQ\n
2418   *         PLLCFGR      PLLM          LL_RCC_PLL_ConfigDomain_PLLQ\n
2419   *         PLLCFGR      PLLN          LL_RCC_PLL_ConfigDomain_PLLQ\n
2420   *         PLLCFGR      PLLQ          LL_RCC_PLL_ConfigDomain_PLLQ
2421   * @param  Source This parameter can be one of the following values:
2422   *         @arg @ref LL_RCC_PLLSOURCE_NONE
2423   *         @arg @ref LL_RCC_PLLSOURCE_MSI
2424   *         @arg @ref LL_RCC_PLLSOURCE_HSI
2425   *         @arg @ref LL_RCC_PLLSOURCE_HSE
2426   * @param  PLLM This parameter can be one of the following values:
2427   *         @arg @ref LL_RCC_PLLM_DIV_1
2428   *         @arg @ref LL_RCC_PLLM_DIV_2
2429   *         @arg @ref LL_RCC_PLLM_DIV_3
2430   *         @arg @ref LL_RCC_PLLM_DIV_4
2431   *         @arg @ref LL_RCC_PLLM_DIV_5
2432   *         @arg @ref LL_RCC_PLLM_DIV_6
2433   *         @arg @ref LL_RCC_PLLM_DIV_7
2434   *         @arg @ref LL_RCC_PLLM_DIV_8
2435   *
2436   * @param  PLLN Between 4 and 127
2437   * @param  PLLQ This parameter can be one of the following values:
2438   *         @arg @ref LL_RCC_PLLQ_DIV_2
2439   *         @arg @ref LL_RCC_PLLQ_DIV_4
2440   *         @arg @ref LL_RCC_PLLQ_DIV_6
2441   *         @arg @ref LL_RCC_PLLQ_DIV_8
2442   * @retval None
2443   */
LL_RCC_PLL_ConfigDomain_PLLQ(uint32_t Source,uint32_t PLLM,uint32_t PLLN,uint32_t PLLQ)2444 __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_PLLQ(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLQ)
2445 {
2446   MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLQ,
2447              Source | PLLM | (PLLN << RCC_PLLCFGR_PLLN_Pos) | PLLQ);
2448 }
2449 
2450 /**
2451   * @brief  Configure PLL used for P domain clock
2452   * @note PLL Source and PLLM Divider can be written only when PLL.
2453   * @note PLLN/PLLQ can be written only when PLL is disabled.
2454   * @note This  can be selected for ADC, TIM1 , TIM15
2455   * @rmtoll PLLCFGR      PLLSRC        LL_RCC_PLL_ConfigDomain_PLLP\n
2456   *         PLLCFGR      PLLM          LL_RCC_PLL_ConfigDomain_PLLP\n
2457   *         PLLCFGR      PLLN          LL_RCC_PLL_ConfigDomain_PLLP\n
2458   *         PLLCFGR      PLLP          LL_RCC_PLL_ConfigDomain_PLLP
2459   * @param  Source This parameter can be one of the following values:
2460   *         @arg @ref LL_RCC_PLLSOURCE_NONE
2461   *         @arg @ref LL_RCC_PLLSOURCE_MSI
2462   *         @arg @ref LL_RCC_PLLSOURCE_HSI
2463   *         @arg @ref LL_RCC_PLLSOURCE_HSE
2464   * @param  PLLM This parameter can be one of the following values:
2465   *         @arg @ref LL_RCC_PLLM_DIV_1
2466   *         @arg @ref LL_RCC_PLLM_DIV_2
2467   *         @arg @ref LL_RCC_PLLM_DIV_3
2468   *         @arg @ref LL_RCC_PLLM_DIV_4
2469   *         @arg @ref LL_RCC_PLLM_DIV_5
2470   *         @arg @ref LL_RCC_PLLM_DIV_6
2471   *         @arg @ref LL_RCC_PLLM_DIV_7
2472   *         @arg @ref LL_RCC_PLLM_DIV_8
2473   *
2474   * @param  PLLN Between 4 and 127
2475   * @param  PLLP This parameter can be one of the following values:
2476   *         @arg @ref LL_RCC_PLLP_DIV_2
2477   *         @arg @ref LL_RCC_PLLP_DIV_3
2478   *         @arg @ref LL_RCC_PLLP_DIV_4
2479   *         @arg @ref LL_RCC_PLLP_DIV_5
2480   *         @arg @ref LL_RCC_PLLP_DIV_6
2481   *         @arg @ref LL_RCC_PLLP_DIV_7
2482   *         @arg @ref LL_RCC_PLLP_DIV_8
2483   *         @arg @ref LL_RCC_PLLP_DIV_9
2484   *         @arg @ref LL_RCC_PLLP_DIV_10
2485   *         @arg @ref LL_RCC_PLLP_DIV_11
2486   *         @arg @ref LL_RCC_PLLP_DIV_12
2487   *         @arg @ref LL_RCC_PLLP_DIV_13
2488   *         @arg @ref LL_RCC_PLLP_DIV_14
2489   *         @arg @ref LL_RCC_PLLP_DIV_15
2490   *         @arg @ref LL_RCC_PLLP_DIV_16
2491   *         @arg @ref LL_RCC_PLLP_DIV_17
2492   *         @arg @ref LL_RCC_PLLP_DIV_18
2493   *         @arg @ref LL_RCC_PLLP_DIV_19
2494   *         @arg @ref LL_RCC_PLLP_DIV_20
2495   *         @arg @ref LL_RCC_PLLP_DIV_21
2496   *         @arg @ref LL_RCC_PLLP_DIV_22
2497   *         @arg @ref LL_RCC_PLLP_DIV_23
2498   *         @arg @ref LL_RCC_PLLP_DIV_24
2499   *         @arg @ref LL_RCC_PLLP_DIV_25
2500   *         @arg @ref LL_RCC_PLLP_DIV_26
2501   *         @arg @ref LL_RCC_PLLP_DIV_27
2502   *         @arg @ref LL_RCC_PLLP_DIV_28
2503   *         @arg @ref LL_RCC_PLLP_DIV_29
2504   *         @arg @ref LL_RCC_PLLP_DIV_30
2505   *         @arg @ref LL_RCC_PLLP_DIV_31
2506   *         @arg @ref LL_RCC_PLLP_DIV_32
2507   * @retval None
2508   */
LL_RCC_PLL_ConfigDomain_PLLP(uint32_t Source,uint32_t PLLM,uint32_t PLLN,uint32_t PLLP)2509 __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_PLLP(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP)
2510 {
2511   MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLP,
2512              Source | PLLM | (PLLN << RCC_PLLCFGR_PLLN_Pos) | PLLP);
2513 }
2514 
2515 /**
2516   * @brief  Get Main PLL multiplication factor for VCO
2517   * @rmtoll PLLCFGR      PLLN          LL_RCC_PLL_GetN
2518   * @retval Between 4 and 127
2519   */
LL_RCC_PLL_GetN(void)2520 __STATIC_INLINE uint32_t LL_RCC_PLL_GetN(void)
2521 {
2522   return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >>  RCC_PLLCFGR_PLLN_Pos);
2523 }
2524 
2525 /**
2526   * @brief  Get Main PLL division factor for PLLP
2527   * @rmtoll PLLCFGR      PLLPDIV       LL_RCC_PLL_GetP
2528   * @retval Returned value can be one of the following values:
2529   *         @arg @ref LL_RCC_PLLP_DIV_2
2530   *         @arg @ref LL_RCC_PLLP_DIV_3
2531   *         @arg @ref LL_RCC_PLLP_DIV_4
2532   *         @arg @ref LL_RCC_PLLP_DIV_5
2533   *         @arg @ref LL_RCC_PLLP_DIV_6
2534   *         @arg @ref LL_RCC_PLLP_DIV_7
2535   *         @arg @ref LL_RCC_PLLP_DIV_8
2536   *         @arg @ref LL_RCC_PLLP_DIV_9
2537   *         @arg @ref LL_RCC_PLLP_DIV_10
2538   *         @arg @ref LL_RCC_PLLP_DIV_11
2539   *         @arg @ref LL_RCC_PLLP_DIV_12
2540   *         @arg @ref LL_RCC_PLLP_DIV_13
2541   *         @arg @ref LL_RCC_PLLP_DIV_14
2542   *         @arg @ref LL_RCC_PLLP_DIV_15
2543   *         @arg @ref LL_RCC_PLLP_DIV_16
2544   *         @arg @ref LL_RCC_PLLP_DIV_17
2545   *         @arg @ref LL_RCC_PLLP_DIV_18
2546   *         @arg @ref LL_RCC_PLLP_DIV_19
2547   *         @arg @ref LL_RCC_PLLP_DIV_20
2548   *         @arg @ref LL_RCC_PLLP_DIV_21
2549   *         @arg @ref LL_RCC_PLLP_DIV_22
2550   *         @arg @ref LL_RCC_PLLP_DIV_23
2551   *         @arg @ref LL_RCC_PLLP_DIV_24
2552   *         @arg @ref LL_RCC_PLLP_DIV_25
2553   *         @arg @ref LL_RCC_PLLP_DIV_26
2554   *         @arg @ref LL_RCC_PLLP_DIV_27
2555   *         @arg @ref LL_RCC_PLLP_DIV_28
2556   *         @arg @ref LL_RCC_PLLP_DIV_29
2557   *         @arg @ref LL_RCC_PLLP_DIV_30
2558   *         @arg @ref LL_RCC_PLLP_DIV_31
2559   */
LL_RCC_PLL_GetP(void)2560 __STATIC_INLINE uint32_t LL_RCC_PLL_GetP(void)
2561 {
2562   return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLP));
2563 }
2564 
2565 /**
2566   * @brief  Get Main PLL division factor for PLLQ
2567   * @note Used for PLL48M1CLK selected for USB, RNG, SDMMC (48 MHz clock)
2568   * @rmtoll PLLCFGR      PLLQ          LL_RCC_PLL_GetQ
2569   * @retval Returned value can be one of the following values:
2570   *         @arg @ref LL_RCC_PLLQ_DIV_2
2571   *         @arg @ref LL_RCC_PLLQ_DIV_4
2572   *         @arg @ref LL_RCC_PLLQ_DIV_6
2573   *         @arg @ref LL_RCC_PLLQ_DIV_8
2574   */
LL_RCC_PLL_GetQ(void)2575 __STATIC_INLINE uint32_t LL_RCC_PLL_GetQ(void)
2576 {
2577   return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQ));
2578 }
2579 
2580 /**
2581   * @brief  Get Main PLL division factor for PLLR
2582   * @note Used for PLLCLK (system clock)
2583   * @rmtoll PLLCFGR      PLLR          LL_RCC_PLL_GetR
2584   * @retval Returned value can be one of the following values:
2585   *         @arg @ref LL_RCC_PLLR_DIV_2
2586   *         @arg @ref LL_RCC_PLLR_DIV_4
2587   *         @arg @ref LL_RCC_PLLR_DIV_6
2588   *         @arg @ref LL_RCC_PLLR_DIV_8
2589   */
LL_RCC_PLL_GetR(void)2590 __STATIC_INLINE uint32_t LL_RCC_PLL_GetR(void)
2591 {
2592   return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLR));
2593 }
2594 
2595 /**
2596   * @brief  Get the oscillator used as PLL clock source.
2597   * @rmtoll PLLCFGR      PLLSRC        LL_RCC_PLL_GetMainSource
2598   * @retval Returned value can be one of the following values:
2599   *         @arg @ref LL_RCC_PLLSOURCE_NONE
2600   *         @arg @ref LL_RCC_PLLSOURCE_MSI
2601   *         @arg @ref LL_RCC_PLLSOURCE_HSI
2602   *         @arg @ref LL_RCC_PLLSOURCE_HSE
2603   */
LL_RCC_PLL_GetMainSource(void)2604 __STATIC_INLINE uint32_t LL_RCC_PLL_GetMainSource(void)
2605 {
2606   return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC));
2607 }
2608 
2609 /**
2610   * @brief  Get Division factor for the main PLL and other PLL
2611   * @rmtoll PLLCFGR      PLLM          LL_RCC_PLL_GetM
2612   * @retval Returned value can be one of the following values:
2613   *         @arg @ref LL_RCC_PLLM_DIV_1
2614   *         @arg @ref LL_RCC_PLLM_DIV_2
2615   *         @arg @ref LL_RCC_PLLM_DIV_3
2616   *         @arg @ref LL_RCC_PLLM_DIV_4
2617   *         @arg @ref LL_RCC_PLLM_DIV_5
2618   *         @arg @ref LL_RCC_PLLM_DIV_6
2619   *         @arg @ref LL_RCC_PLLM_DIV_7
2620   *         @arg @ref LL_RCC_PLLM_DIV_8
2621   *
2622   */
LL_RCC_PLL_GetM(void)2623 __STATIC_INLINE uint32_t LL_RCC_PLL_GetM(void)
2624 {
2625   return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM));
2626 }
2627 
2628 /**
2629   * @brief  Enable PLL output mapped on P domain clock
2630   * @rmtoll PLLCFGR      PLLPEN        LL_RCC_PLL_EnableDomain_PLLP
2631   * @note   User shall check that PLL enable is not done through
2632   *         other functions (ex: I2S1)
2633   * @retval None
2634   */
LL_RCC_PLL_EnableDomain_PLLP(void)2635 __STATIC_INLINE void LL_RCC_PLL_EnableDomain_PLLP(void)
2636 {
2637   SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLPEN);
2638 }
2639 
2640 /**
2641   * @brief  Disable PLL output mapped on P domain clock
2642   * @note Cannot be disabled if the PLL clock is used as the system clock
2643   * @note   User shall check that PLL is not used by any other peripheral
2644   *         (ex: I2S1)
2645   * @note In order to save power, when the PLLCLK  of the PLL is
2646   *       not used,  should be 0
2647   * @rmtoll PLLCFGR      PLLPEN        LL_RCC_PLL_DisableDomain_PLLP
2648   * @retval None
2649   */
LL_RCC_PLL_DisableDomain_PLLP(void)2650 __STATIC_INLINE void LL_RCC_PLL_DisableDomain_PLLP(void)
2651 {
2652   CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLPEN);
2653 }
2654 
2655 /**
2656   * @brief  Check if PLL output mapped on P domain clock is enabled
2657   * @rmtoll PLLCFGR      PLLPEN        LL_RCC_PLL_IsEnabledDomain_PLLP
2658   * @retval State of bit (1 or 0).
2659   */
LL_RCC_PLL_IsEnabledDomain_PLLP(void)2660 __STATIC_INLINE uint32_t LL_RCC_PLL_IsEnabledDomain_PLLP(void)
2661 {
2662   return ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLPEN) == (RCC_PLLCFGR_PLLPEN)) ? 1UL : 0UL);
2663 }
2664 /**
2665   * @brief  Enable PLL output mapped on 48MHz domain clock
2666   * @rmtoll PLLCFGR      PLLQEN        LL_RCC_PLL_EnableDomain_PLLQ
2667   * @retval None
2668   */
LL_RCC_PLL_EnableDomain_PLLQ(void)2669 __STATIC_INLINE void LL_RCC_PLL_EnableDomain_PLLQ(void)
2670 {
2671   SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQEN);
2672 }
2673 
2674 /**
2675   * @brief  Disable PLL output mapped on 48MHz domain clock
2676   * @note Cannot be disabled if the PLL clock is used as the system
2677   *       clock
2678   * @note In order to save power, when the PLLCLK  of the PLL is
2679   *       not used,  should be 0
2680   * @rmtoll PLLCFGR      PLLQEN        LL_RCC_PLL_DisableDomain_PLLQ
2681   * @retval None
2682   */
LL_RCC_PLL_DisableDomain_PLLQ(void)2683 __STATIC_INLINE void LL_RCC_PLL_DisableDomain_PLLQ(void)
2684 {
2685   CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQEN);
2686 }
2687 
2688 /**
2689   * @brief  Check if PLL output mapped on Q domain clock is enabled
2690   * @rmtoll PLLCFGR      PLLQEN        LL_RCC_PLL_IsEnabledDomain_PLLQ
2691   * @retval State of bit (1 or 0).
2692   */
LL_RCC_PLL_IsEnabledDomain_PLLQ(void)2693 __STATIC_INLINE uint32_t LL_RCC_PLL_IsEnabledDomain_PLLQ(void)
2694 {
2695   return ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQEN) == (RCC_PLLCFGR_PLLQEN)) ? 1UL : 0UL);
2696 }
2697 
2698 /**
2699   * @brief  Enable PLL output mapped on SYSCLK domain
2700   * @rmtoll PLLCFGR      PLLREN        LL_RCC_PLL_EnableDomain_SYS
2701   * @retval None
2702   */
LL_RCC_PLL_EnableDomain_SYS(void)2703 __STATIC_INLINE void LL_RCC_PLL_EnableDomain_SYS(void)
2704 {
2705   SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLREN);
2706 }
2707 
2708 /**
2709   * @brief  Disable PLL output mapped on SYSCLK domain
2710   * @note Cannot be disabled if the PLL clock is used as the system
2711   *       clock
2712   * @note In order to save power, when the PLLCLK  of the PLL is
2713   *       not used, Main PLL  should be 0
2714   * @rmtoll PLLCFGR      PLLREN        LL_RCC_PLL_DisableDomain_SYS
2715   * @retval None
2716   */
LL_RCC_PLL_DisableDomain_SYS(void)2717 __STATIC_INLINE void LL_RCC_PLL_DisableDomain_SYS(void)
2718 {
2719   CLEAR_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLREN);
2720 }
2721 
2722 /**
2723   * @brief  Check if PLL output mapped on tR(SYS) domain clock is enabled
2724   * @rmtoll PLLCFGR      PLLREN        LL_RCC_PLL_IsEnabledDomain_SYS
2725   * @retval State of bit (1 or 0).
2726   */
LL_RCC_PLL_IsEnabledDomain_SYS(void)2727 __STATIC_INLINE uint32_t LL_RCC_PLL_IsEnabledDomain_SYS(void)
2728 {
2729   return ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLREN) == (RCC_PLLCFGR_PLLREN)) ? 1UL : 0UL);
2730 }
2731 
2732 /**
2733   * @}
2734   */
2735 
2736 /** @defgroup RCC_LL_EF_FLAG_Management FLAG Management
2737   * @{
2738   */
2739 
2740 /**
2741   * @brief  Clear LSI ready interrupt flag
2742   * @rmtoll CICR         LSIRDYC       LL_RCC_ClearFlag_LSIRDY
2743   * @retval None
2744   */
LL_RCC_ClearFlag_LSIRDY(void)2745 __STATIC_INLINE void LL_RCC_ClearFlag_LSIRDY(void)
2746 {
2747   SET_BIT(RCC->CICR, RCC_CICR_LSIRDYC);
2748 }
2749 
2750 /**
2751   * @brief  Clear LSE ready interrupt flag
2752   * @rmtoll CICR         LSERDYC       LL_RCC_ClearFlag_LSERDY
2753   * @retval None
2754   */
LL_RCC_ClearFlag_LSERDY(void)2755 __STATIC_INLINE void LL_RCC_ClearFlag_LSERDY(void)
2756 {
2757   SET_BIT(RCC->CICR, RCC_CICR_LSERDYC);
2758 }
2759 
2760 /**
2761   * @brief  Clear MSI ready interrupt flag
2762   * @rmtoll CICR         MSIRDYC       LL_RCC_ClearFlag_MSIRDY
2763   * @retval None
2764   */
LL_RCC_ClearFlag_MSIRDY(void)2765 __STATIC_INLINE void LL_RCC_ClearFlag_MSIRDY(void)
2766 {
2767   SET_BIT(RCC->CICR, RCC_CICR_MSIRDYC);
2768 }
2769 
2770 /**
2771   * @brief  Clear HSI ready interrupt flag
2772   * @rmtoll CICR         HSIRDYC       LL_RCC_ClearFlag_HSIRDY
2773   * @retval None
2774   */
LL_RCC_ClearFlag_HSIRDY(void)2775 __STATIC_INLINE void LL_RCC_ClearFlag_HSIRDY(void)
2776 {
2777   SET_BIT(RCC->CICR, RCC_CICR_HSIRDYC);
2778 }
2779 
2780 /**
2781   * @brief  Clear HSE ready interrupt flag
2782   * @rmtoll CICR         HSERDYC       LL_RCC_ClearFlag_HSERDY
2783   * @retval None
2784   */
LL_RCC_ClearFlag_HSERDY(void)2785 __STATIC_INLINE void LL_RCC_ClearFlag_HSERDY(void)
2786 {
2787   SET_BIT(RCC->CICR, RCC_CICR_HSERDYC);
2788 }
2789 
2790 /**
2791   * @brief  Clear PLL ready interrupt flag
2792   * @rmtoll CICR         PLLRDYC       LL_RCC_ClearFlag_PLLRDY
2793   * @retval None
2794   */
LL_RCC_ClearFlag_PLLRDY(void)2795 __STATIC_INLINE void LL_RCC_ClearFlag_PLLRDY(void)
2796 {
2797   SET_BIT(RCC->CICR, RCC_CICR_PLLRDYC);
2798 }
2799 
2800 /**
2801   * @brief  Clear Clock security system interrupt flag
2802   * @rmtoll CICR         CSSC          LL_RCC_ClearFlag_HSECSS
2803   * @retval None
2804   */
LL_RCC_ClearFlag_CSS(void)2805 __STATIC_INLINE void LL_RCC_ClearFlag_CSS(void)
2806 {
2807   SET_BIT(RCC->CICR, RCC_CICR_CSSC);
2808 }
2809 
2810 /**
2811   * @brief  Clear LSE Clock security system interrupt flag
2812   * @rmtoll CICR         LSECSSC       LL_RCC_ClearFlag_LSECSS
2813   * @retval None
2814   */
LL_RCC_ClearFlag_LSECSS(void)2815 __STATIC_INLINE void LL_RCC_ClearFlag_LSECSS(void)
2816 {
2817   SET_BIT(RCC->CICR, RCC_CICR_LSECSSC);
2818 }
2819 #if defined(RCC_CRRCR_HSI48ON)
2820 /**
2821   * @brief  Clear LSE Clock security system interrupt flag
2822   * @rmtoll CICR         HSI48RDYC       LL_RCC_ClearFlag_HSI48RDY
2823   * @retval None
2824   */
LL_RCC_ClearFlag_HSI48RDY(void)2825 __STATIC_INLINE void LL_RCC_ClearFlag_HSI48RDY(void)
2826 {
2827   SET_BIT(RCC->CICR, RCC_CICR_HSI48RDYC);
2828 }
2829 #endif /* RCC_CRRCR_HSI48ON */
2830 /**
2831   * @brief  Check if LSI ready interrupt occurred or not
2832   * @rmtoll CIFR         LSIRDYF       LL_RCC_IsActiveFlag_LSIRDY
2833   * @retval State of bit (1 or 0).
2834   */
LL_RCC_IsActiveFlag_LSIRDY(void)2835 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSIRDY(void)
2836 {
2837   return ((READ_BIT(RCC->CIFR, RCC_CIFR_LSIRDYF) == (RCC_CIFR_LSIRDYF)) ? 1UL : 0UL);
2838 }
2839 
2840 /**
2841   * @brief  Check if LSE ready interrupt occurred or not
2842   * @rmtoll CIFR         LSERDYF       LL_RCC_IsActiveFlag_LSERDY
2843   * @retval State of bit (1 or 0).
2844   */
LL_RCC_IsActiveFlag_LSERDY(void)2845 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSERDY(void)
2846 {
2847   return ((READ_BIT(RCC->CIFR, RCC_CIFR_LSERDYF) == (RCC_CIFR_LSERDYF)) ? 1UL : 0UL);
2848 }
2849 
2850 /**
2851   * @brief  Check if MSI ready interrupt occurred or not
2852   * @rmtoll CIFR         MSIRDYF       LL_RCC_IsActiveFlag_MSIRDY
2853   * @retval State of bit (1 or 0).
2854   */
LL_RCC_IsActiveFlag_MSIRDY(void)2855 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_MSIRDY(void)
2856 {
2857   return ((READ_BIT(RCC->CIFR, RCC_CIFR_MSIRDYF) == (RCC_CIFR_MSIRDYF)) ? 1UL : 0UL);
2858 }
2859 
2860 /**
2861   * @brief  Check if HSI ready interrupt occurred or not
2862   * @rmtoll CIFR         HSIRDYF       LL_RCC_IsActiveFlag_HSIRDY
2863   * @retval State of bit (1 or 0).
2864   */
LL_RCC_IsActiveFlag_HSIRDY(void)2865 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSIRDY(void)
2866 {
2867   return ((READ_BIT(RCC->CIFR, RCC_CIFR_HSIRDYF) == (RCC_CIFR_HSIRDYF)) ? 1UL : 0UL);
2868 }
2869 
2870 /**
2871   * @brief  Check if HSE ready interrupt occurred or not
2872   * @rmtoll CIFR         HSERDYF       LL_RCC_IsActiveFlag_HSERDY
2873   * @retval State of bit (1 or 0).
2874   */
LL_RCC_IsActiveFlag_HSERDY(void)2875 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSERDY(void)
2876 {
2877   return ((READ_BIT(RCC->CIFR, RCC_CIFR_HSERDYF) == (RCC_CIFR_HSERDYF)) ? 1UL : 0UL);
2878 }
2879 
2880 /**
2881   * @brief  Check if PLL ready interrupt occurred or not
2882   * @rmtoll CIFR         PLLRDYF       LL_RCC_IsActiveFlag_PLLRDY
2883   * @retval State of bit (1 or 0).
2884   */
LL_RCC_IsActiveFlag_PLLRDY(void)2885 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLRDY(void)
2886 {
2887   return ((READ_BIT(RCC->CIFR, RCC_CIFR_PLLRDYF) == (RCC_CIFR_PLLRDYF)) ? 1UL : 0UL);
2888 }
2889 #if defined(RCC_CRRCR_HSI48ON)
2890 /**
2891   * @brief  Check if HSI48 ready interrupt occurred or not
2892   * @rmtoll CIR          HSI48RDYF     LL_RCC_IsActiveFlag_HSI48RDY
2893   * @retval State of bit (1 or 0).
2894   */
LL_RCC_IsActiveFlag_HSI48RDY(void)2895 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSI48RDY(void)
2896 {
2897   return ((READ_BIT(RCC->CIFR, RCC_CIFR_HSI48RDYF) == (RCC_CIFR_HSI48RDYF)) ? 1UL : 0UL);
2898 }
2899 #endif /* RCC_CRRCR_HSI48ON */
2900 /**
2901   * @brief  Check if Clock security system interrupt occurred or not
2902   * @rmtoll CIFR         CSSF          LL_RCC_IsActiveFlag_HSECSS
2903   * @retval State of bit (1 or 0).
2904   */
LL_RCC_IsActiveFlag_LSECSS(void)2905 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSECSS(void)
2906 {
2907   return ((READ_BIT(RCC->CIFR, RCC_CIFR_LSECSSF) == (RCC_CIFR_LSECSSF)) ? 1UL : 0UL);
2908 }
2909 
2910 /**
2911   * @brief  Check if LSE Clock security system interrupt occurred or not
2912   * @rmtoll CIFR         LSECSSF       LL_RCC_IsActiveFlag_LSECSS
2913   * @retval State of bit (1 or 0).
2914   */
LL_RCC_IsActiveFlag_CSS(void)2915 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_CSS(void)
2916 {
2917   return ((READ_BIT(RCC->CIFR, RCC_CIFR_CSSF) == (RCC_CIFR_CSSF)) ? 1UL : 0UL);
2918 }
2919 
2920 /**
2921   * @brief  Check if RCC flag Watchdog reset is set or not.
2922   * @rmtoll CSR          IWDGRSTF      LL_RCC_IsActiveFlag_IWDGRST
2923   * @retval State of bit (1 or 0).
2924   */
LL_RCC_IsActiveFlag_IWDGRST(void)2925 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_IWDGRST(void)
2926 {
2927   return ((READ_BIT(RCC->CSR, RCC_CSR_IWDGRSTF) == (RCC_CSR_IWDGRSTF)) ? 1UL : 0UL);
2928 }
2929 
2930 /**
2931   * @brief  Check if RCC flag Low Power reset is set or not.
2932   * @rmtoll CSR          LPWRRSTF      LL_RCC_IsActiveFlag_LPWRRST
2933   * @retval State of bit (1 or 0).
2934   */
LL_RCC_IsActiveFlag_LPWRRST(void)2935 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LPWRRST(void)
2936 {
2937   return ((READ_BIT(RCC->CSR, RCC_CSR_LPWRRSTF) == (RCC_CSR_LPWRRSTF)) ? 1UL : 0UL);
2938 }
2939 
2940 /**
2941   * @brief  Check if RCC flag is set or not.
2942   * @rmtoll CSR          OBLRSTF       LL_RCC_IsActiveFlag_OBLRST
2943   * @retval State of bit (1 or 0).
2944   */
LL_RCC_IsActiveFlag_OBLRST(void)2945 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_OBLRST(void)
2946 {
2947   return ((READ_BIT(RCC->CSR, RCC_CSR_OBLRSTF) == (RCC_CSR_OBLRSTF)) ? 1UL : 0UL);
2948 }
2949 
2950 /**
2951   * @brief  Check if RCC flag Pin reset is set or not.
2952   * @rmtoll CSR          PINRSTF       LL_RCC_IsActiveFlag_PINRST
2953   * @retval State of bit (1 or 0).
2954   */
LL_RCC_IsActiveFlag_PINRST(void)2955 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PINRST(void)
2956 {
2957   return ((READ_BIT(RCC->CSR, RCC_CSR_PINRSTF) == (RCC_CSR_PINRSTF)) ? 1UL : 0UL);
2958 }
2959 
2960 /**
2961   * @brief  Check if RCC flag Software reset is set or not.
2962   * @rmtoll CSR          SFTRSTF       LL_RCC_IsActiveFlag_SFTRST
2963   * @retval State of bit (1 or 0).
2964   */
LL_RCC_IsActiveFlag_SFTRST(void)2965 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_SFTRST(void)
2966 {
2967   return ((READ_BIT(RCC->CSR, RCC_CSR_SFTRSTF) == (RCC_CSR_SFTRSTF)) ? 1UL : 0UL);
2968 }
2969 
2970 /**
2971   * @brief  Check if RCC flag Window Watchdog reset is set or not.
2972   * @rmtoll CSR          WWDGRSTF      LL_RCC_IsActiveFlag_WWDGRST
2973   * @retval State of bit (1 or 0).
2974   */
LL_RCC_IsActiveFlag_WWDGRST(void)2975 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_WWDGRST(void)
2976 {
2977   return ((READ_BIT(RCC->CSR, RCC_CSR_WWDGRSTF) == (RCC_CSR_WWDGRSTF)) ? 1UL : 0UL);
2978 }
2979 
2980 /**
2981   * @brief  Check if RCC flag PWR reset is set or not.
2982   * @rmtoll CSR          PWRRSTF       LL_RCC_IsActiveFlag_PWRRST
2983   * @retval State of bit (1 or 0).
2984   */
LL_RCC_IsActiveFlag_PWRRST(void)2985 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PWRRST(void)
2986 {
2987   return ((READ_BIT(RCC->CSR, RCC_CSR_PWRRSTF) == (RCC_CSR_PWRRSTF)) ? 1UL : 0UL);
2988 }
2989 
2990 /**
2991   * @brief  Set RMVF bit to clear the reset flags.
2992   * @rmtoll CSR          RMVF          LL_RCC_ClearResetFlags
2993   * @retval None
2994   */
LL_RCC_ClearResetFlags(void)2995 __STATIC_INLINE void LL_RCC_ClearResetFlags(void)
2996 {
2997   SET_BIT(RCC->CSR, RCC_CSR_RMVF);
2998 }
2999 
3000 /**
3001   * @}
3002   */
3003 
3004 /** @defgroup RCC_LL_EF_IT_Management IT Management
3005   * @{
3006   */
3007 
3008 /**
3009   * @brief  Enable LSI ready interrupt
3010   * @rmtoll CIER         LSIRDYIE      LL_RCC_EnableIT_LSIRDY
3011   * @retval None
3012   */
LL_RCC_EnableIT_LSIRDY(void)3013 __STATIC_INLINE void LL_RCC_EnableIT_LSIRDY(void)
3014 {
3015   SET_BIT(RCC->CIER, RCC_CIER_LSIRDYIE);
3016 }
3017 
3018 /**
3019   * @brief  Enable LSE ready interrupt
3020   * @rmtoll CIER         LSERDYIE      LL_RCC_EnableIT_LSERDY
3021   * @retval None
3022   */
LL_RCC_EnableIT_LSERDY(void)3023 __STATIC_INLINE void LL_RCC_EnableIT_LSERDY(void)
3024 {
3025   SET_BIT(RCC->CIER, RCC_CIER_LSERDYIE);
3026 }
3027 
3028 /**
3029   * @brief  Enable MSI ready interrupt
3030   * @rmtoll CIER         MSIRDYIE      LL_RCC_EnableIT_MSIRDY
3031   * @retval None
3032   */
LL_RCC_EnableIT_MSIRDY(void)3033 __STATIC_INLINE void LL_RCC_EnableIT_MSIRDY(void)
3034 {
3035   SET_BIT(RCC->CIER, RCC_CIER_MSIRDYIE);
3036 }
3037 
3038 /**
3039   * @brief  Enable HSI ready interrupt
3040   * @rmtoll CIER         HSIRDYIE      LL_RCC_EnableIT_HSIRDY
3041   * @retval None
3042   */
LL_RCC_EnableIT_HSIRDY(void)3043 __STATIC_INLINE void LL_RCC_EnableIT_HSIRDY(void)
3044 {
3045   SET_BIT(RCC->CIER, RCC_CIER_HSIRDYIE);
3046 }
3047 
3048 /**
3049   * @brief  Enable HSE ready interrupt
3050   * @rmtoll CIER         HSERDYIE      LL_RCC_EnableIT_HSERDY
3051   * @retval None
3052   */
LL_RCC_EnableIT_HSERDY(void)3053 __STATIC_INLINE void LL_RCC_EnableIT_HSERDY(void)
3054 {
3055   SET_BIT(RCC->CIER, RCC_CIER_HSERDYIE);
3056 }
3057 
3058 /**
3059   * @brief  Enable PLL ready interrupt
3060   * @rmtoll CIER         PLLRDYIE      LL_RCC_EnableIT_PLLRDY
3061   * @retval None
3062   */
LL_RCC_EnableIT_PLLRDY(void)3063 __STATIC_INLINE void LL_RCC_EnableIT_PLLRDY(void)
3064 {
3065   SET_BIT(RCC->CIER, RCC_CIER_PLLRDYIE);
3066 }
3067 #if defined(RCC_CRRCR_HSI48ON)
3068 /**
3069   * @brief  Enable HSI48 ready interrupt
3070   * @rmtoll CIER          HSI48RDYIE    LL_RCC_EnableIT_HSI48RDY
3071   * @retval None
3072   */
LL_RCC_EnableIT_HSI48RDY(void)3073 __STATIC_INLINE void LL_RCC_EnableIT_HSI48RDY(void)
3074 {
3075   SET_BIT(RCC->CIER, RCC_CIER_HSI48RDYIE);
3076 }
3077 #endif /* RCC_CRRCR_HSI48ON */
3078 /**
3079   * @brief  Enable LSE clock security system interrupt
3080   * @rmtoll CIER         LSECSSIE      LL_RCC_EnableIT_LSECSS
3081   * @retval None
3082   */
LL_RCC_EnableIT_LSECSS(void)3083 __STATIC_INLINE void LL_RCC_EnableIT_LSECSS(void)
3084 {
3085   SET_BIT(RCC->CIER, RCC_CIER_LSECSSIE);
3086 }
3087 
3088 /**
3089   * @brief  Disable LSI ready interrupt
3090   * @rmtoll CIER         LSIRDYIE      LL_RCC_DisableIT_LSIRDY
3091   * @retval None
3092   */
LL_RCC_DisableIT_LSIRDY(void)3093 __STATIC_INLINE void LL_RCC_DisableIT_LSIRDY(void)
3094 {
3095   CLEAR_BIT(RCC->CIER, RCC_CIER_LSIRDYIE);
3096 }
3097 
3098 /**
3099   * @brief  Disable LSE ready interrupt
3100   * @rmtoll CIER         LSERDYIE      LL_RCC_DisableIT_LSERDY
3101   * @retval None
3102   */
LL_RCC_DisableIT_LSERDY(void)3103 __STATIC_INLINE void LL_RCC_DisableIT_LSERDY(void)
3104 {
3105   CLEAR_BIT(RCC->CIER, RCC_CIER_LSERDYIE);
3106 }
3107 
3108 /**
3109   * @brief  Disable MSI ready interrupt
3110   * @rmtoll CIER         MSIRDYIE      LL_RCC_DisableIT_MSIRDY
3111   * @retval None
3112   */
LL_RCC_DisableIT_MSIRDY(void)3113 __STATIC_INLINE void LL_RCC_DisableIT_MSIRDY(void)
3114 {
3115   CLEAR_BIT(RCC->CIER, RCC_CIER_MSIRDYIE);
3116 }
3117 
3118 /**
3119   * @brief  Disable HSI ready interrupt
3120   * @rmtoll CIER         HSIRDYIE      LL_RCC_DisableIT_HSIRDY
3121   * @retval None
3122   */
LL_RCC_DisableIT_HSIRDY(void)3123 __STATIC_INLINE void LL_RCC_DisableIT_HSIRDY(void)
3124 {
3125   CLEAR_BIT(RCC->CIER, RCC_CIER_HSIRDYIE);
3126 }
3127 
3128 /**
3129   * @brief  Disable HSE ready interrupt
3130   * @rmtoll CIER         HSERDYIE      LL_RCC_DisableIT_HSERDY
3131   * @retval None
3132   */
LL_RCC_DisableIT_HSERDY(void)3133 __STATIC_INLINE void LL_RCC_DisableIT_HSERDY(void)
3134 {
3135   CLEAR_BIT(RCC->CIER, RCC_CIER_HSERDYIE);
3136 }
3137 
3138 /**
3139   * @brief  Disable PLL ready interrupt
3140   * @rmtoll CIER         PLLRDYIE      LL_RCC_DisableIT_PLLRDY
3141   * @retval None
3142   */
LL_RCC_DisableIT_PLLRDY(void)3143 __STATIC_INLINE void LL_RCC_DisableIT_PLLRDY(void)
3144 {
3145   CLEAR_BIT(RCC->CIER, RCC_CIER_PLLRDYIE);
3146 }
3147 #if defined(RCC_CRRCR_HSI48ON)
3148 /**
3149   * @brief  Disable HSI48 ready interrupt
3150   * @rmtoll CIER          HSI48RDYIE    LL_RCC_DisableIT_HSI48RDY
3151   * @retval None
3152   */
LL_RCC_DisableIT_HSI48RDY(void)3153 __STATIC_INLINE void LL_RCC_DisableIT_HSI48RDY(void)
3154 {
3155   CLEAR_BIT(RCC->CIER, RCC_CIER_HSI48RDYIE);
3156 }
3157 #endif /* RCC_CRRCR_HSI48ON */
3158 /**
3159   * @brief  Disable LSE clock security system interrupt
3160   * @rmtoll CIER         LSECSSIE      LL_RCC_DisableIT_LSECSS
3161   * @retval None
3162   */
LL_RCC_DisableIT_LSECSS(void)3163 __STATIC_INLINE void LL_RCC_DisableIT_LSECSS(void)
3164 {
3165   CLEAR_BIT(RCC->CIER, RCC_CIER_LSECSSIE);
3166 }
3167 
3168 /**
3169   * @brief  Checks if LSI ready interrupt source is enabled or disabled.
3170   * @rmtoll CIER         LSIRDYIE      LL_RCC_IsEnabledIT_LSIRDY
3171   * @retval State of bit (1 or 0).
3172   */
LL_RCC_IsEnabledIT_LSIRDY(void)3173 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSIRDY(void)
3174 {
3175   return ((READ_BIT(RCC->CIER, RCC_CIER_LSIRDYIE) == (RCC_CIER_LSIRDYIE)) ? 1UL : 0UL);
3176 }
3177 
3178 /**
3179   * @brief  Checks if LSE ready interrupt source is enabled or disabled.
3180   * @rmtoll CIER         LSERDYIE      LL_RCC_IsEnabledIT_LSERDY
3181   * @retval State of bit (1 or 0).
3182   */
LL_RCC_IsEnabledIT_LSERDY(void)3183 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSERDY(void)
3184 {
3185   return ((READ_BIT(RCC->CIER, RCC_CIER_LSERDYIE) == (RCC_CIER_LSERDYIE)) ? 1UL : 0UL);
3186 }
3187 
3188 /**
3189   * @brief  Checks if MSI ready interrupt source is enabled or disabled.
3190   * @rmtoll CIER         MSIRDYIE      LL_RCC_IsEnabledIT_MSIRDY
3191   * @retval State of bit (1 or 0).
3192   */
LL_RCC_IsEnabledIT_MSIRDY(void)3193 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_MSIRDY(void)
3194 {
3195   return ((READ_BIT(RCC->CIER, RCC_CIER_MSIRDYIE) == (RCC_CIER_MSIRDYIE)) ? 1UL : 0UL);
3196 }
3197 
3198 /**
3199   * @brief  Checks if HSI ready interrupt source is enabled or disabled.
3200   * @rmtoll CIER         HSIRDYIE      LL_RCC_IsEnabledIT_HSIRDY
3201   * @retval State of bit (1 or 0).
3202   */
LL_RCC_IsEnabledIT_HSIRDY(void)3203 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSIRDY(void)
3204 {
3205   return ((READ_BIT(RCC->CIER, RCC_CIER_HSIRDYIE) == (RCC_CIER_HSIRDYIE)) ? 1UL : 0UL);
3206 }
3207 
3208 /**
3209   * @brief  Checks if HSE ready interrupt source is enabled or disabled.
3210   * @rmtoll CIER         HSERDYIE      LL_RCC_IsEnabledIT_HSERDY
3211   * @retval State of bit (1 or 0).
3212   */
LL_RCC_IsEnabledIT_HSERDY(void)3213 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSERDY(void)
3214 {
3215   return ((READ_BIT(RCC->CIER, RCC_CIER_HSERDYIE) == (RCC_CIER_HSERDYIE)) ? 1UL : 0UL);
3216 }
3217 
3218 /**
3219   * @brief  Checks if PLL ready interrupt source is enabled or disabled.
3220   * @rmtoll CIER         PLLRDYIE      LL_RCC_IsEnabledIT_PLLRDY
3221   * @retval State of bit (1 or 0).
3222   */
LL_RCC_IsEnabledIT_PLLRDY(void)3223 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLRDY(void)
3224 {
3225   return ((READ_BIT(RCC->CIER, RCC_CIER_PLLRDYIE) == (RCC_CIER_PLLRDYIE)) ? 1UL : 0UL);
3226 }
3227 #if defined(RCC_CRRCR_HSI48ON)
3228 /**
3229   * @brief  Checks if HSI48 ready interrupt source is enabled or disabled.
3230   * @rmtoll CIER          HSI48RDYIE    LL_RCC_IsEnabledIT_HSI48RDY
3231   * @retval State of bit (1 or 0).
3232   */
LL_RCC_IsEnabledIT_HSI48RDY(void)3233 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSI48RDY(void)
3234 {
3235   return ((READ_BIT(RCC->CIER, RCC_CIER_HSI48RDYIE) == (RCC_CIER_HSI48RDYIE)) ? 1UL : 0UL);
3236 }
3237 #endif /* RCC_CRRCR_HSI48ON */
3238 /**
3239   * @brief  Checks if LSECSS interrupt source is enabled or disabled.
3240   * @rmtoll CIER         LSECSSIE      LL_RCC_IsEnabledIT_LSECSS
3241   * @retval State of bit (1 or 0).
3242   */
LL_RCC_IsEnabledIT_LSECSS(void)3243 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSECSS(void)
3244 {
3245   return ((READ_BIT(RCC->CIER, RCC_CIER_LSECSSIE) == (RCC_CIER_LSECSSIE)) ? 1UL : 0UL);
3246 }
3247 
3248 /**
3249   * @}
3250   */
3251 
3252 #if defined(USE_FULL_LL_DRIVER)
3253 /** @defgroup RCC_LL_EF_Init De-initialization function
3254   * @{
3255   */
3256 ErrorStatus LL_RCC_DeInit(void);
3257 /**
3258   * @}
3259   */
3260 
3261 /** @defgroup RCC_LL_EF_Get_Freq Get system and peripherals clocks frequency functions
3262   * @{
3263   */
3264 void        LL_RCC_GetSystemClocksFreq(LL_RCC_ClocksTypeDef *RCC_Clocks);
3265 uint32_t    LL_RCC_GetUSARTClockFreq(uint32_t USARTxSource);
3266 uint32_t    LL_RCC_GetI2CClockFreq(uint32_t I2CxSource);
3267 uint32_t    LL_RCC_GetLPUARTClockFreq(uint32_t LPUARTxSource);
3268 uint32_t    LL_RCC_GetTIMClockFreq(uint32_t TIMxSource);
3269 uint32_t    LL_RCC_GetLPTIMClockFreq(uint32_t LPTIMxSource);
3270 uint32_t    LL_RCC_GetRNGClockFreq(uint32_t RNGxSource);
3271 #if defined (USB_DRD_FS)
3272 uint32_t    LL_RCC_GetUSBClockFreq(uint32_t USBxSource);
3273 #endif /* USB_DRD_FS */
3274 uint32_t    LL_RCC_GetRTCClockFreq(void);
3275 uint32_t    LL_RCC_GetADCClockFreq(uint32_t ADCxSource);
3276 /**
3277   * @}
3278   */
3279 #endif /* USE_FULL_LL_DRIVER */
3280 
3281 /**
3282   * @}
3283   */
3284 
3285 /**
3286   * @}
3287   */
3288 
3289 #endif /* RCC */
3290 
3291 /**
3292   * @}
3293   */
3294 
3295 #ifdef __cplusplus
3296 }
3297 #endif
3298 
3299 #endif /* __STM32U0xx_LL_RCC_H */
3300