1 /**
2   ******************************************************************************
3   * @file    stm32wb0x_ll_rcc.h
4   * @author  MCD Application Team
5   * @brief   Header file of RCC LL module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2024 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 STM32WB0x_LL_RCC_H
21 #define STM32WB0x_LL_RCC_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif /* __cplusplus */
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32wb0x.h"
29 
30 /** @addtogroup STM32WB0x_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 /** @defgroup RCC_LL_Private_Variables RCC Private Variables
43   * @{
44   */
45 
46 /**
47   * @}
48   */
49 
50 /* Private constants ---------------------------------------------------------*/
51 /* Private macros ------------------------------------------------------------*/
52 #if defined(USE_FULL_LL_DRIVER)
53 /** @defgroup RCC_LL_Private_Macros RCC Private Macros
54   * @{
55   */
56 /**
57   * @}
58   */
59 #endif /*USE_FULL_LL_DRIVER*/
60 
61 /* Exported types ------------------------------------------------------------*/
62 #if defined(USE_FULL_LL_DRIVER)
63 /** @defgroup RCC_LL_Exported_Types RCC Exported Types
64   * @{
65   */
66 
67 /** @defgroup LL_ES_CLOCK_FREQ Clocks Frequency Structure
68   * @{
69  */
70 
71 /**
72   * @brief  RCC Clocks Frequency Structure
73   */
74 typedef struct
75 {
76   uint32_t SYSCLK_Frequency;         /*!< SYSCLK clock frequency */
77 } LL_RCC_ClocksTypeDef;
78 
79 /**
80   * @}
81   */
82 
83 /**
84   * @}
85   */
86 #endif /* USE_FULL_LL_DRIVER */
87 
88 /* Exported constants --------------------------------------------------------*/
89 /** @defgroup RCC_LL_Exported_Constants RCC Exported Constants
90   * @{
91   */
92 
93 /** @defgroup RCC_LL_EC_OSC_VALUES Oscillator Values adaptation
94   * @brief    Defines used to adapt values of different oscillators
95   * @note     These values could be modified in the user environment according to
96   *           HW set-up.
97   * @{
98   */
99 #if !defined  (HSE_VALUE)
100 #define HSE_VALUE    32000000U  /*!< Value of the HSE oscillator in Hz */
101 #endif /* HSE_VALUE */
102 
103 #if !defined  (HSI_VALUE)
104 #define HSI_VALUE    64000000U  /*!< Value of the HSI oscillator in Hz */
105 #endif /* HSI_VALUE */
106 
107 #if !defined  (RC64MPLL_VALUE)
108 #define RC64MPLL_VALUE    64000000U  /*!< Value of the RC 64 MHz PLL clock in Hz */
109 #endif /* HSI_VALUE */
110 
111 #if !defined  (LSE_VALUE)
112 #define LSE_VALUE    32768U     /*!< Value of the LSE oscillator in Hz */
113 #endif /* LSE_VALUE */
114 
115 #if !defined  (LSI_VALUE)
116 #define LSI_VALUE    32000U     /*!< Value of the LSI oscillator in Hz */
117 #endif /* LSI_VALUE */
118 
119 /**
120   * @}
121   */
122 
123 /** @defgroup RCC_LL_EC_GET_CLEAR_FLAG Ready Interrupt Flags Defines
124   * @brief    Flags defines which can be used with LL_RCC_ReadReg LL_RCC_WriteReg function
125   * @{
126   */
127 #define LL_RCC_CIFR_LSIRDYF               RCC_CIFR_LSIRDYF     /*!< LSI Ready Interrupt Flag/Clear */
128 #define LL_RCC_CIFR_LSERDYF               RCC_CIFR_LSERDYF     /*!< LSE Ready Interrupt Flag/Clear */
129 #define LL_RCC_CIFR_HSIRDYF               RCC_CIFR_HSIRDYF     /*!< HSI Ready Interrupt Flag/Clear */
130 #define LL_RCC_CIFR_HSERDYF               RCC_CIFR_HSERDYF     /*!< HSE Ready Interrupt Flag/Clear */
131 #define LL_RCC_CIFR_PLLRDYF               RCC_CIFR_HSIPLLRDYF  /*!< PLL Ready Interrupt Flag/Clear */
132 #define LL_RCC_CIFR_PLLUNLOCKDETF         RCC_CIFR_HSIPLLUNLOCKDETF  /*!< PLL Unlock Interrupt Flag/Clear        */
133 #define LL_RCC_CIFR_RTCRSTRELF            RCC_CIFR_RTCRSTF  /*!< RTC Reset Release Interrupt Flag/Clear */
134 #define LL_RCC_CIFR_WDGRSTRELF            RCC_CIFR_WDGRSTF  /*!< WDG Reset Release Interrupt Flag/Clear */
135 #if defined(RCC_CIFR_LPURSTF)
136 #define LL_RCC_CIFR_LPURSTRELF            RCC_CIFR_LPURSTF  /*!< LPUART Reset Release Interrupt Flag/Clear */
137 #endif
138 
139 /**
140   * @}
141   */
142 
143 /** @defgroup RCC_LL_EC_GET_FLAG Reset Flags Defines
144   * @brief    Flags defines which can be used with LL_RCC_ReadReg function
145   * @{
146   */
147 #define LL_RCC_CSR_LOCKUPRSTF              RCC_CSR_LOCKUPRSTF   /*!< CPU lockup reset flag */
148 #define LL_RCC_CSR_WDGRSTF                 RCC_CSR_WDGRSTF      /*!< Watchdog reset flag */
149 #define LL_RCC_CSR_SFTRSTF                 RCC_CSR_SFTRSTF      /*!< Software reset flag */
150 #define LL_RCC_CSR_PORRSTF                 RCC_CSR_PORRSTF      /*!< Power-On or BOR reset flag */
151 #define LL_RCC_CSR_PADRSTF                 RCC_CSR_PADRSTF      /*!< NRSTn pad reset flag */
152 /**
153   * @}
154   */
155 
156 /** @defgroup RCC_LL_EC_IT IT Enable Defines
157   * @brief    IT defines which can be used with LL_RCC_ReadReg and  LL_RCC_WriteReg functions
158   * @{
159   */
160 #define LL_RCC_CIER_PLLRDYIE               RCC_CIER_HSIPLLRDYIE   /*!< PLL ready interrupt enable */
161 #define LL_RCC_CIER_HSERDYIE               RCC_CIER_HSERDYIE      /*!< HSE ready interrupt enable */
162 #define LL_RCC_CIER_HSIRDYIE               RCC_CIER_HSIRDYIE      /*!< HSI ready interrupt enable */
163 #define LL_RCC_CIER_LSERDYIE               RCC_CIER_LSERDYIE      /*!< LSE ready interrupt enable */
164 #define LL_RCC_CIER_LSIRDYIE               RCC_CIER_LSIRDYIE      /*!< LSI ready interrupt enable */
165 /**
166   * @}
167   */
168 
169 /** @defgroup RCC_LL_EC_LSEDRIVE  LSE oscillator drive capability
170   * @{
171   */
172 #define LL_RCC_LSEDRIVE_LOW                0x00000000U             /*!< Xtal mode lower driving capability */
173 #define LL_RCC_LSEDRIVE_MEDIUMLOW          RCC_CSSWCR_LSEDRV_0     /*!< Xtal mode medium low driving capability */
174 #define LL_RCC_LSEDRIVE_MEDIUMHIGH         RCC_CSSWCR_LSEDRV_1     /*!< Xtal mode medium high driving capability */
175 #define LL_RCC_LSEDRIVE_HIGH               RCC_CSSWCR_LSEDRV       /*!< Xtal mode higher driving capability */
176 /**
177   * @}
178   */
179 
180 /** @defgroup RCC_LL_EC_HSE_CURRENT_CONTROL  HSE current control max limits
181   * @{
182   */
183 #define LL_RCC_HSE_CURRENTMAX_0            0x000000000U                                  /*!< HSE current control max limit = 0.18 mA/V*/
184 #define LL_RCC_HSE_CURRENTMAX_1            RCC_RFSWHSECR_GMC_0                           /*!< HSE current control max limit = 0.57 mA/V*/
185 #define LL_RCC_HSE_CURRENTMAX_2            RCC_RFSWHSECR_GMC_1                           /*!< HSE current control max limit = 0.78 mA/V*/
186 #define LL_RCC_HSE_CURRENTMAX_3            (RCC_RFSWHSECR_GMC_1| RCC_RFSWHSECR_GMC_0)    /*!< HSE current control max limit = 1.13 mA/V*/
187 #define LL_RCC_HSE_CURRENTMAX_4            RCC_RFSWHSECR_GMC_2                           /*!< HSE current control max limit = 0.61 mA/V*/
188 #define LL_RCC_HSE_CURRENTMAX_5            (RCC_RFSWHSECR_GMC_2|RCC_RFSWHSECR_GMC_0)     /*!< HSE current control max limit = 1.65 mA/V*/
189 #define LL_RCC_HSE_CURRENTMAX_6            (RCC_RFSWHSECR_GMC_2|RCC_RFSWHSECR_GMC_1)     /*!< HSE current control max limit = 2.12 mA/V*/
190 #define LL_RCC_HSE_CURRENTMAX_7            RCC_RFSWHSECR_GMC                             /*!< HSE current control max limit = 2.84 mA/V*/
191 /**
192   * @}
193   */
194 
195 #if defined(RCC_RFSWHSECR_SATRG)
196 /** @defgroup RCC_LL_EC_HSE_SENSE_AMPLIFIER  HSE sense amplifier threshold
197   * @{
198   */
199 #define LL_RCC_HSEAMPTHRESHOLD_1_2         (0x000000000U)                          /*!< HSE sense amplifier bias current factor = 1/2*/
200 #define LL_RCC_HSEAMPTHRESHOLD_3_4         RCC_RFSWHSECR_SATRG                     /*!< HSE sense amplifier bias current factor = 3/4*/
201 /**
202   * @}
203   */
204 #endif
205 
206 /** @defgroup RCC_LL_EC_LOCKDET_NSTOP  LOCKDET_NSTOP time selection
207   * @{
208   */
209 #define LL_RCC_LOCKDET_NSTOP_0  0x00000000U
210 #define LL_RCC_LOCKDET_NSTOP_1  RCC_LOCKDET_NSTOP_0
211 #define LL_RCC_LOCKDET_NSTOP_2  RCC_LOCKDET_NSTOP_1
212 #define LL_RCC_LOCKDET_NSTOP_3  RCC_LOCKDET_NSTOP_1 | RCC_LOCKDET_NSTOP_0
213 #define LL_RCC_LOCKDET_NSTOP_4  RCC_LOCKDET_NSTOP_2
214 #define LL_RCC_LOCKDET_NSTOP_5  RCC_LOCKDET_NSTOP_2 | RCC_LOCKDET_NSTOP_0
215 #define LL_RCC_LOCKDET_NSTOP_6  RCC_LOCKDET_NSTOP_2 | RCC_LOCKDET_NSTOP_1
216 #define LL_RCC_LOCKDET_NSTOP_7  RCC_LOCKDET_NSTOP_2 | RCC_LOCKDET_NSTOP_1 | RCC_LOCKDET_NSTOP_0
217 /**
218   * @}
219   */
220 
221 /** @defgroup RCC_LL_EC_LSCO_CLKSOURCE  LSCO Source Selection
222   * @{
223   */
224 #define LL_RCC_LSCO_CLKSOURCE_LSE             RCC_CFGR_CLKSLOWSEL_0  /*!< LSE selection for low speed clock  */
225 #define LL_RCC_LSCO_CLKSOURCE_LSI             RCC_CFGR_CLKSLOWSEL_1  /*!< Enable the LSI selection for low speed clock  */
226 #define LL_RCC_LSCO_CLKSOURCE_HSI64M_DIV2048  RCC_CFGR_CLKSLOWSEL    /*!< HSI_64M divided by 2048 selection for low speed clock  */
227 /**
228   * @}
229   */
230 
231 /** @defgroup RCC_LL_EC_LSCO_CLKSOURCE_ENABLE  Enable LSCO Clock Source
232   * @{
233   */
234 #define LL_RCC_LSCO_LSI          RCC_CR_LSION       /*!< Enable LSI selection for low speed clock  */
235 #define LL_RCC_LSCO_LSE          RCC_CR_LSEON       /*!< Enable LSE selection for low speed clock  */
236 #define LL_RCC_LSCO_LSEBYP       RCC_CR_LSEBYP      /*!< Enable LSE clock bypass selection for low speed clock  */
237 /**
238   * @}
239   */
240 
241 /** @defgroup RCC_LL_HSEPLLBUFON Enable the External high speed clock buffer for PLL
242   * @{
243   */
244 #define LL_RCC_HSEPLLBUF_OFF     0x00000000U         /*!< Disable the External high speed clock buffer for PLL */
245 #define LL_RCC_HSEPLLBUF_ON      RCC_CR_HSEPLLBUFON  /*!< Enable the External high speed clock buffer for PLL. Always enabled when the radio is used  */
246 /**
247   * @}
248   */
249 
250 
251 /** @defgroup RCC_LL_EC_SYS_CLKSOURCE  Enable HS clock Source
252   * @{
253   */
254 #define LL_RCC_SYS_HSI           0x00000000U      /*!< Enable HSI system clock */
255 #define LL_RCC_SYS_HSE           RCC_CR_HSEON     /*!< Enable HSE system clock */
256 /**
257   * @}
258   */
259 
260 /** @defgroup RCC_LL_EC_RF_CLKSOURCE  RF system clock
261   * @{
262   */
263 #if defined(RCC_APB2ENR_CLKBLEDIV_0)
264 #define LL_RCC_RF_CLK_32M       RCC_APB2ENR_CLKBLEDIV_0   /*!< Radio system clock 32 MHz*/
265 #else
266 #define LL_RCC_RF_CLK_32M       0x00000000U               /*!< Radio system clock 32 MHz*/
267 #endif
268 #if defined(RCC_APB2ENR_CLKBLEDIV_1)
269 #define LL_RCC_RF_CLK_16M       RCC_APB2ENR_CLKBLEDIV_1   /*!< Radio system clock 16 MHz*/
270 #else
271 #define LL_RCC_RF_CLK_16M       RCC_APB2ENR_CLKBLEDIV     /*!< Radio system clock 16 MHz*/
272 #endif
273 /**
274   * @}
275   */
276 
277 /** @defgroup RCC_DIRECT_HSE_Clock_Divider DIRECT HSE Clock Divider
278   * @{
279   */
280 #define LL_RCC_DIRECT_HSE_DIV_1             RCC_CFGR_CLKSYSDIV_0                             /*!< DIRECT HSE division factor = 1   */
281 #define LL_RCC_DIRECT_HSE_DIV_2             RCC_CFGR_CLKSYSDIV_1                             /*!< DIRECT HSE division factor = 2   */
282 #define LL_RCC_DIRECT_HSE_DIV_4             (RCC_CFGR_CLKSYSDIV_1 | RCC_CFGR_CLKSYSDIV_0)    /*!< DIRECT HSE division factor = 4   */
283 #define LL_RCC_DIRECT_HSE_DIV_8             RCC_CFGR_CLKSYSDIV_2                             /*!< DIRECT HSE division factor = 8   */
284 #define LL_RCC_DIRECT_HSE_DIV_16            (RCC_CFGR_CLKSYSDIV_2 | RCC_CFGR_CLKSYSDIV_0)    /*!< DIRECT HSE division factor = 16  */
285 #define LL_RCC_DIRECT_HSE_DIV_32            (RCC_CFGR_CLKSYSDIV_2 | RCC_CFGR_CLKSYSDIV_1)    /*!< DIRECT HSE division factor = 32  */
286 /**
287   * @}
288   */
289 
290 /** @defgroup RCC_LL_EC_SYSCLK_DIV  RC64MPLL divider factor to have the System clock
291   * @{
292   */
293 #define LL_RCC_RC64MPLL_DIV_1                0x00000000U                                     /*!< RC64MPLL not divided as SYSCLK   */
294 #define LL_RCC_RC64MPLL_DIV_2                RCC_CFGR_CLKSYSDIV_0                            /*!< RC64MPLL divided by 2 as SYSCLK  */
295 #define LL_RCC_RC64MPLL_DIV_4                RCC_CFGR_CLKSYSDIV_1                            /*!< RC64MPLL divided by 4 as SYSCLK  */
296 #define LL_RCC_RC64MPLL_DIV_8                (RCC_CFGR_CLKSYSDIV_1 | RCC_CFGR_CLKSYSDIV_0)   /*!< RC64MPLL divided by 8 as SYSCLK  */
297 #define LL_RCC_RC64MPLL_DIV_16               RCC_CFGR_CLKSYSDIV_2                            /*!< RC64MPLL divided by 16 as SYSCLK */
298 #define LL_RCC_RC64MPLL_DIV_32               (RCC_CFGR_CLKSYSDIV_2 | RCC_CFGR_CLKSYSDIV_0)   /*!< RC64MPLL divided by 32 as SYSCLK */
299 #define LL_RCC_RC64MPLL_DIV_64               (RCC_CFGR_CLKSYSDIV_2 | RCC_CFGR_CLKSYSDIV_1)   /*!< RC64MPLL divided by 64 as SYSCLK */
300 /**
301   * @}
302   */
303 
304 /** @defgroup RCC_LL_EC_SYSCLK_SWITCH_DIV  RC64MPLL divider factor to switch the System clock with MR_BLE enabled
305   * @{
306   */
307 #define LL_RCC_RC64MPLL_SWITCH_DIV_1                0x00000000U                              /*!< RC64MPLL not divided as SYSCLK   */
308 #define LL_RCC_RC64MPLL_SWITCH_DIV_2                RCC_CSCMDR_CLKSYSDIV_REQ_0               /*!< RC64MPLL divided by 2 as SYSCLK  */
309 #define LL_RCC_RC64MPLL_SWITCH_DIV_4                RCC_CSCMDR_CLKSYSDIV_REQ_1               /*!< RC64MPLL divided by 4 as SYSCLK  */
310 /**
311   * @}
312   */
313 
314 /** @defgroup RCC_LL_EC_SYSCLK_SWITCH_STATUS  Status of the RC64MPLL clock switch  with MR_BLE enabled
315   * @{
316   */
317 #define LL_RCC_RC64MPLL_SWITCH_STATUS_IDLE          0x00000000U                              /*!< RC64MPLL Clock Switch Status IDLE    */
318 #define LL_RCC_RC64MPLL_SWITCH_STATUS_ONGOING       RCC_CSCMDR_STATUS_0                      /*!< RC64MPLL Clock Switch Status ONGOING */
319 #define LL_RCC_RC64MPLL_SWITCH_STATUS_DONE          RCC_CSCMDR_STATUS_1                      /*!< RC64MPLL Clock Switch Status DONE    */
320 /**
321   * @}
322   */
323 
324 /** @defgroup RCC_LL_EC_MCOSOURCE  MCO SOURCE selection
325   * @{
326   */
327 #define LL_RCC_MCOSOURCE_NOCLOCK          0x00000000U                                   /*!< MCO output disabled, no clock on MCO */
328 #define LL_RCC_MCOSOURCE_SYSCLK           RCC_CFGR_MCOSEL_0                             /*!< SYSCLK selection as MCO source */
329 #define LL_RCC_MCOSOURCE_HSI              (RCC_CFGR_MCOSEL_0|RCC_CFGR_MCOSEL_1)         /*!< HSI selection as MCO source */
330 #define LL_RCC_MCOSOURCE_RC64MPLL         (RCC_CFGR_MCOSEL_0|RCC_CFGR_MCOSEL_1)         /*!< RC64MPLL selection as MCO source */
331 #define LL_RCC_MCOSOURCE_HSE              RCC_CFGR_MCOSEL_2                             /*!< HSE after stabilization selection as MCO source */
332 #define LL_RCC_MCOSOURCE_HSI64M_DIV2048   (RCC_CFGR_MCOSEL_0|RCC_CFGR_MCOSEL_2)         /*!< HSI_64M divided by 2048 seelction as MCO source */
333 #define LL_RCC_MCOSOURCE_SMPS             (RCC_CFGR_MCOSEL_1|RCC_CFGR_MCOSEL_2)         /*!< SMPS selection as MCO source */
334 #define LL_RCC_MCOSOURCE_ADC              RCC_CFGR_MCOSEL                               /*!< ADC selection as MCO source */
335 /**
336   * @}
337   */
338 
339 /** @defgroup RCC_LL_EC_MCO_DIV  MCO prescaler
340   * @{
341   */
342 #define LL_RCC_MCO_DIV_1                  0x00000000U                                   /*!< MCO not divided */
343 #define LL_RCC_MCO_DIV_2                  RCC_CFGR_CCOPRE_0                             /*!< MCO divided by 2 */
344 #define LL_RCC_MCO_DIV_4                  RCC_CFGR_CCOPRE_1                             /*!< MCO divided by 4 */
345 #define LL_RCC_MCO_DIV_8                  (RCC_CFGR_CCOPRE_1 | RCC_CFGR_CCOPRE_0)       /*!< MCO divided by 8 */
346 #define LL_RCC_MCO_DIV_16                 RCC_CFGR_CCOPRE_2                             /*!< MCO divided by 16 */
347 #define LL_RCC_MCO_DIV_32                 (RCC_CFGR_CCOPRE_2 | RCC_CFGR_CCOPRE_0)       /*!< MCO divided by 32 */
348 /**
349   * @}
350   */
351 
352 /** @defgroup RCC_LL_EC_LSCOSOURCE  LCO SOURCE selection
353   * @{
354   */
355 #define LL_RCC_LSCOSOURCE_NOCLOCK          0x00000000U                                   /*!< LSCO output disabled, no clock on LSCO          */
356 #define LL_RCC_LSCOSOURCE_LSI              RCC_CFGR_LCOSEL_1                             /*!< LSI selection as LSCO source                   */
357 #define LL_RCC_LSCOSOURCE_LSE              (RCC_CFGR_LCOSEL_0|RCC_CFGR_LCOSEL_1)         /*!< LSE selection as LSCO source                   */
358 /**
359   * @}
360   */
361 
362 /** @defgroup RCC_LL_EC_SMPS_DIV  SMPS prescaler
363   * @{
364   */
365 #define LL_RCC_SMPS_DIV_2                  (0x00000000U)                                 /*!< SMPS clock division 2 (SMPS clock is 8 MHz)*/
366 #define LL_RCC_SMPS_DIV_4                  RCC_CFGR_SMPSDIV                              /*!< SMPS clock division 4 (SMPS clock is 4 MHz)*/
367 /**
368   * @}
369   */
370 
371 #if defined(RCC_CFGR_LPUCLKSEL)
372 /** @defgroup RCC_LL_CFGR_LPU_CLK  LPUART clock selection
373   * @{
374   */
375 #define LL_RCC_LPUCLKSEL_CLK16M            (0x00000000U)                                 /*!< LPUART Clock Selection 16 MHz     */
376 #define LL_RCC_LPUCLKSEL_CLKLSE            RCC_CFGR_LPUCLKSEL                            /*!< LPUART Clock Selection LSE source */
377 /**
378   * @}
379   */
380 #endif /* RCC_CFGR_LPUCLKSEL */
381 
382 #if defined(USE_FULL_LL_DRIVER)
383 /** @defgroup RCC_LL_EC_PERIPH_FREQUENCY Peripheral clock frequency
384   * @{
385   */
386 #define LL_RCC_PERIPH_FREQUENCY_NO         0x00000000U                 /*!< No clock enabled for the peripheral            */
387 #define LL_RCC_PERIPH_FREQUENCY_NA         0xFFFFFFFFU                 /*!< Frequency cannot be provided as external clock */
388 /**
389   * @}
390   */
391 #endif /* USE_FULL_LL_DRIVER */
392 
393 #if defined(SPI2)
394 /** @defgroup RCC_LL_EC_SPI2_I2S SPI2_I2S
395   * @{
396   */
397 #define LL_RCC_SPI2_I2S_CLK16M              0x00000000U              /*!< SPI2 I2S 16 MHz clock source selection bits */
398 #define LL_RCC_SPI2_I2S_CLK32M              RCC_CFGR_SPI2I2SCLKSEL   /*!< SPI2 I2S 32 MHz clock source selection bits */
399 /**
400   * @}
401   */
402 #endif
403 
404 /** @defgroup RCC_LL_EC_SPI3_I2S SPI3_I2S
405   * @{
406   */
407 #define LL_RCC_SPI3_I2S_CLK16M              0x00000000U              /*!< SPI3 I2S 16 MHz clock source selection bits */
408 #if !defined(RCC_CFGR_SPI3I2SCLKSEL_0)
409 #define LL_RCC_SPI3_I2S_CLK32M              RCC_CFGR_SPI3I2SCLKSEL   /*!< SPI3 I2S 32 MHz clock source selection bits */
410 #endif
411 #if defined(RCC_CFGR_SPI3I2SCLKSEL_0)
412 #define LL_RCC_SPI3_I2S_CLK32M              RCC_CFGR_SPI3I2SCLKSEL_0   /*!< SPI3 I2S 32 MHz clock source selection bits */
413 #define LL_RCC_SPI3_I2S_CLK64M              RCC_CFGR_SPI3I2SCLKSEL_1   /*!< SPI3 I2S 64 MHz clock source selection bits */
414 #endif
415 /**
416   * @}
417   */
418 
419 #if defined(RCC_CFGR_LPUCLKSEL)
420 /** @defgroup RCC_LL_EC_LPUART1 LPUART1
421   * @{
422   */
423 #define LL_RCC_LPUART1_CLKSOURCE           0x00000000U               /*!< LPUART1 clock source */
424 /**
425   * @}
426   */
427 #endif /* RCC_CFGR_LPUCLKSEL */
428 
429 /**
430   * @}
431   */
432 
433 /* Exported macro ------------------------------------------------------------*/
434 /** @defgroup RCC_LL_Exported_Macros RCC Exported Macros
435   * @{
436   */
437 
438 /** @defgroup RCC_LL_EM_WRITE_READ Common Write and read registers Macros
439   * @{
440   */
441 
442 /**
443   * @brief  Write a value in RCC register
444   * @param  __REG__ Register to be written
445   * @param  __VALUE__ Value to be written in the register
446   * @retval None
447   */
448 #define LL_RCC_WriteReg(__REG__, __VALUE__) WRITE_REG(RCC->__REG__, (__VALUE__))
449 
450 /**
451   * @brief  Read a value in RCC register
452   * @param  __REG__ Register to be read
453   * @retval Register value
454   */
455 #define LL_RCC_ReadReg(__REG__) READ_REG(RCC->__REG__)
456 /**
457   * @}
458   */
459 
460 /**
461   * @}
462   */
463 
464 /* Exported functions --------------------------------------------------------*/
465 /** @defgroup RCC_LL_Exported_Functions RCC Exported Functions
466   * @{
467   */
468 
469 /** @defgroup RCC_LL_EF_HSE HSE
470   * @{
471   */
472 
473 /**
474   * @brief  Enable HSE crystal oscillator (HSE ON)
475   * @rmtoll CR           HSEON         LL_RCC_HSE_Enable
476   * @retval None
477   */
LL_RCC_HSE_Enable(void)478 __STATIC_INLINE void LL_RCC_HSE_Enable(void)
479 {
480   SET_BIT(RCC->CR, RCC_CR_HSEON);
481 }
482 
483 /**
484   * @brief  Disable HSE crystal oscillator (HSE ON)
485   * @rmtoll CR           HSEON         LL_RCC_HSE_Disable
486   * @retval None
487   */
LL_RCC_HSE_Disable(void)488 __STATIC_INLINE void LL_RCC_HSE_Disable(void)
489 {
490   CLEAR_BIT(RCC->CR, RCC_CR_HSEON);
491 }
492 
493 /**
494   * @brief  Check if HSE crystal oscillator is enabled.
495   * @rmtoll CR         HSEON        LL_RCC_HSE_IsEnabled
496   * @retval State of bit (1 or 0).
497   */
LL_RCC_HSE_IsEnabled(void)498 __STATIC_INLINE uint32_t LL_RCC_HSE_IsEnabled(void)
499 {
500   return ((READ_BIT(RCC->CR, RCC_CR_HSEON) == (RCC_CR_HSEON)) ? 1UL : 0UL);
501 }
502 
503 /**
504   * @brief  Check if HSE oscillator Ready
505   * @rmtoll CR           HSERDY        LL_RCC_HSE_IsReady
506   * @retval State of bit (1 or 0).
507   */
LL_RCC_HSE_IsReady(void)508 __STATIC_INLINE uint32_t LL_RCC_HSE_IsReady(void)
509 {
510   return ((READ_BIT(RCC->CR, RCC_CR_HSERDY) == (RCC_CR_HSERDY)) ? 1UL : 0UL);
511 }
512 
513 /**
514   * @brief  Set HSE capacitor tuning
515   * @rmtoll RFSWHSECR        SWXOTUNE       LL_RCC_HSE_SetCapacitorTuning
516   * @param  Value Between Min_Data = 0 and Max_Data = 63
517   * @retval None
518   */
LL_RCC_HSE_SetCapacitorTuning(uint32_t Value)519 __STATIC_INLINE void LL_RCC_HSE_SetCapacitorTuning(uint32_t Value)
520 {
521   MODIFY_REG(RCC->RFSWHSECR, RCC_RFSWHSECR_SWXOTUNE, Value << RCC_RFSWHSECR_SWXOTUNE_Pos);
522   SET_BIT(RCC->RFSWHSECR, RCC_RFSWHSECR_SWXOTUNEEN);
523 }
524 
525 /**
526   * @brief  Get HSE capacitor tuning
527   * @rmtoll RFSWHSECR        SWXOTUNE      LL_RCC_HSE_GetCapacitorTuning
528   * @retval Between Min_Data = 0 and Max_Data = 63
529   */
LL_RCC_HSE_GetCapacitorTuning(void)530 __STATIC_INLINE uint32_t LL_RCC_HSE_GetCapacitorTuning(void)
531 {
532   return (uint32_t)(READ_BIT(RCC->RFSWHSECR, RCC_RFSWHSECR_SWXOTUNE) >> RCC_RFSWHSECR_SWXOTUNE_Pos);
533 }
534 
535 /**
536   * @brief  Set HSE current control
537   * @rmtoll RFSWHSECR        GMC       LL_RCC_HSE_SetCurrentControl
538   * @param  CurrentMax This parameter can be one of the following values:
539   *         @arg @ref LL_RCC_HSE_CURRENTMAX_0
540   *         @arg @ref LL_RCC_HSE_CURRENTMAX_1
541   *         @arg @ref LL_RCC_HSE_CURRENTMAX_2
542   *         @arg @ref LL_RCC_HSE_CURRENTMAX_3
543   *         @arg @ref LL_RCC_HSE_CURRENTMAX_4
544   *         @arg @ref LL_RCC_HSE_CURRENTMAX_5
545   *         @arg @ref LL_RCC_HSE_CURRENTMAX_6
546   *         @arg @ref LL_RCC_HSE_CURRENTMAX_7
547   */
LL_RCC_HSE_SetCurrentControl(uint32_t CurrentMax)548 __STATIC_INLINE void LL_RCC_HSE_SetCurrentControl(uint32_t CurrentMax)
549 {
550   MODIFY_REG(RCC->RFSWHSECR, RCC_RFSWHSECR_GMC, CurrentMax);
551 }
552 
553 /**
554   * @brief  Get HSE current control
555   * @rmtoll RFSWHSECR       GMC       LL_RCC_HSE_GetCurrentControl
556   * @retval Returned value can be one of the following values:
557   *         @arg @ref LL_RCC_HSE_CURRENTMAX_0
558   *         @arg @ref LL_RCC_HSE_CURRENTMAX_1
559   *         @arg @ref LL_RCC_HSE_CURRENTMAX_2
560   *         @arg @ref LL_RCC_HSE_CURRENTMAX_3
561   *         @arg @ref LL_RCC_HSE_CURRENTMAX_4
562   *         @arg @ref LL_RCC_HSE_CURRENTMAX_5
563   *         @arg @ref LL_RCC_HSE_CURRENTMAX_6
564   *         @arg @ref LL_RCC_HSE_CURRENTMAX_7
565   */
LL_RCC_HSE_GetCurrentControl(void)566 __STATIC_INLINE uint32_t LL_RCC_HSE_GetCurrentControl(void)
567 {
568   return (uint32_t)(READ_BIT(RCC->RFSWHSECR, RCC_RFSWHSECR_GMC));
569 }
570 
571 #if defined(RCC_RFSWHSECR_SATRG)
572 /**
573   * @brief  Set HSE sense amplifier threshold
574   * @rmtoll RFSWHSECR        SATRG       LL_RCC_HSE_SetSenseAmplifier
575   * @param  SenseAmplifier This parameter can be one of the following values:
576   *         @arg @ref LL_RCC_HSEAMPTHRESHOLD_1_2
577   *         @arg @ref LL_RCC_HSEAMPTHRESHOLD_3_4
578   */
LL_RCC_HSE_SetSenseAmplifier(uint32_t SenseAmplifier)579 __STATIC_INLINE void LL_RCC_HSE_SetSenseAmplifier(uint32_t SenseAmplifier)
580 {
581   MODIFY_REG(RCC->RFSWHSECR, RCC_RFSWHSECR_SATRG, SenseAmplifier);
582 }
583 
584 /**
585   * @brief  Get HSE current control
586   * @rmtoll RFSWHSECR        SATRG       LL_RCC_HSE_GetSenseAmplifier
587   * @retval Returned value can be one of the following values:
588   *         @arg @ref LL_RCC_HSEAMPTHRESHOLD_1_2
589   *         @arg @ref LL_RCC_HSEAMPTHRESHOLD_3_4
590   */
LL_RCC_HSE_GetSenseAmplifier(void)591 __STATIC_INLINE uint32_t LL_RCC_HSE_GetSenseAmplifier(void)
592 {
593   return (uint32_t)(READ_BIT(RCC->RFSWHSECR, RCC_RFSWHSECR_SATRG));
594 }
595 #endif
596 
597 #if defined(RCC_RFSWHSECR_ISTARTUP)
598 /**
599   * @brief  Set HSE startup current
600   * @rmtoll RFSWHSECR        ISTARTUP      LL_RCC_HSE_SetStartupCurrent
601   * @param  StartupCurrent HSE startup current
602   */
LL_RCC_HSE_SetStartupCurrent(uint32_t StartupCurrent)603 __STATIC_INLINE void LL_RCC_HSE_SetStartupCurrent(uint32_t StartupCurrent)
604 {
605   MODIFY_REG_FIELD(RCC->RFSWHSECR, RCC_RFSWHSECR_ISTARTUP, StartupCurrent);
606 }
607 
608 /**
609   * @brief  Get HSE startup current
610   * @rmtoll RFSWHSECR        ISTARTUP       LL_RCC_HSE_GetStartupCurrent
611   * @retval Startup Current value
612   */
LL_RCC_HSE_GetStartupCurrent(void)613 __STATIC_INLINE uint32_t LL_RCC_HSE_GetStartupCurrent(void)
614 {
615   return (uint32_t)(READ_REG_FIELD(RCC->RFSWHSECR, RCC_RFSWHSECR_ISTARTUP));
616 }
617 #endif
618 #if defined(RCC_RFSWHSECR_AMPLTHRESH)
619 /**
620   * @brief  Set HSE Amplitude Control threshold
621   * @rmtoll RFSWHSECR        AMPLTHRESH      LL_RCC_HSE_SetAmplitudeThreshold
622   * @param  AmplThr HSE Amplitude Control threshold
623   */
LL_RCC_HSE_SetAmplitudeThreshold(uint32_t AmplThr)624 __STATIC_INLINE void LL_RCC_HSE_SetAmplitudeThreshold(uint32_t AmplThr)
625 {
626   MODIFY_REG_FIELD(RCC->RFSWHSECR, RCC_RFSWHSECR_AMPLTHRESH, AmplThr);
627 }
628 
629 /**
630   * @brief  Get HSE Amplitude Control threshold
631   * @rmtoll RFSWHSECR        AMPLTHRESH       LL_RCC_HSE_GetAmplitudeThreshold
632   * @retval HSE Amplitude Control threshold
633   */
LL_RCC_HSE_GetAmplitudeThreshold(void)634 __STATIC_INLINE uint32_t LL_RCC_HSE_GetAmplitudeThreshold(void)
635 {
636   return (uint32_t)(READ_REG_FIELD(RCC->RFSWHSECR, RCC_RFSWHSECR_AMPLTHRESH));
637 }
638 #endif
639 /**
640   * @}
641   */
642 
643 /** @defgroup RCC_LL_EF_HSI HSI
644   * @{
645   */
646 
647 /**
648   * @brief  Enable HSI
649   * @rmtoll CFGR           STOPHSI        LL_RCC_HSI_Enable
650   * @retval None
651   */
LL_RCC_HSI_Enable(void)652 __STATIC_INLINE void LL_RCC_HSI_Enable(void)
653 {
654   CLEAR_BIT(RCC->CFGR, RCC_CFGR_STOPHSI);
655   CLEAR_BIT(RCC->CFGR, RCC_CFGR_HSESEL);
656 }
657 
658 /**
659   * @brief  Disable HSI
660   * @rmtoll CFGR           STOPHSI        LL_RCC_HSI_Disable
661   * @retval None
662   */
LL_RCC_HSI_Disable(void)663 __STATIC_INLINE void LL_RCC_HSI_Disable(void)
664 {
665   SET_BIT(RCC->CFGR, RCC_CFGR_HSESEL);
666   SET_BIT(RCC->CFGR, RCC_CFGR_STOPHSI);
667 }
668 
669 /**
670   * @brief  Check if HSI clock is ready
671   * @rmtoll CR           HSIRDY        LL_RCC_HSI_IsReady
672   * @retval State of bit (1 or 0).
673   */
LL_RCC_HSI_IsReady(void)674 __STATIC_INLINE uint32_t LL_RCC_HSI_IsReady(void)
675 {
676   return ((READ_BIT(RCC->CR, RCC_CR_HSIRDY) == (RCC_CR_HSIRDY)) ? 1UL : 0UL);
677 }
678 
679 /**
680   * @brief  Set HSI Calibration trimming
681   * @note user-programmable trimming value
682   * @note Default value is loaded by HW at reset as soon as the flash controller achieves the reading of the
683   *       information in Flash memory (reg. ICSCR).
684   * @rmtoll CSSWCR        HSITRIM       LL_RCC_HSI_SetCalibTrimming
685   * @param  Value Between Min_Data = 0 and Max_Data = 127
686   * @retval None
687   */
LL_RCC_HSI_SetCalibTrimming(uint32_t Value)688 __STATIC_INLINE void LL_RCC_HSI_SetCalibTrimming(uint32_t Value)
689 {
690   MODIFY_REG(RCC->CSSWCR, RCC_CSSWCR_HSITRIMSW, Value << RCC_CSSWCR_HSITRIMSW_Pos);
691   SET_BIT(RCC->CSSWCR, RCC_CSSWCR_HSISWTRIMEN);
692 }
693 
694 /**
695   * @brief  Get HSI Calibration trimming
696   * @rmtoll ICSCR/CSSWCR        HSITRIM       LL_RCC_HSI_GetCalibTrimming
697   * @retval Between Min_Data = 0 and Max_Data = 127
698   */
LL_RCC_HSI_GetCalibTrimming(void)699 __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibTrimming(void)
700 {
701   if ((uint32_t)(READ_BIT(RCC->CSSWCR, RCC_CSSWCR_HSISWTRIMEN)))
702   {
703     return (uint32_t)(READ_BIT(RCC->CSSWCR, RCC_CSSWCR_HSITRIMSW) >> RCC_CSSWCR_HSITRIMSW_Pos);
704   }
705   else
706   {
707     return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_HSITRIM) >> RCC_ICSCR_HSITRIM_Pos);
708   }
709 }
710 /**
711   * @}
712   */
713 
714 /** @defgroup RCC_LL_EF_DIRECT_HSE DIRECT_HSE
715   * @{
716   */
717 /**
718   * @brief  Enable DIRECT_HSE mode
719   * @rmtoll CFGR       HSESEL/STOPHSI         LL_RCC_HSE_Enable
720   * @retval None
721   */
LL_RCC_DIRECT_HSE_Enable(void)722 __STATIC_INLINE void LL_RCC_DIRECT_HSE_Enable(void)
723 {
724   while (READ_BIT(RCC->CR, RCC_CR_HSERDY) == 0);
725   SET_BIT(RCC->CFGR, RCC_CFGR_HSESEL);
726   for (volatile int i = 0; i < 6; i++)
727   {
728     __asm("NOP");
729   }
730   SET_BIT(RCC->CFGR, RCC_CFGR_STOPHSI);
731 }
732 
733 /**
734   * @brief  Disable DIRECT_HSE
735   * @rmtoll CFGR       HSESEL/STOPHSI         LL_RCC_HSE_Disable
736   * @retval None
737   */
LL_RCC_DIRECT_HSE_Disable(void)738 __STATIC_INLINE void LL_RCC_DIRECT_HSE_Disable(void)
739 {
740   CLEAR_BIT(RCC->CFGR, RCC_CFGR_STOPHSI);
741   while (LL_RCC_HSI_IsReady() == 0);
742   CLEAR_BIT(RCC->CFGR, RCC_CFGR_HSESEL);
743 }
744 
745 /**
746   * @brief  Check if DIRECT_HSE mode is ready
747   * @rmtoll CFGR           HSESEL/STOPHSI  LL_RCC_DIRECT_HSE_IsEnabled
748   * @retval State of bit (1 or 0).
749   */
LL_RCC_DIRECT_HSE_IsEnabled(void)750 __STATIC_INLINE uint32_t LL_RCC_DIRECT_HSE_IsEnabled(void)
751 {
752 #if defined(RCC_CFGR_HSESEL_STATUS)
753   return ((READ_BIT(RCC->CFGR, RCC_CFGR_HSESEL_STATUS) == (RCC_CFGR_HSESEL_STATUS)) ? 1UL : 0UL);
754 #else
755   return (((READ_BIT(RCC->CFGR, RCC_CFGR_HSESEL) == (RCC_CFGR_HSESEL)) && (READ_BIT(RCC->CFGR, RCC_CFGR_STOPHSI) == (RCC_CFGR_STOPHSI))) ? 1UL : 0UL);
756 #endif
757 }
758 
759 #if defined(RCC_CFGR_HSESEL_STATUS)
760 /**
761   * @brief  Get the DIRECT HSE Selection Status
762   * @rmtoll CFGR         HSESEL_STATUS     LL_RCC_Get_DIRECT_HSESEL_Status
763   * @retval State of bit (1 or 0).
764   */
LL_RCC_Get_DIRECT_HSESEL_Status(void)765 __STATIC_INLINE uint32_t LL_RCC_Get_DIRECT_HSESEL_Status(void)
766 {
767   return ((READ_BIT(RCC->CFGR, RCC_CFGR_HSESEL_STATUS) == (RCC_CFGR_HSESEL_STATUS)) ? 1UL : 0UL);
768 }
769 #endif
770 
771 /**
772   * @}
773   */
774 
775 /** @defgroup RCC_LL_EF_LOCKDET_NSTOP LOCKDET_NSTOP
776   * @{
777   */
778 
779 /**
780   * @brief  Set LOCKDET_NSTOP time
781   * @rmtoll CR       LOCKDET_NSTOP          LL_RCC_LOCKDET_NSTOP_SetTime
782   * @param  time This parameter can be one of the following values:
783   *         @arg @ref LL_RCC_LOCKDET_NSTOP_0
784   *         @arg @ref LL_RCC_LOCKDET_NSTOP_1
785   *         @arg @ref LL_RCC_LOCKDET_NSTOP_2
786   *         @arg @ref LL_RCC_LOCKDET_NSTOP_3
787   *         @arg @ref LL_RCC_LOCKDET_NSTOP_4
788   *         @arg @ref LL_RCC_LOCKDET_NSTOP_5
789   *         @arg @ref LL_RCC_LOCKDET_NSTOP_6
790   *         @arg @ref LL_RCC_LOCKDET_NSTOP_7
791   * @retval None
792   */
LL_RCC_LOCKDET_NSTOP_SetTime(uint32_t time)793 __STATIC_INLINE void LL_RCC_LOCKDET_NSTOP_SetTime(uint32_t time)
794 {
795   MODIFY_REG(RCC->CR, RCC_CR_LOCKDET_NSTOP, time);
796 }
797 
798 /**
799   * @brief  Get LOCKDET_NSTOP time
800   * @rmtoll CR         LOCKDET_NSTOP     LL_RCC_LOCKDET_NSTOP_GetTime
801   * @retval Returned value can be one of the following values:
802   *         @arg @ref LL_RCC_LOCKDET_NSTOP_0
803   *         @arg @ref LL_RCC_LOCKDET_NSTOP_1
804   *         @arg @ref LL_RCC_LOCKDET_NSTOP_2
805   *         @arg @ref LL_RCC_LOCKDET_NSTOP_3
806   *         @arg @ref LL_RCC_LOCKDET_NSTOP_4
807   *         @arg @ref LL_RCC_LOCKDET_NSTOP_5
808   *         @arg @ref LL_RCC_LOCKDET_NSTOP_6
809   *         @arg @ref LL_RCC_LOCKDET_NSTOP_7
810   */
LL_RCC_LOCKDET_NSTOP_GetTime(void)811 __STATIC_INLINE uint32_t LL_RCC_LOCKDET_NSTOP_GetTime(void)
812 {
813   return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_LOCKDET_NSTOP));
814 }
815 
816 /**
817   * @}
818   */
819 
820 /** @defgroup RCC_LL_EF_LSCO LSCO
821   * @{
822   */
823 
824 /**
825   * @brief  Configure Low speed clock selection
826   * @rmtoll CFGR         CLKSLOWSEL       LL_RCC_LSCO_SetSource
827   * @param  Source This parameter can be one of the following values:
828   *         @arg @ref LL_RCC_LSCO_CLKSOURCE_LSE
829   *         @arg @ref LL_RCC_LSCO_CLKSOURCE_LSI
830   *         @arg @ref LL_RCC_LSCO_CLKSOURCE_HSI64M_DIV2048
831   * @retval None
832   */
LL_RCC_LSCO_SetSource(uint32_t Source)833 __STATIC_INLINE void LL_RCC_LSCO_SetSource(uint32_t Source)
834 {
835   MODIFY_REG(RCC->CFGR, RCC_CFGR_CLKSLOWSEL, Source);
836 }
837 
838 /**
839   * @brief  Get Low speed clock selection
840   * @rmtoll CFGR         CLKSLOWSEL       LL_RCC_LSCO_GetSource
841   * @retval Returned value can be one of the following values:
842   *         @arg @ref LL_RCC_LSCO_CLKSOURCE_LSE
843   *         @arg @ref LL_RCC_LSCO_CLKSOURCE_LSI
844   *         @arg @ref LL_RCC_LSCO_CLKSOURCE_HSI64M_DIV2048
845   */
LL_RCC_LSCO_GetSource(void)846 __STATIC_INLINE uint32_t LL_RCC_LSCO_GetSource(void)
847 {
848   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_CLKSLOWSEL));
849 }
850 
851 /**
852   * @}
853   */
854 
855 /** @defgroup RCC_LL_EF_LSE LSE
856   * @{
857   */
858 
859 /**
860   * @brief  Enable  Low Speed External (LSE) crystal.
861   * @rmtoll CR         LSEON         LL_RCC_LSE_Enable
862   * @retval None
863   */
LL_RCC_LSE_Enable(void)864 __STATIC_INLINE void LL_RCC_LSE_Enable(void)
865 {
866   SET_BIT(RCC->CR, RCC_CR_LSEON);
867 }
868 
869 /**
870   * @brief  Disable  Low Speed External (LSE) crystal.
871   * @rmtoll CR         LSEON         LL_RCC_LSE_Disable
872   * @retval None
873   */
LL_RCC_LSE_Disable(void)874 __STATIC_INLINE void LL_RCC_LSE_Disable(void)
875 {
876   CLEAR_BIT(RCC->CR, RCC_CR_LSEON);
877 }
878 
879 /**
880   * @brief  Check if Low Speed External (LSE) crystal has been enabled or not
881   * @rmtoll CR         LSEON         LL_RCC_LSE_IsEnabled
882   * @retval State of bit (1 or 0).
883   */
LL_RCC_LSE_IsEnabled(void)884 __STATIC_INLINE uint32_t LL_RCC_LSE_IsEnabled(void)
885 {
886   return ((READ_BIT(RCC->CR, RCC_CR_LSEON) == (RCC_CR_LSEON)) ? 1UL : 0UL);
887 }
888 
889 /**
890   * @brief  Check if LSE oscillator Ready
891   * @rmtoll CR         LSERDY        LL_RCC_LSE_IsReady
892   * @retval State of bit (1 or 0).
893   */
LL_RCC_LSE_IsReady(void)894 __STATIC_INLINE uint32_t LL_RCC_LSE_IsReady(void)
895 {
896   return ((READ_BIT(RCC->CR, RCC_CR_LSERDY) == (RCC_CR_LSERDY)) ? 1UL : 0UL);
897 }
898 
899 /**
900   * @brief  Enable external clock source (LSE bypass).
901   * @rmtoll CR         LSEBYP        LL_RCC_LSE_EnableBypass
902   * @retval None
903   */
LL_RCC_LSE_EnableBypass(void)904 __STATIC_INLINE void LL_RCC_LSE_EnableBypass(void)
905 {
906   SET_BIT(RCC->CR, RCC_CR_LSEBYP);
907 }
908 
909 /**
910   * @brief  Disable external clock source (LSE bypass).
911   * @rmtoll CR         LSEBYP        LL_RCC_LSE_DisableBypass
912   * @retval None
913   */
LL_RCC_LSE_DisableBypass(void)914 __STATIC_INLINE void LL_RCC_LSE_DisableBypass(void)
915 {
916   CLEAR_BIT(RCC->CR, RCC_CR_LSEBYP);
917 }
918 
919 /**
920   * @brief  Check if LSE bypass configuration is enabled.
921   * @rmtoll CR         LSEBYP        LL_RCC_LSE_IsBypassEnabled
922   * @retval State of bit (1 or 0).
923   */
LL_RCC_LSE_IsBypassEnabled(void)924 __STATIC_INLINE uint32_t LL_RCC_LSE_IsBypassEnabled(void)
925 {
926   return ((READ_BIT(RCC->CR, RCC_CR_LSEBYP) == (RCC_CR_LSEBYP)) ? 1UL : 0UL);
927 }
928 
929 /**
930   * @brief  Set LSE oscillator drive capability
931   * @note The oscillator is in Xtal mode when it is not in bypass mode.
932   * @rmtoll CSSWCR         LSEDRV        LL_RCC_LSE_SetDriveCapability
933   * @param  LSEDrive This parameter can be one of the following values:
934   *         @arg @ref LL_RCC_LSEDRIVE_LOW
935   *         @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW
936   *         @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH
937   *         @arg @ref LL_RCC_LSEDRIVE_HIGH
938   * @retval None
939   */
LL_RCC_LSE_SetDriveCapability(uint32_t LSEDrive)940 __STATIC_INLINE void LL_RCC_LSE_SetDriveCapability(uint32_t LSEDrive)
941 {
942   MODIFY_REG(RCC->CSSWCR, RCC_CSSWCR_LSEDRV, LSEDrive);
943 }
944 
945 /**
946   * @brief  Get LSE oscillator drive capability
947   * @rmtoll CSSWCR         LSEDRV        LL_RCC_LSE_GetDriveCapability
948   * @retval Returned value can be one of the following values:
949   *         @arg @ref LL_RCC_LSEDRIVE_LOW
950   *         @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW
951   *         @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH
952   *         @arg @ref LL_RCC_LSEDRIVE_HIGH
953   */
LL_RCC_LSE_GetDriveCapability(void)954 __STATIC_INLINE uint32_t LL_RCC_LSE_GetDriveCapability(void)
955 {
956   return (uint32_t)(READ_BIT(RCC->CSSWCR, RCC_CSSWCR_LSEDRV));
957 }
958 
959 /**
960   * @}
961   */
962 
963 /** @defgroup RCC_LL_EF_LSI LSI
964   * @{
965   */
966 
967 /**
968   * @brief  Enable LSI Oscillator
969   * @rmtoll CR          LSION         LL_RCC_LSI_Enable
970   * @retval None
971   */
LL_RCC_LSI_Enable(void)972 __STATIC_INLINE void LL_RCC_LSI_Enable(void)
973 {
974   SET_BIT(RCC->CR, RCC_CR_LSION);
975 }
976 
977 /**
978   * @brief  Disable LSI Oscillator
979   * @rmtoll CR          LSION         LL_RCC_LSI_Disable
980   * @retval None
981   */
LL_RCC_LSI_Disable(void)982 __STATIC_INLINE void LL_RCC_LSI_Disable(void)
983 {
984   CLEAR_BIT(RCC->CR, RCC_CR_LSION);
985 }
986 
987 /**
988   * @brief  Check if LSI crystal oscillator is enabled.
989   * @rmtoll CR         LSION        LL_RCC_LSI_IsEnabled
990   * @retval State of bit (1 or 0).
991   */
LL_RCC_LSI_IsEnabled(void)992 __STATIC_INLINE uint32_t LL_RCC_LSI_IsEnabled(void)
993 {
994   return ((READ_BIT(RCC->CR, RCC_CR_LSION) == (RCC_CR_LSION)) ? 1UL : 0UL);
995 }
996 
997 /**
998   * @brief  Check if LSI is Ready
999   * @rmtoll CR          LSIRDY        LL_RCC_LSI_IsReady
1000   * @retval State of bit (1 or 0).
1001   */
LL_RCC_LSI_IsReady(void)1002 __STATIC_INLINE uint32_t LL_RCC_LSI_IsReady(void)
1003 {
1004   return ((READ_BIT(RCC->CR, RCC_CR_LSIRDY) == (RCC_CR_LSIRDY)) ? 1UL : 0UL);
1005 }
1006 
1007 /**
1008   * @brief  Enable LSI trimming procedure
1009   * @rmtoll ICSCR          LSITRIMEN         LL_RCC_LSI_EnableTrimming
1010   * @retval None
1011   */
LL_RCC_LSI_EnableTrimming(void)1012 __STATIC_INLINE void LL_RCC_LSI_EnableTrimming(void)
1013 {
1014   SET_BIT(RCC->ICSCR, RCC_ICSCR_LSITRIMEN);
1015 }
1016 
1017 /**
1018   * @brief  Disable LSI trimming procedure
1019   * @rmtoll ICSCR          LSITRIMEN         LL_RCC_LSI_DisableTrimming
1020   * @retval None
1021   */
LL_RCC_LSI_DisableTrimming(void)1022 __STATIC_INLINE void LL_RCC_LSI_DisableTrimming(void)
1023 {
1024   CLEAR_BIT(RCC->ICSCR, RCC_ICSCR_LSITRIMEN);
1025 }
1026 
1027 /**
1028   * @brief  Check if LSI trimming procedure is enabled
1029   * @rmtoll ICSCR          LSITRIMEN        LL_RCC_LSI_IsTrimmingEnabled
1030   * @retval State of bit (1 or 0).
1031   */
LL_RCC_LSI_IsTrimmingEnabled(void)1032 __STATIC_INLINE uint32_t LL_RCC_LSI_IsTrimmingEnabled(void)
1033 {
1034   return ((READ_BIT(RCC->ICSCR, RCC_ICSCR_LSITRIMEN) == (RCC_ICSCR_LSITRIMEN)) ? 1UL : 0UL);
1035 }
1036 
1037 /**
1038   * @brief  Set LSI trimming value
1039   * @note After enabling the LSI oscillator and the LSI trimming procedure
1040   *       the LSI trimming value is decreased from 15 to 0, till LSITRIMOK raised
1041   * @rmtoll CSSWCR        LSISWBW       LL_RCC_LSI_SetTrimming
1042   * @param  Value Between Min_Data = 0 and Max_Data = 15
1043   * @retval None
1044   */
LL_RCC_LSI_SetTrimming(uint32_t Value)1045 __STATIC_INLINE void LL_RCC_LSI_SetTrimming(uint32_t Value)
1046 {
1047   MODIFY_REG(RCC->CSSWCR, RCC_CSSWCR_LSISWBW, Value << RCC_CSSWCR_LSISWBW_Pos);
1048   SET_BIT(RCC->CSSWCR, RCC_CSSWCR_LSISWTRIMEN);
1049 }
1050 
1051 /**
1052   * @brief  Get LSI trimming value
1053   * @rmtoll CSSWCR/ICSCR        LSITRIM       LL_RCC_LSI_GetTrimming
1054   * @retval Between Min_Data = 0 and Max_Data = 15
1055   */
LL_RCC_LSI_GetTrimming(void)1056 __STATIC_INLINE uint32_t LL_RCC_LSI_GetTrimming(void)
1057 {
1058   if (READ_BIT(RCC->CSSWCR, RCC_CSSWCR_LSISWTRIMEN))
1059   {
1060     return (uint32_t)(READ_BIT(RCC->CSSWCR, RCC_CSSWCR_LSISWBW) >> RCC_CSSWCR_LSISWBW_Pos);
1061   }
1062   else
1063   {
1064     return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_LSIBW) >> RCC_ICSCR_LSIBW_Pos);
1065   }
1066 }
1067 
1068 #if defined(RCC_ICSCR_LSITRIMOK)
1069 /**
1070   * @brief  Check if LSI oscillator trimming is OK
1071   * @rmtoll ICSCR         LSITRIMOK        LL_RCC_LSI_IsTrimmed
1072   * @retval State of bit (1 or 0).
1073   */
LL_RCC_LSI_IsTrimmed(void)1074 __STATIC_INLINE uint32_t LL_RCC_LSI_IsTrimmed(void)
1075 {
1076   return ((READ_BIT(RCC->ICSCR, RCC_ICSCR_LSITRIMOK) == (RCC_ICSCR_LSITRIMOK)) ? 1UL : 0UL);
1077 }
1078 #endif
1079 
1080 /**
1081   * @}
1082   */
1083 
1084 
1085 /** @defgroup RCC_LL_EF_System System Clock
1086   * @{
1087   */
1088 
1089 /**
1090   * @brief  Configure the system clock source
1091   * @rmtoll CR         HSEON            LL_RCC_SetSysClkSource
1092   * @param  Source This parameter can be one of the following values:
1093   *         @arg @ref LL_RCC_SYS_HSI
1094   *         @arg @ref LL_RCC_SYS_HSE
1095   * @retval None
1096   */
LL_RCC_SetSysClkSource(uint32_t Source)1097 __STATIC_INLINE void LL_RCC_SetSysClkSource(uint32_t Source)
1098 {
1099   if (Source == LL_RCC_SYS_HSI)
1100   {
1101     CLEAR_BIT(RCC->CR, RCC_CR_HSEON);
1102   }
1103   if (Source == LL_RCC_SYS_HSE)
1104   {
1105     SET_BIT(RCC->CR, RCC_CR_HSEON);
1106   }
1107 }
1108 
1109 /**
1110   * @brief  Get the system clock source
1111   * @rmtoll CR       HSEON      LL_RCC_GetSysClkSource
1112   * @retval Returned value can be one of the following values:
1113   *         @arg @ref LL_RCC_SYS_HSI
1114   *         @arg @ref LL_RCC_SYS_HSE
1115   */
LL_RCC_GetSysClkSource(void)1116 __STATIC_INLINE uint32_t LL_RCC_GetSysClkSource(void)
1117 {
1118   if (READ_BIT(RCC->CR, RCC_CR_HSEON))
1119   {
1120     return LL_RCC_SYS_HSE;
1121   }
1122 
1123   return LL_RCC_SYS_HSI;
1124 }
1125 
1126 #if defined(RCC_APB2ENR_CLKBLEDIV)
1127 /**
1128   * @brief  Set the RF clock frequency
1129   * @rmtoll APB2ENR         CLKBLEDIV          LL_RCC_SetRFClockSource
1130   * @param  Source This parameter can be one of the following values:
1131   *         @arg @ref LL_RCC_RF_CLK_16M
1132   *         @arg @ref LL_RCC_RF_CLK_32M
1133   * @retval None
1134   */
LL_RCC_SetRFClock(uint32_t Source)1135 __STATIC_INLINE void LL_RCC_SetRFClock(uint32_t Source)
1136 {
1137   MODIFY_REG(RCC->APB2ENR, RCC_APB2ENR_CLKBLEDIV, Source);
1138 }
1139 
1140 /**
1141   * @brief  Get the RF clock frequency
1142   * @rmtoll APB2ENR         CLKBLEDIV          LL_RCC_GetRFClockSource
1143   * @retval Returned value can be one of the following values:
1144   *         @arg @ref LL_RCC_RF_CLK_16M
1145   *         @arg @ref LL_RCC_RF_CLK_32M
1146   */
LL_RCC_GetRFClock(void)1147 __STATIC_INLINE uint32_t LL_RCC_GetRFClock(void)
1148 {
1149   return (uint32_t)(READ_BIT(RCC->APB2ENR, RCC_APB2ENR_CLKBLEDIV));
1150 }
1151 #endif
1152 
1153 #if defined(RCC_APB2RSTR_MRBLERST)
1154 /**
1155     * @brief  Check if Radio System is reset.
1156     * @rmtoll APB2RSTR    MRBLERST    LL_RCC_IsRFUnderReset
1157     * @retval State of bit (1 or 0).
1158     */
LL_RCC_IsRFUnderReset(void)1159 __STATIC_INLINE uint32_t LL_RCC_IsRFUnderReset(void)
1160 {
1161   return ((READ_BIT(RCC->APB2RSTR, RCC_APB2RSTR_MRBLERST) == (RCC_APB2RSTR_MRBLERST)) ? 1UL : 0UL);
1162 }
1163 #endif
1164 /**
1165   * @}
1166   */
1167 
1168 /** @defgroup RCC_LL_EF_SMPS SMPS
1169   * @{
1170   */
1171 
1172 /**
1173   * @brief  Set SMPS prescaler
1174   * @rmtoll CFGR         SMPSDIV          LL_RCC_SetSMPSPrescaler
1175   * @param  Prescaler This parameter can be one of the following values:
1176   *         @arg @ref LL_RCC_SMPS_DIV_2
1177   *         @arg @ref LL_RCC_SMPS_DIV_4
1178   * @retval None
1179   */
LL_RCC_SetSMPSPrescaler(uint32_t Prescaler)1180 __STATIC_INLINE void LL_RCC_SetSMPSPrescaler(uint32_t Prescaler)
1181 {
1182   MODIFY_REG(RCC->CFGR, RCC_CFGR_SMPSDIV, Prescaler);
1183 }
1184 
1185 /**
1186   * @brief  Get SMPS prescaler
1187   * @rmtoll CFGR         SMPSDIV          LL_RCC_GetSMPSPrescaler
1188   * @retval Returned value can be one of the following values:
1189   *         @arg @ref LL_RCC_SMPS_DIV_2
1190   *         @arg @ref LL_RCC_SMPS_DIV_4
1191   */
LL_RCC_GetSMPSPrescaler(void)1192 __STATIC_INLINE uint32_t LL_RCC_GetSMPSPrescaler(void)
1193 {
1194   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SMPSDIV));
1195 }
1196 
1197 /**
1198   * @}
1199   */
1200 
1201 #if defined(RCC_CFGR_LPUCLKSEL)
1202 /** @defgroup RCC_LL_CFGR_LPUCLK_SEL LPUART Clock Selection
1203   * @{
1204   */
1205 
1206 /**
1207   * @brief  Set LPUART Clock source
1208   * @rmtoll CFGR         LPUCLKSEL          LL_RCC_SetLPUARTClockSource
1209   * @param  Source this parameter can be one of the following values:
1210   *         @arg @ref LL_RCC_LPUCLKSEL_CLK16M
1211   *         @arg @ref LL_RCC_LPUCLKSEL_CLKLSE
1212   * @retval None
1213   */
LL_RCC_SetLPUARTClockSource(uint32_t Source)1214 __STATIC_INLINE void LL_RCC_SetLPUARTClockSource(uint32_t Source)
1215 {
1216   MODIFY_REG(RCC->CFGR, RCC_CFGR_LPUCLKSEL, Source);
1217 }
1218 
1219 /**
1220   * @brief  Get LPUART Clock source
1221   * @rmtoll CFGR         LPUCLKSEL          LL_RCC_GetLPUARTClockSource
1222   * @retval Returned value can be one of the following values:
1223   *         @arg @ref LL_RCC_LPUCLKSEL_CLK16M
1224   *         @arg @ref LL_RCC_LPUCLKSEL_CLKLSE
1225   */
LL_RCC_GetLPUARTClockSource(void)1226 __STATIC_INLINE uint32_t LL_RCC_GetLPUARTClockSource(void)
1227 {
1228   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_LPUCLKSEL));
1229 }
1230 
1231 /**
1232   * @}
1233   */
1234 #endif /* RCC_CFGR_LPUCLKSEL */
1235 
1236 /** @defgroup RCC_LL_EF_MCO_LSCO MCO/LSCO configuration
1237   * @{
1238   */
1239 
1240 /**
1241   * @brief  Configure MCOx
1242   * @rmtoll CFGR         MCOSEL        LL_RCC_ConfigMCO\n
1243   *         CFGR         CCOPRE        LL_RCC_ConfigMCO
1244   * @param  MCOSource This parameter can be one of the following values:
1245   *         @arg @ref LL_RCC_MCOSOURCE_NOCLOCK
1246   *         @arg @ref LL_RCC_MCOSOURCE_SYSCLK
1247   *         @arg @ref LL_RCC_MCOSOURCE_HSI
1248   *         @arg @ref LL_RCC_MCOSOURCE_RC64MPLL
1249   *         @arg @ref LL_RCC_MCOSOURCE_HSE
1250   *         @arg @ref LL_RCC_MCOSOURCE_HSI64M_DIV2048
1251   *         @arg @ref LL_RCC_MCOSOURCE_SMPS
1252   *         @arg @ref LL_RCC_MCOSOURCE_ADC
1253   * @param  MCOPrescaler This parameter can be one of the following values:
1254   *         @arg @ref LL_RCC_MCO_DIV_1
1255   *         @arg @ref LL_RCC_MCO_DIV_2
1256   *         @arg @ref LL_RCC_MCO_DIV_4
1257   *         @arg @ref LL_RCC_MCO_DIV_8
1258   *         @arg @ref LL_RCC_MCO_DIV_16
1259   *         @arg @ref LL_RCC_MCO_DIV_32
1260   * @retval None
1261   */
LL_RCC_ConfigMCO(uint32_t MCOSource,uint32_t MCOPrescaler)1262 __STATIC_INLINE void LL_RCC_ConfigMCO(uint32_t MCOSource, uint32_t MCOPrescaler)
1263 {
1264   MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL | RCC_CFGR_CCOPRE, MCOSource | MCOPrescaler);
1265 }
1266 
1267 /**
1268   * @brief  Configure LSCOx
1269   * @rmtoll CFGR         LCOSEL        LL_RCC_ConfigLSCO
1270   * @param  LSCOSource This parameter can be one of the following values:
1271   *         @arg @ref LL_RCC_LSCOSOURCE_NOCLOCK
1272   *         @arg @ref LL_RCC_LSCOSOURCE_LSI
1273   *         @arg @ref LL_RCC_LSCOSOURCE_LSE
1274   * @retval None
1275   */
LL_RCC_ConfigLSCO(uint32_t LSCOSource)1276 __STATIC_INLINE void LL_RCC_ConfigLSCO(uint32_t LSCOSource)
1277 {
1278   MODIFY_REG(RCC->CFGR, RCC_CFGR_LCOSEL, LSCOSource);
1279 }
1280 
1281 #if defined(RCC_CFGR_LCOEN)
1282 /**
1283   * @brief  LCO enabled on GPIA_Pin_10 also in deepstop
1284   * @rmtoll CFGR         LCOEN        LL_RCC_LSCOinDeepStop_Enable
1285   * @retval None
1286   */
LL_RCC_LSCOinDeepStop_Enable(void)1287 __STATIC_INLINE void LL_RCC_LSCOinDeepStop_Enable(void)
1288 {
1289   SET_BIT(RCC->CFGR, RCC_CFGR_LCOEN);
1290 }
1291 
1292 /**
1293   * @brief  LCO disabled on GPIA_Pin_10 also in deepstop
1294   * @rmtoll CFGR         LCOEN        LL_RCC_LSCOinDeepStop_Disable
1295   * @retval None
1296   */
LL_RCC_LSCOinDeepStop_Disable(void)1297 __STATIC_INLINE void LL_RCC_LSCOinDeepStop_Disable(void)
1298 {
1299   CLEAR_BIT(RCC->CFGR, RCC_CFGR_LCOEN);
1300 }
1301 
1302 /**
1303   * @brief  Check if the LCO is enabled on PA10 in deepstop
1304   * @rmtoll CFGR         LCOEN        LL_RCC_LSCOinDeepStop_IsEnabled
1305   * @retval State of bit (1 or 0).
1306   */
LL_RCC_LSCOinDeepStop_IsEnabled(void)1307 __STATIC_INLINE uint32_t LL_RCC_LSCOinDeepStop_IsEnabled(void)
1308 {
1309   return ((READ_BIT(RCC->CFGR, RCC_CFGR_LCOEN) == (RCC_CFGR_LCOEN)) ? 1UL : 0UL);
1310 }
1311 #endif
1312 /**
1313   * @}
1314   */
1315 
1316 
1317 #if defined( RCC_CFGR_IOBOOSTEN)
1318 /** @defgroup RCC_LL_EF_IOBOOST IOBOOSTER configuration
1319   * @{
1320   */
1321 /**
1322   * @brief  IO BOOSTER enable
1323   * @rmtoll CFGR         IOBOOSTEN        LL_RCC_IOBOOST_Enable
1324   * @retval None
1325   */
LL_RCC_IOBOOST_Enable(void)1326 __STATIC_INLINE void LL_RCC_IOBOOST_Enable(void)
1327 {
1328   SET_BIT(RCC->CFGR, RCC_CFGR_IOBOOSTEN);
1329 }
1330 
1331 /**
1332   * @brief  IO BOOSTER disable
1333   * @rmtoll CFGR         IOBOOSTEN        LL_RCC_IOBOOST_Disable
1334   * @retval None
1335   */
LL_RCC_IOBOOST_Disable(void)1336 __STATIC_INLINE void LL_RCC_IOBOOST_Disable(void)
1337 {
1338   CLEAR_BIT(RCC->CFGR, RCC_CFGR_IOBOOSTEN);
1339 }
1340 
1341 /**
1342   * @brief  Check if the IO BOOSTER is enabled
1343   * @rmtoll CFGR         IOBOOSTEN        LL_RCC_IOBOOST_IsEnabled
1344   * @retval State of bit (1 or 0).
1345   */
LL_RCC_IOBOOST_IsEnabled(void)1346 __STATIC_INLINE uint32_t LL_RCC_IOBOOST_IsEnabled(void)
1347 {
1348   return ((READ_BIT(RCC->CFGR, RCC_CFGR_IOBOOSTEN) == (RCC_CFGR_IOBOOSTEN)) ? 1UL : 0UL);
1349 }
1350 
1351 /**
1352   * @}
1353   */
1354 #endif
1355 
1356 #if defined( RCC_CFGR_IOBOOSTCLKEN)
1357 /** @defgroup RCC_LL_EF_IOBOOSTCLK IOBOOSTER Clock configuration
1358   * @{
1359   */
1360 
1361 /**
1362   * @brief  IO BOOSTER clock enable
1363   * @rmtoll CFGR         IOBOOSTCLKEN        LL_RCC_IOBOOSTCLK_Enable
1364   * @retval None
1365   */
LL_RCC_IOBOOSTCLK_Enable(void)1366 __STATIC_INLINE void LL_RCC_IOBOOSTCLK_Enable(void)
1367 {
1368   SET_BIT(RCC->CFGR, RCC_CFGR_IOBOOSTCLKEN);
1369 }
1370 
1371 /**
1372   * @brief  IO BOOSTER clock disable
1373   * @rmtoll CFGR         IOBOOSTCLKEN        LL_RCC_IOBOOSTCLK_Disable
1374   * @retval None
1375   */
LL_RCC_IOBOOSTCLK_Disable(void)1376 __STATIC_INLINE void LL_RCC_IOBOOSTCLK_Disable(void)
1377 {
1378   CLEAR_BIT(RCC->CFGR, RCC_CFGR_IOBOOSTCLKEN);
1379 }
1380 
1381 /**
1382   * @brief  Check if the IO BOOSTER clock is enabled
1383   * @rmtoll CFGR         IOBOOSTCLKEN        LL_RCC_IOBOOSTCLK_IsEnabled
1384   * @retval State of bit (1 or 0).
1385   */
LL_RCC_IOBOOSTCLK_IsEnabled(void)1386 __STATIC_INLINE uint32_t LL_RCC_IOBOOSTCLK_IsEnabled(void)
1387 {
1388   return ((READ_BIT(RCC->CFGR, RCC_CFGR_IOBOOSTCLKEN) == (RCC_CFGR_IOBOOSTCLKEN)) ? 1UL : 0UL);
1389 }
1390 
1391 /**
1392   * @}
1393   */
1394 #endif
1395 
1396 /** @defgroup RCC_LL_EF_Peripheral_Clock_Source Peripheral Clock Source
1397   * @{
1398   */
1399 
1400 #if defined(SPI2)
1401 /**
1402   * @brief  Configure SPI2I2S  clock source
1403   * @rmtoll CFGR        SPI2I2SCLKSEL      LL_RCC_SetSPI2I2SClockSource
1404   * @param  Source This parameter can be one of the following values:
1405   *         @arg @ref LL_RCC_SPI2_I2S_CLK16M
1406   *         @arg @ref LL_RCC_SPI2_I2S_CLK32M
1407   * @retval None
1408   */
LL_RCC_SetSPI2I2SClockSource(uint32_t Source)1409 __STATIC_INLINE void LL_RCC_SetSPI2I2SClockSource(uint32_t Source)
1410 {
1411   MODIFY_REG(RCC->CFGR, RCC_CFGR_SPI2I2SCLKSEL, Source);
1412 }
1413 #endif
1414 
1415 /**
1416   * @brief  Configure SPI3I2S  clock source
1417   * @rmtoll CFGR        SPI3I2SCLKSEL      LL_RCC_SetSPI3I2SClockSource
1418   * @param  Source This parameter can be one of the following values:
1419   *         @arg @ref LL_RCC_SPI3_I2S_CLK16M
1420   *         @arg @ref LL_RCC_SPI3_I2S_CLK32M
1421   *         @arg @ref LL_RCC_SPI3_I2S_CLK64M
1422   * @retval None
1423   * @note The LL_RCC_SPI3_I2S_CLK64M is valid for STM32WB05 and STM32WB09 family
1424   */
LL_RCC_SetSPI3I2SClockSource(uint32_t Source)1425 __STATIC_INLINE void LL_RCC_SetSPI3I2SClockSource(uint32_t Source)
1426 {
1427   MODIFY_REG(RCC->CFGR, RCC_CFGR_SPI3I2SCLKSEL, Source);
1428 }
1429 
1430 #if defined(SPI2)
1431 /**
1432   * @brief  Get SPI2I2S clock source
1433   * @rmtoll CFGR        SPI2I2SCLKSEL    LL_RCC_GetSPI2I2SClockSource
1434   * @retval Returned value can be one of the following values:
1435   *         @arg @ref LL_RCC_SPI2_I2S_CLK16M
1436   *         @arg @ref LL_RCC_SPI2_I2S_CLK32M
1437   */
LL_RCC_GetSPI2I2SClockSource(void)1438 __STATIC_INLINE uint32_t LL_RCC_GetSPI2I2SClockSource(void)
1439 {
1440   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SPI2I2SCLKSEL));
1441 }
1442 #endif
1443 
1444 /**
1445   * @brief  Get SPI3I2S clock source
1446   * @rmtoll CFGR        SPI3I2SCLKSEL    LL_RCC_GetSPI3I2SClockSource
1447   * @retval Returned value can be one of the following values:
1448   *         @arg @ref LL_RCC_SPI3_I2S_CLK16M
1449   *         @arg @ref LL_RCC_SPI3_I2S_CLK32M
1450   *         @arg @ref LL_RCC_SPI3_I2S_CLK64M
1451   * @note The LL_RCC_SPI3_I2S_CLK64M is valid for STM32WB05 and STM32WB09 family
1452   */
LL_RCC_GetSPI3I2SClockSource(void)1453 __STATIC_INLINE uint32_t LL_RCC_GetSPI3I2SClockSource(void)
1454 {
1455   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SPI3I2SCLKSEL));
1456 }
1457 
1458 /**
1459   * @}
1460   */
1461 
1462 
1463 /** @defgroup RCC_LL_EF_PLL PLL
1464   * @{
1465   */
1466 
1467 /**
1468   * @brief  Enable RC64MPLL
1469   * @rmtoll CR           HSIPLLON         LL_RCC_RC64MPLL_Enable
1470   * @retval None
1471   */
LL_RCC_RC64MPLL_Enable(void)1472 __STATIC_INLINE void LL_RCC_RC64MPLL_Enable(void)
1473 {
1474   SET_BIT(RCC->CR, RCC_CR_HSIPLLON);
1475 }
1476 
1477 /**
1478   * @brief  Disable RC64MPLL
1479   * @note Cannot be disabled if the RC64MPLL clock is used as the system clock
1480   * @rmtoll CR           HSIPLLON         LL_RCC_RC64MPLL_Disable
1481   * @retval None
1482   */
LL_RCC_RC64MPLL_Disable(void)1483 __STATIC_INLINE void LL_RCC_RC64MPLL_Disable(void)
1484 {
1485   CLEAR_BIT(RCC->CR, RCC_CR_HSIPLLON);
1486 }
1487 
1488 /**
1489   * @brief  Check if RC64MPLL is Ready
1490   * @rmtoll CR           HSIPLLRDY        LL_RCC_RC64MPLL_IsReady
1491   * @retval State of bit (1 or 0).
1492   */
LL_RCC_RC64MPLL_IsReady(void)1493 __STATIC_INLINE uint32_t LL_RCC_RC64MPLL_IsReady(void)
1494 {
1495   return ((READ_BIT(RCC->CR, RCC_CR_HSIPLLRDY) == (RCC_CR_HSIPLLRDY)) ? 1UL : 0UL);
1496 }
1497 
1498 /**
1499   * @brief  Set RC64MPLL prescaler
1500   * @rmtoll CFGR       CLKSYSDIV          LL_RCC_SetRC64MPLLPrescaler
1501   * @param  Prescaler This parameter can be one of the following values:
1502   *         @arg @ref LL_RCC_RC64MPLL_DIV_1
1503   *         @arg @ref LL_RCC_RC64MPLL_DIV_2
1504   *         @arg @ref LL_RCC_RC64MPLL_DIV_4
1505   *         @arg @ref LL_RCC_RC64MPLL_DIV_8
1506   *         @arg @ref LL_RCC_RC64MPLL_DIV_16
1507   *         @arg @ref LL_RCC_RC64MPLL_DIV_32
1508   *         @arg @ref LL_RCC_RC64MPLL_DIV_64
1509   * @retval None
1510   */
LL_RCC_SetRC64MPLLPrescaler(uint32_t Prescaler)1511 __STATIC_INLINE void LL_RCC_SetRC64MPLLPrescaler(uint32_t Prescaler)
1512 {
1513   MODIFY_REG(RCC->CFGR, RCC_CFGR_CLKSYSDIV, Prescaler);
1514 }
1515 
1516 /**
1517   * @brief  Get RC64MPLL prescaler
1518   * @rmtoll CFGR         CLKSYSDIV     LL_RCC_GetRC64MPLLPrescaler
1519   * @retval Returned value can be one of the following values:
1520   *         @arg @ref LL_RCC_RC64MPLL_DIV_1
1521   *         @arg @ref LL_RCC_RC64MPLL_DIV_2
1522   *         @arg @ref LL_RCC_RC64MPLL_DIV_4
1523   *         @arg @ref LL_RCC_RC64MPLL_DIV_8
1524   *         @arg @ref LL_RCC_RC64MPLL_DIV_16
1525   *         @arg @ref LL_RCC_RC64MPLL_DIV_32
1526   *         @arg @ref LL_RCC_RC64MPLL_DIV_64
1527   */
LL_RCC_GetRC64MPLLPrescaler(void)1528 __STATIC_INLINE uint32_t LL_RCC_GetRC64MPLLPrescaler(void)
1529 {
1530   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_CLKSYSDIV));
1531 }
1532 
1533 #if defined(RCC_CFGR_CLKSYSDIV_STATUS)
1534 /**
1535   * @brief  Get System Clock Prescaler Status
1536   * @rmtoll CFGR         CLKSYSDIV_STATUS     LL_RCC_GetCLKSYSPrescalerStatus
1537   * @retval Returned value can be one of the following values:
1538   *         @arg @ref LL_RCC_RC64MPLL_DIV_1
1539   *         @arg @ref LL_RCC_RC64MPLL_DIV_2
1540   *         @arg @ref LL_RCC_RC64MPLL_DIV_4
1541   *         @arg @ref LL_RCC_RC64MPLL_DIV_8
1542   *         @arg @ref LL_RCC_RC64MPLL_DIV_16
1543   *         @arg @ref LL_RCC_RC64MPLL_DIV_32
1544   *         @arg @ref LL_RCC_RC64MPLL_DIV_64
1545   *         @arg @ref LL_RCC_DIRECT_HSE_DIV_1
1546   *         @arg @ref LL_RCC_DIRECT_HSE_DIV_2
1547   *         @arg @ref LL_RCC_DIRECT_HSE_DIV_4
1548   *         @arg @ref LL_RCC_DIRECT_HSE_DIV_8
1549   *         @arg @ref LL_RCC_DIRECT_HSE_DIV_16
1550   *         @arg @ref LL_RCC_DIRECT_HSE_DIV_32
1551   */
LL_RCC_GetCLKSYSPrescalerStatus(void)1552 __STATIC_INLINE uint32_t LL_RCC_GetCLKSYSPrescalerStatus(void)
1553 {
1554   return (uint32_t)((READ_BIT(RCC->CFGR, RCC_CFGR_CLKSYSDIV_STATUS) >> RCC_CFGR_CLKSYSDIV_STATUS_Pos) << RCC_CFGR_CLKSYSDIV_Pos);
1555 }
1556 #endif
1557 
1558 /**
1559   * @brief  Set DIRECT_HSE prescaler
1560   * @rmtoll CFGR       CLKSYSDIV          LL_RCC_SetDirectHSEPrescaler
1561   * @param  Prescaler This parameter can be one of the following values:
1562   *         @arg @ref LL_RCC_DIRECT_HSE_DIV_1
1563   *         @arg @ref LL_RCC_DIRECT_HSE_DIV_2
1564   *         @arg @ref LL_RCC_DIRECT_HSE_DIV_4
1565   *         @arg @ref LL_RCC_DIRECT_HSE_DIV_8
1566   *         @arg @ref LL_RCC_DIRECT_HSE_DIV_16
1567   *         @arg @ref LL_RCC_DIRECT_HSE_DIV_32
1568   * @retval None
1569   */
LL_RCC_SetDirectHSEPrescaler(uint32_t Prescaler)1570 __STATIC_INLINE void LL_RCC_SetDirectHSEPrescaler(uint32_t Prescaler)
1571 {
1572   MODIFY_REG(RCC->CFGR, RCC_CFGR_CLKSYSDIV, Prescaler);
1573 }
1574 
1575 /**
1576   * @brief  Get DIRECT_HSE prescaler
1577   * @rmtoll CFGR         CLKSYSDIV     LL_RCC_GetDirectHSEPrescaler
1578   * @retval Returned value can be one of the following values:
1579   *         @arg @ref LL_RCC_DIRECT_HSE_DIV_1
1580   *         @arg @ref LL_RCC_DIRECT_HSE_DIV_2
1581   *         @arg @ref LL_RCC_DIRECT_HSE_DIV_4
1582   *         @arg @ref LL_RCC_DIRECT_HSE_DIV_8
1583   *         @arg @ref LL_RCC_DIRECT_HSE_DIV_16
1584   *         @arg @ref LL_RCC_DIRECT_HSE_DIV_32
1585   */
LL_RCC_GetDirectHSEPrescaler(void)1586 __STATIC_INLINE uint32_t LL_RCC_GetDirectHSEPrescaler(void)
1587 {
1588   return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_CLKSYSDIV));
1589 }
1590 /**
1591   * @}
1592   */
1593 
1594 /** @defgroup RCC_LL_EF_FLAG_Management FLAG Management
1595   * @{
1596   */
1597 
1598 /**
1599   * @brief  Clear LSI ready interrupt flag
1600   * @rmtoll CIFR         LSIRDYF       LL_RCC_ClearFlag_LSIRDY
1601   * @retval None
1602   */
LL_RCC_ClearFlag_LSIRDY(void)1603 __STATIC_INLINE void LL_RCC_ClearFlag_LSIRDY(void)
1604 {
1605   WRITE_REG(RCC->CIFR, RCC_CIFR_LSIRDYF);
1606 }
1607 
1608 /**
1609   * @brief  Clear LSE ready interrupt flag
1610   * @rmtoll CIFR         LSERDYF       LL_RCC_ClearFlag_LSERDY
1611   * @retval None
1612   */
LL_RCC_ClearFlag_LSERDY(void)1613 __STATIC_INLINE void LL_RCC_ClearFlag_LSERDY(void)
1614 {
1615   WRITE_REG(RCC->CIFR, RCC_CIFR_LSERDYF);
1616 }
1617 
1618 /**
1619   * @brief  Clear HSI ready interrupt flag
1620   * @rmtoll CIFR         HSIRDYF       LL_RCC_ClearFlag_HSIRDY
1621   * @retval None
1622   */
LL_RCC_ClearFlag_HSIRDY(void)1623 __STATIC_INLINE void LL_RCC_ClearFlag_HSIRDY(void)
1624 {
1625   WRITE_REG(RCC->CIFR, RCC_CIFR_HSIRDYF);
1626 }
1627 
1628 /**
1629   * @brief  Clear HSE ready interrupt flag
1630   * @rmtoll CIFR         HSERDYF       LL_RCC_ClearFlag_HSERDY
1631   * @retval None
1632   */
LL_RCC_ClearFlag_HSERDY(void)1633 __STATIC_INLINE void LL_RCC_ClearFlag_HSERDY(void)
1634 {
1635   WRITE_REG(RCC->CIFR, RCC_CIFR_HSERDYF);
1636 }
1637 
1638 /**
1639   * @brief  Clear RC64MPLL ready interrupt flag
1640   * @rmtoll CIFR         HSIPLLRDYF       LL_RCC_ClearFlag_RC64MPLLRDY
1641   * @retval None
1642   */
LL_RCC_ClearFlag_RC64MPLLRDY(void)1643 __STATIC_INLINE void LL_RCC_ClearFlag_RC64MPLLRDY(void)
1644 {
1645   WRITE_REG(RCC->CIFR, RCC_CIFR_HSIPLLRDYF);
1646 }
1647 
1648 /**
1649   * @brief  Clear RC64MPLL Unlock Detection interrupt flag
1650   * @rmtoll CIFR         HSIPLLUNLOCKDETF       LL_RCC_ClearFlag_RC64MPLLUNLOCKDET
1651   * @retval None
1652   */
LL_RCC_ClearFlag_RC64MPLLUNLOCKDET(void)1653 __STATIC_INLINE void LL_RCC_ClearFlag_RC64MPLLUNLOCKDET(void)
1654 {
1655   WRITE_REG(RCC->CIFR, RCC_CIFR_HSIPLLUNLOCKDETF);
1656 }
1657 
1658 /**
1659   * @brief  Clear RTC Reset Release interrupt flag
1660   * @rmtoll CIFR         RTCRSTF       LL_RCC_ClearFlag_RTCRRSTREL
1661   * @retval None
1662   */
LL_RCC_ClearFlag_RTCRSTREL(void)1663 __STATIC_INLINE void LL_RCC_ClearFlag_RTCRSTREL(void)
1664 {
1665   WRITE_REG(RCC->CIFR, RCC_CIFR_RTCRSTF);
1666 }
1667 
1668 /**
1669   * @brief  Clear Watchdog Reset Release interrupt flag
1670   * @rmtoll CIFR         WDGRSTF       LL_RCC_ClearFlag_WDGRSTREL
1671   * @retval None
1672   */
LL_RCC_ClearFlag_WDGRSTREL(void)1673 __STATIC_INLINE void LL_RCC_ClearFlag_WDGRSTREL(void)
1674 {
1675   WRITE_REG(RCC->CIFR, RCC_CIFR_WDGRSTF);
1676 }
1677 
1678 #if defined(RCC_CIFR_LPURSTF)
1679 /**
1680   * @brief  Clear LPUART Reset Release interrupt flag
1681   * @rmtoll CIFR         LPURSTF       LL_RCC_ClearFlag_LPURSTREL
1682   * @retval None
1683   */
LL_RCC_ClearFlag_LPURSTREL(void)1684 __STATIC_INLINE void LL_RCC_ClearFlag_LPURSTREL(void)
1685 {
1686   WRITE_REG(RCC->CIFR, RCC_CIFR_LPURSTF);
1687 }
1688 #endif
1689 
1690 /**
1691   * @brief  Check if LSI ready interrupt occurred or not
1692   * @rmtoll CIFR         LSIRDYF       LL_RCC_IsActiveFlag_LSIRDY
1693   * @retval State of bit (1 or 0).
1694   */
LL_RCC_IsActiveFlag_LSIRDY(void)1695 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSIRDY(void)
1696 {
1697   return ((READ_BIT(RCC->CIFR, RCC_CIFR_LSIRDYF) == (RCC_CIFR_LSIRDYF)) ? 1UL : 0UL);
1698 }
1699 
1700 /**
1701   * @brief  Check if LSE ready interrupt occurred or not
1702   * @rmtoll CIFR         LSERDYF       LL_RCC_IsActiveFlag_LSERDY
1703   * @retval State of bit (1 or 0).
1704   */
LL_RCC_IsActiveFlag_LSERDY(void)1705 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSERDY(void)
1706 {
1707   return ((READ_BIT(RCC->CIFR, RCC_CIFR_LSERDYF) == (RCC_CIFR_LSERDYF)) ? 1UL : 0UL);
1708 }
1709 
1710 /**
1711   * @brief  Check if HSI ready interrupt occurred or not
1712   * @rmtoll CIFR         HSIRDYF       LL_RCC_IsActiveFlag_HSIRDY
1713   * @retval State of bit (1 or 0).
1714   */
LL_RCC_IsActiveFlag_HSIRDY(void)1715 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSIRDY(void)
1716 {
1717   return ((READ_BIT(RCC->CIFR, RCC_CIFR_HSIRDYF) == (RCC_CIFR_HSIRDYF)) ? 1UL : 0UL);
1718 }
1719 
1720 /**
1721   * @brief  Check if HSE ready interrupt occurred or not
1722   * @rmtoll CIFR         HSERDYF       LL_RCC_IsActiveFlag_HSERDY
1723   * @retval State of bit (1 or 0).
1724   */
LL_RCC_IsActiveFlag_HSERDY(void)1725 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSERDY(void)
1726 {
1727   return ((READ_BIT(RCC->CIFR, RCC_CIFR_HSERDYF) == (RCC_CIFR_HSERDYF)) ? 1UL : 0UL);
1728 }
1729 
1730 /**
1731   * @brief  Check if RC64MPLL ready interrupt occurred or not
1732   * @rmtoll CIFR         HSIPLLRDYF       LL_RCC_IsActiveFlag_RC64MPLLRDY
1733   * @retval State of bit (1 or 0).
1734   */
LL_RCC_IsActiveFlag_RC64MPLLRDY(void)1735 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_RC64MPLLRDY(void)
1736 {
1737   return ((READ_BIT(RCC->CIFR, RCC_CIFR_HSIPLLRDYF) == (RCC_CIFR_HSIPLLRDYF)) ? 1UL : 0UL);
1738 }
1739 
1740 /**
1741   * @brief  Check if RC64MPLL Unlock Detection flag interrupt occurred or not
1742   * @rmtoll CIFR         HSIPLLUNLOCKDETF       LL_RCC_IsActiveFlag_RC64MPLLUNLOCKDET
1743   * @retval State of bit (1 or 0).
1744   */
LL_RCC_IsActiveFlag_RC64MPLLUNLOCKDET(void)1745 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_RC64MPLLUNLOCKDET(void)
1746 {
1747   return ((READ_BIT(RCC->CIFR, RCC_CIFR_HSIPLLUNLOCKDETF) == (RCC_CIFR_HSIPLLUNLOCKDETF)) ? 1UL : 0UL);
1748 }
1749 
1750 /**
1751   * @brief  Check if RTC Reset Release flag interrupt occurred or not
1752   * @rmtoll CIFR         RTCRSTF       LL_RCC_IsActiveFlag_RTCRSTREL
1753   * @retval State of bit (1 or 0).
1754   */
LL_RCC_IsActiveFlag_RTCRSTREL(void)1755 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_RTCRSTREL(void)
1756 {
1757   return ((READ_BIT(RCC->CIFR, RCC_CIFR_RTCRSTF) == (RCC_CIFR_RTCRSTF)) ? 1UL : 0UL);
1758 }
1759 
1760 /**
1761   * @brief  Check if WDG Reset Release flag interrupt occurred or not
1762   * @rmtoll CIFR         WDGRSTF       LL_RCC_IsActiveFlag_WDGRSTREL
1763   * @retval State of bit (1 or 0).
1764   */
LL_RCC_IsActiveFlag_WDGRSTREL(void)1765 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_WDGRSTREL(void)
1766 {
1767   return ((READ_BIT(RCC->CIFR, RCC_CIFR_WDGRSTF) == (RCC_CIFR_WDGRSTF)) ? 1UL : 0UL);
1768 }
1769 
1770 #if defined(RCC_CIFR_LPURSTF)
1771 /**
1772   * @brief  Check if LPUART Reset Release flag interrupt occurred or not
1773   * @rmtoll CIFR         LPURSTF       LL_RCC_IsActiveFlag_LPURSTREL
1774   * @retval State of bit (1 or 0).
1775   */
LL_RCC_IsActiveFlag_LPURSTREL(void)1776 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LPURSTREL(void)
1777 {
1778   return ((READ_BIT(RCC->CIFR, RCC_CIFR_LPURSTF) == (RCC_CIFR_LPURSTF)) ? 1UL : 0UL);
1779 }
1780 #endif
1781 
1782 
1783 /**
1784   * @brief  Check if RCC flag CPU lockup reset is set or not.
1785   * @rmtoll CSR          LOCKUPRSTF      LL_RCC_IsActiveFlag_LOCKUPRST
1786   * @retval State of bit (1 or 0).
1787   */
LL_RCC_IsActiveFlag_LOCKUPRST(void)1788 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LOCKUPRST(void)
1789 {
1790   return ((READ_BIT(RCC->CSR, RCC_CSR_LOCKUPRSTF) == (RCC_CSR_LOCKUPRSTF)) ? 1UL : 0UL);
1791 }
1792 
1793 /**
1794   * @brief  Check if RCC flag Watchdog reset is set or not.
1795   * @rmtoll CSR          WDGRSTF      LL_RCC_IsActiveFlag_WDGRST
1796   * @retval State of bit (1 or 0).
1797   */
LL_RCC_IsActiveFlag_WDGRST(void)1798 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_WDGRST(void)
1799 {
1800   return ((READ_BIT(RCC->CSR, RCC_CSR_WDGRSTF) == (RCC_CSR_WDGRSTF)) ? 1UL : 0UL);
1801 }
1802 
1803 /**
1804   * @brief  Check if RCC flag Software reset is set or not.
1805   * @rmtoll CSR          SFTRSTF      LL_RCC_IsActiveFlag_SFTRST
1806   * @retval State of bit (1 or 0).
1807   */
LL_RCC_IsActiveFlag_SFTRST(void)1808 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_SFTRST(void)
1809 {
1810   return ((READ_BIT(RCC->CSR, RCC_CSR_SFTRSTF) == (RCC_CSR_SFTRSTF)) ? 1UL : 0UL);
1811 }
1812 
1813 /**
1814   * @brief  Check if RCC flag Power-On reset is set or not.
1815   * @rmtoll CSR          PORRSTF      LL_RCC_IsActiveFlag_PORRST
1816   * @retval State of bit (1 or 0).
1817   */
LL_RCC_IsActiveFlag_PORRST(void)1818 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PORRST(void)
1819 {
1820   return ((READ_BIT(RCC->CSR, RCC_CSR_PORRSTF) == (RCC_CSR_PORRSTF)) ? 1UL : 0UL);
1821 }
1822 
1823 /**
1824   * @brief  Check if RCC flag NRSTn pad reset is set or not.
1825   * @rmtoll CSR          PADRSTF      LL_RCC_IsActiveFlag_PADRST
1826   * @retval State of bit (1 or 0).
1827   */
LL_RCC_IsActiveFlag_PADRST(void)1828 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PADRST(void)
1829 {
1830   return ((READ_BIT(RCC->CSR, RCC_CSR_PADRSTF) == (RCC_CSR_PADRSTF)) ? 1UL : 0UL);
1831 }
1832 
1833 /**
1834   * @brief  Set RMVF bit to clear the reset flags.
1835   * @rmtoll CSR          RMVF          LL_RCC_ClearResetFlags
1836   * @retval None
1837   */
LL_RCC_ClearResetFlags(void)1838 __STATIC_INLINE void LL_RCC_ClearResetFlags(void)
1839 {
1840   WRITE_REG(RCC->CSR, RCC_CSR_RMVF);
1841 }
1842 
1843 /**
1844   * @}
1845   */
1846 
1847 /** @defgroup RCC_LL_EF_CLK_SWITCH_Management Clock Switch Management
1848   * @{
1849   */
1850 
1851 /**
1852   * @brief  Set RC64MPLL prescaler to switch the clock when the MR_BLE is enabled
1853   * @rmtoll CSCMDR       CLKSYSDIV_REQ          LL_RCC_SwitchRC64MPLLPrescaler
1854   * @param  Prescaler This parameter can be one of the following values:
1855   *         @arg @ref LL_RCC_RC64MPLL_SWITCH_DIV_1
1856   *         @arg @ref LL_RCC_RC64MPLL_SWITCH_DIV_2
1857   *         @arg @ref LL_RCC_RC64MPLL_SWITCH_DIV_4
1858   * @retval None
1859   */
LL_RCC_SwitchRC64MPLLPrescaler(uint32_t Prescaler)1860 __STATIC_INLINE void LL_RCC_SwitchRC64MPLLPrescaler(uint32_t Prescaler)
1861 {
1862   MODIFY_REG(RCC->CSCMDR, RCC_CSCMDR_CLKSYSDIV_REQ, Prescaler);
1863 }
1864 
1865 /**
1866   * @brief  Request the RC64MPLL prescaler to switch the clock when the MR_BLE is enabled
1867   * @rmtoll CSCMDR       REQUEST          LL_RCC_RequestSwitchRC64MPLLClock
1868   * @retval None
1869   */
LL_RCC_RequestSwitchRC64MPLLClock(void)1870 __STATIC_INLINE void LL_RCC_RequestSwitchRC64MPLLClock(void)
1871 {
1872   SET_BIT(RCC->CSCMDR, RCC_CSCMDR_REQUEST);
1873 }
1874 
1875 /**
1876   * @brief  Get RC64MPLL clock switch status
1877   * @rmtoll CSCMDR        STATUS      LL_RCC_HSE_GetCapacitorTuning
1878   * @retval The Clock switch status. Possible values are:
1879   *         @arg @ref LL_RCC_RC64MPLL_SWITCH_STATUS_IDLE
1880   *         @arg @ref LL_RCC_RC64MPLL_SWITCH_STATUS_ONGOING
1881   *         @arg @ref LL_RCC_RC64MPLL_SWITCH_STATUS_DONE
1882   */
LL_RCC_GetRC64MPLLSwitchStatus(void)1883 __STATIC_INLINE uint32_t LL_RCC_GetRC64MPLLSwitchStatus(void)
1884 {
1885   return (uint32_t)(READ_BIT(RCC->CSCMDR, RCC_CSCMDR_STATUS));
1886 }
1887 
1888 /**
1889   * @brief  Enable End of Switch Sequence interrupt
1890   * @rmtoll CSCMDR         EOFSEQ_IE      LL_RCC_EnableIT_EOFSEQ
1891   * @retval None
1892   */
LL_RCC_EnableIT_EOFSEQ(void)1893 __STATIC_INLINE void LL_RCC_EnableIT_EOFSEQ(void)
1894 {
1895   SET_BIT(RCC->CSCMDR, RCC_CSCMDR_EOFSEQ_IE);
1896 }
1897 
1898 /**
1899   * @brief  Disable End of Switch Sequence interrupt
1900   * @rmtoll CSCMDR         EOFSEQ_IE      LL_RCC_DisableIT_EOFSEQ
1901   * @retval None
1902   */
LL_RCC_DisableIT_EOFSEQ(void)1903 __STATIC_INLINE void LL_RCC_DisableIT_EOFSEQ(void)
1904 {
1905   CLEAR_BIT(RCC->CSCMDR, RCC_CSCMDR_EOFSEQ_IE);
1906 }
1907 
1908 /**
1909   * @brief  Checks if End of Switch Sequence interrupt source is enabled or disabled.
1910   * @rmtoll CSCMDR         EOFSEQ_IE      LL_RCC_IsEnabledIT_EOFSEQ
1911   * @retval State of bit (1 or 0).
1912   */
LL_RCC_IsEnabledIT_EOFSEQ(void)1913 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_EOFSEQ(void)
1914 {
1915   return ((READ_BIT(RCC->CSCMDR, RCC_CSCMDR_EOFSEQ_IE) == (RCC_CSCMDR_EOFSEQ_IE)) ? 1UL : 0UL);
1916 }
1917 
1918 /**
1919   * @brief  Clear End of Sequence interrupt flag
1920   * @rmtoll CSCMDR         EOFSEQ_IRQ       LL_RCC_ClearFlag_EOFSEQ
1921   * @retval None
1922   */
LL_RCC_ClearFlag_EOFSEQ(void)1923 __STATIC_INLINE void LL_RCC_ClearFlag_EOFSEQ(void)
1924 {
1925   WRITE_REG(RCC->CSCMDR, RCC_CSCMDR_EOFSEQ_IRQ);
1926 }
1927 
1928 /**
1929   * @brief  Check if End of Sequence interrupt occurred or not
1930   * @rmtoll CSCMDR         EOFSEQ_IRQ       LL_RCC_IsActiveFlag_EOFSEQ
1931   * @retval State of bit (1 or 0).
1932   */
LL_RCC_IsActiveFlag_EOFSEQ(void)1933 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_EOFSEQ(void)
1934 {
1935   return ((READ_BIT(RCC->CSCMDR, RCC_CSCMDR_EOFSEQ_IRQ) == (RCC_CSCMDR_EOFSEQ_IRQ)) ? 1UL : 0UL);
1936 }
1937 /**
1938   * @}
1939   */
1940 
1941 /** @defgroup RCC_LL_EF_IT_Management IT Management
1942   * @{
1943   */
1944 
1945 /**
1946   * @brief  Enable LSI ready interrupt
1947   * @rmtoll CIER         LSIRDYIE      LL_RCC_EnableIT_LSIRDY
1948   * @retval None
1949   */
LL_RCC_EnableIT_LSIRDY(void)1950 __STATIC_INLINE void LL_RCC_EnableIT_LSIRDY(void)
1951 {
1952   SET_BIT(RCC->CIER, RCC_CIER_LSIRDYIE);
1953 }
1954 
1955 /**
1956   * @brief  Enable LSE ready interrupt
1957   * @rmtoll CIER         LSERDYIE      LL_RCC_EnableIT_LSERDY
1958   * @retval None
1959   */
LL_RCC_EnableIT_LSERDY(void)1960 __STATIC_INLINE void LL_RCC_EnableIT_LSERDY(void)
1961 {
1962   SET_BIT(RCC->CIER, RCC_CIER_LSERDYIE);
1963 }
1964 
1965 /**
1966   * @brief  Enable HSI ready interrupt
1967   * @rmtoll CIER         HSIRDYIE      LL_RCC_EnableIT_HSIRDY
1968   * @retval None
1969   */
LL_RCC_EnableIT_HSIRDY(void)1970 __STATIC_INLINE void LL_RCC_EnableIT_HSIRDY(void)
1971 {
1972   SET_BIT(RCC->CIER, RCC_CIER_HSIRDYIE);
1973 }
1974 
1975 /**
1976   * @brief  Enable HSE ready interrupt
1977   * @rmtoll CIER         HSERDYIE      LL_RCC_EnableIT_HSERDY
1978   * @retval None
1979   */
LL_RCC_EnableIT_HSERDY(void)1980 __STATIC_INLINE void LL_RCC_EnableIT_HSERDY(void)
1981 {
1982   SET_BIT(RCC->CIER, RCC_CIER_HSERDYIE);
1983 }
1984 
1985 /**
1986   * @brief  Enable RC64MPLL ready interrupt
1987   * @rmtoll CIER         HSIPLLRDYIE      LL_RCC_EnableIT_RC64MPLLRDY
1988   * @retval None
1989   */
LL_RCC_EnableIT_RC64MPLLRDY(void)1990 __STATIC_INLINE void LL_RCC_EnableIT_RC64MPLLRDY(void)
1991 {
1992   SET_BIT(RCC->CIER, RCC_CIER_HSIPLLRDYIE);
1993 }
1994 
1995 /**
1996   * @brief  Enable RC64MPLL Unlock Detection interrupt
1997   * @rmtoll CIER         RCC_CIER_HSIPLLUNLOCKDETIE      LL_RCC_EnableIT_RC64MPLLUNLOCKDET
1998   * @retval None
1999   */
LL_RCC_EnableIT_RC64MPLLUNLOCKDET(void)2000 __STATIC_INLINE void LL_RCC_EnableIT_RC64MPLLUNLOCKDET(void)
2001 {
2002   SET_BIT(RCC->CIER, RCC_CIER_HSIPLLUNLOCKDETIE);
2003 }
2004 
2005 /**
2006   * @brief  Enable RTC Reset Release interrupt
2007   * @rmtoll CIER         RCC_CIER_RTCRSTIE      LL_RCC_EnableIT_RTCRSTREL
2008   * @retval None
2009   */
LL_RCC_EnableIT_RTCRSTREL(void)2010 __STATIC_INLINE void LL_RCC_EnableIT_RTCRSTREL(void)
2011 {
2012   SET_BIT(RCC->CIER, RCC_CIER_RTCRSTIE);
2013 }
2014 
2015 /**
2016   * @brief  Enable Watchdog Reset Release interrupt
2017   * @rmtoll CIER         RCC_CIER_WDGRSTIE      LL_RCC_EnableIT_WDGRSTREL
2018   * @retval None
2019   */
LL_RCC_EnableIT_WDGRSTREL(void)2020 __STATIC_INLINE void LL_RCC_EnableIT_WDGRSTREL(void)
2021 {
2022   SET_BIT(RCC->CIER, RCC_CIER_WDGRSTIE);
2023 }
2024 
2025 #if defined(RCC_CIER_LPURSTIE)
2026 /**
2027   * @brief  Enable LPUART Reset Release interrupt
2028   * @rmtoll CIER         RCC_CIER_LPURSTIE      LL_RCC_EnableIT_LPURSTREL
2029   * @retval None
2030   */
LL_RCC_EnableIT_LPURSTREL(void)2031 __STATIC_INLINE void LL_RCC_EnableIT_LPURSTREL(void)
2032 {
2033   SET_BIT(RCC->CIER, RCC_CIER_LPURSTIE);
2034 }
2035 #endif
2036 
2037 /**
2038   * @brief  Disable LSI ready interrupt
2039   * @rmtoll CIER         LSIRDYIE      LL_RCC_DisableIT_LSIRDY
2040   * @retval None
2041   */
LL_RCC_DisableIT_LSIRDY(void)2042 __STATIC_INLINE void LL_RCC_DisableIT_LSIRDY(void)
2043 {
2044   CLEAR_BIT(RCC->CIER, RCC_CIER_LSIRDYIE);
2045 }
2046 
2047 /**
2048   * @brief  Disable LSE ready interrupt
2049   * @rmtoll CIER         LSERDYIE      LL_RCC_DisableIT_LSERDY
2050   * @retval None
2051   */
LL_RCC_DisableIT_LSERDY(void)2052 __STATIC_INLINE void LL_RCC_DisableIT_LSERDY(void)
2053 {
2054   CLEAR_BIT(RCC->CIER, RCC_CIER_LSERDYIE);
2055 }
2056 
2057 /**
2058   * @brief  Disable HSI ready interrupt
2059   * @rmtoll CIER         HSIRDYIE      LL_RCC_DisableIT_HSIRDY
2060   * @retval None
2061   */
LL_RCC_DisableIT_HSIRDY(void)2062 __STATIC_INLINE void LL_RCC_DisableIT_HSIRDY(void)
2063 {
2064   CLEAR_BIT(RCC->CIER, RCC_CIER_HSIRDYIE);
2065 }
2066 
2067 /**
2068   * @brief  Disable HSE ready interrupt
2069   * @rmtoll CIER         HSERDYIE      LL_RCC_DisableIT_HSERDY
2070   * @retval None
2071   */
LL_RCC_DisableIT_HSERDY(void)2072 __STATIC_INLINE void LL_RCC_DisableIT_HSERDY(void)
2073 {
2074   CLEAR_BIT(RCC->CIER, RCC_CIER_HSERDYIE);
2075 }
2076 
2077 /**
2078   * @brief  Disable RC64MPLL ready interrupt
2079   * @rmtoll CIER         HSIPLLRDYIE      LL_RCC_DisableIT_RC64MPLLRDY
2080   * @retval None
2081   */
LL_RCC_DisableIT_RC64MPLLRDY(void)2082 __STATIC_INLINE void LL_RCC_DisableIT_RC64MPLLRDY(void)
2083 {
2084   CLEAR_BIT(RCC->CIER, RCC_CIER_HSIPLLRDYIE);
2085 }
2086 
2087 /**
2088   * @brief  Disable RC64MPLL Unlock Detection interrupt
2089   * @rmtoll CIER         RCC_CIER_HSIPLLUNLOCKDETIE      LL_RCC_DisableIT_RC64MPLLUNLOCKDET
2090   * @retval None
2091   */
LL_RCC_DisableIT_RC64MPLLUNLOCKDET(void)2092 __STATIC_INLINE void LL_RCC_DisableIT_RC64MPLLUNLOCKDET(void)
2093 {
2094   CLEAR_BIT(RCC->CIER, RCC_CIER_HSIPLLUNLOCKDETIE);
2095 }
2096 
2097 /**
2098   * @brief  Disable RTC Reset Release interrupt
2099   * @rmtoll CIER         RCC_CIER_RTCRSTIE      LL_RCC_DisableIT_RTCRSTREL
2100   * @retval None
2101   */
LL_RCC_DisableIT_RTCRSTREL(void)2102 __STATIC_INLINE void LL_RCC_DisableIT_RTCRSTREL(void)
2103 {
2104   CLEAR_BIT(RCC->CIER, RCC_CIER_RTCRSTIE);
2105 }
2106 
2107 /**
2108   * @brief  Disable Watchdog Reset Release interrupt
2109   * @rmtoll CIER         RCC_CIER_WDGRSTIE      LL_RCC_DisableIT_WDGRSTREL
2110   * @retval None
2111   */
LL_RCC_DisableIT_WDGRSTREL(void)2112 __STATIC_INLINE void LL_RCC_DisableIT_WDGRSTREL(void)
2113 {
2114   CLEAR_BIT(RCC->CIER, RCC_CIER_WDGRSTIE);
2115 }
2116 
2117 #if defined(RCC_CIER_LPURSTIE)
2118 /**
2119   * @brief  Disable LPUART Reset Release interrupt
2120   * @rmtoll CIER         RCC_CIER_LPURSTIE      LL_RCC_DisableIT_LPURSTREL
2121   * @retval None
2122   */
LL_RCC_DisableIT_LPURSTREL(void)2123 __STATIC_INLINE void LL_RCC_DisableIT_LPURSTREL(void)
2124 {
2125   CLEAR_BIT(RCC->CIER, RCC_CIER_LPURSTIE);
2126 }
2127 #endif
2128 
2129 /**
2130   * @brief  Checks if LSI ready interrupt source is enabled or disabled.
2131   * @rmtoll CIER         LSIRDYIE      LL_RCC_IsEnabledIT_LSIRDY
2132   * @retval State of bit (1 or 0).
2133   */
LL_RCC_IsEnabledIT_LSIRDY(void)2134 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSIRDY(void)
2135 {
2136   return ((READ_BIT(RCC->CIER, RCC_CIER_LSIRDYIE) == (RCC_CIER_LSIRDYIE)) ? 1UL : 0UL);
2137 }
2138 
2139 /**
2140   * @brief  Checks if LSE ready interrupt source is enabled or disabled.
2141   * @rmtoll CIER         LSERDYIE      LL_RCC_IsEnabledIT_LSERDY
2142   * @retval State of bit (1 or 0).
2143   */
LL_RCC_IsEnabledIT_LSERDY(void)2144 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSERDY(void)
2145 {
2146   return ((READ_BIT(RCC->CIER, RCC_CIER_LSERDYIE) == (RCC_CIER_LSERDYIE)) ? 1UL : 0UL);
2147 }
2148 
2149 /**
2150   * @brief  Checks if HSI ready interrupt source is enabled or disabled.
2151   * @rmtoll CIER         HSIRDYIE      LL_RCC_IsEnabledIT_HSIRDY
2152   * @retval State of bit (1 or 0).
2153   */
LL_RCC_IsEnabledIT_HSIRDY(void)2154 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSIRDY(void)
2155 {
2156   return ((READ_BIT(RCC->CIER, RCC_CIER_HSIRDYIE) == (RCC_CIER_HSIRDYIE)) ? 1UL : 0UL);
2157 }
2158 
2159 /**
2160   * @brief  Checks if HSE ready interrupt source is enabled or disabled.
2161   * @rmtoll CIER         HSERDYIE      LL_RCC_IsEnabledIT_HSERDY
2162   * @retval State of bit (1 or 0).
2163   */
LL_RCC_IsEnabledIT_HSERDY(void)2164 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSERDY(void)
2165 {
2166   return ((READ_BIT(RCC->CIER, RCC_CIER_HSERDYIE) == (RCC_CIER_HSERDYIE)) ? 1UL : 0UL);
2167 }
2168 
2169 /**
2170   * @brief  Checks if RC64MPLL ready interrupt source is enabled or disabled.
2171   * @rmtoll CIER         HSIPLLRDYIE      LL_RCC_IsEnabledIT_RC64MPLLRDY
2172   * @retval State of bit (1 or 0).
2173   */
LL_RCC_IsEnabledIT_RC64MPLLRDY(void)2174 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_RC64MPLLRDY(void)
2175 {
2176   return ((READ_BIT(RCC->CIER, RCC_CIER_HSIPLLRDYIE) == (RCC_CIER_HSIPLLRDYIE)) ? 1UL : 0UL);
2177 }
2178 
2179 /**
2180   * @brief  Checks if RC64MPLL Unlock Detection interrupt source is enabled or disabled.
2181   * @rmtoll CIER         RCC_CIER_HSIPLLUNLOCKDETIE      LL_RCC_IsEnabledIT_RC64MPLLUNLOCKDET
2182   * @retval None
2183   */
LL_RCC_IsEnabledIT_RC64MPLLUNLOCKDET(void)2184 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_RC64MPLLUNLOCKDET(void)
2185 {
2186   return ((READ_BIT(RCC->CIER, RCC_CIER_HSIPLLUNLOCKDETIE) == (RCC_CIER_HSIPLLUNLOCKDETIE)) ? 1UL : 0UL);
2187 }
2188 
2189 /**
2190   * @brief  Checks if RTC Reset Release interrupt source is enabled or disabled.
2191   * @rmtoll CIER         RCC_CIER_RTCRSTIE      LL_RCC_IsEnabledIT_RTCRSTREL
2192   * @retval None
2193   */
LL_RCC_IsEnabledIT_RTCRSTREL(void)2194 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_RTCRSTREL(void)
2195 {
2196   return ((READ_BIT(RCC->CIER, RCC_CIER_RTCRSTIE) == (RCC_CIER_RTCRSTIE)) ? 1UL : 0UL);
2197 }
2198 
2199 /**
2200   * @brief  Checks if Watchdog Reset Release interrupt source is enabled or disabled.
2201   * @rmtoll CIER         RCC_CIER_WDGRSTIE      LL_RCC_IsEnabledIT_WDGRSTREL
2202   * @retval None
2203   */
LL_RCC_IsEnabledIT_WDGRSTREL(void)2204 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_WDGRSTREL(void)
2205 {
2206   return ((READ_BIT(RCC->CIER, RCC_CIER_WDGRSTIE) == (RCC_CIER_WDGRSTIE)) ? 1UL : 0UL);
2207 }
2208 
2209 #if defined(RCC_CIER_LPURSTIE)
2210 /**
2211   * @brief  Checks if LPUART Reset Release interrupt source is enabled or disabled.
2212   * @rmtoll CIER         RCC_CIER_LPURSTIE      LL_RCC_IsEnabledIT_LPURSTREL
2213   * @retval None
2214   */
LL_RCC_IsEnabledIT_LPURSTREL(void)2215 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LPURSTREL(void)
2216 {
2217   return ((READ_BIT(RCC->CIER, RCC_CIER_LPURSTIE) == (RCC_CIER_LPURSTIE)) ? 1UL : 0UL);
2218 }
2219 #endif
2220 
2221 
2222 /**
2223   * @}
2224   */
2225 
2226 /** @defgroup RCC_LL_HSEPLL_BUFFER_RF External high speed clock buffer for PLL RF2G4
2227   * @{
2228   */
2229 
2230 /**
2231   * @brief  Enable high speed clock buffer for PLL RF2G4
2232   * @rmtoll CR           HSEPLLBUFON     LL_RCC_HSEPLLBUFON_Enable
2233   * @retval None
2234   */
LL_RCC_HSEPLLBUFON_Enable(void)2235 __STATIC_INLINE void LL_RCC_HSEPLLBUFON_Enable(void)
2236 {
2237   SET_BIT(RCC->CR, RCC_CR_HSEPLLBUFON);
2238 }
2239 
2240 /**
2241   * @brief  Disable high speed clock buffer for PLL RF2G4
2242   * @rmtoll CR           HSEPLLBUFON         LL_RCC_HSEPLLBUFON_Disable
2243   * @retval None
2244   */
LL_RCC_HSEPLLBUFON_Disable(void)2245 __STATIC_INLINE void LL_RCC_HSEPLLBUFON_Disable(void)
2246 {
2247   CLEAR_BIT(RCC->CR, RCC_CR_HSEPLLBUFON);
2248 }
2249 
2250 /**
2251   * @brief  Check if the high speed clock buffer for PLL RF2G4 is enabled.
2252   * @rmtoll CR         HSEPLLBUFON        LL_RCC_HSEPLLBUFON_IsEnabled
2253   * @retval State of bit (1 or 0).
2254   */
LL_RCC_HSEPLLBUFON_IsEnabled(void)2255 __STATIC_INLINE uint32_t LL_RCC_HSEPLLBUFON_IsEnabled(void)
2256 {
2257   return ((READ_BIT(RCC->CR, RCC_CR_HSEPLLBUFON) == (RCC_CR_HSEPLLBUFON)) ? 1UL : 0UL);
2258 }
2259 /**
2260   * @}
2261   */
2262 
2263 #if defined(USE_FULL_LL_DRIVER)
2264 /** @defgroup RCC_LL_EF_Init De-initialization function
2265   * @{
2266   */
2267 ErrorStatus LL_RCC_DeInit(void);
2268 /**
2269   * @}
2270   */
2271 
2272 /** @defgroup RCC_LL_EF_Get_Freq Get system and peripherals clocks frequency functions
2273   * @{
2274   */
2275 void        LL_RCC_GetSystemClocksFreq(LL_RCC_ClocksTypeDef *RCC_Clocks);
2276 uint32_t    LL_RCC_GetSMPSClockFreq(void);
2277 #if defined(RCC_CFGR_LPUCLKSEL)
2278 uint32_t    LL_RCC_GetLPUARTClockFreq(uint32_t LPUARTxSource);
2279 #endif /* RCC_CFGR_LPUCLKSEL */
2280 
2281 /**
2282   * @}
2283   */
2284 #endif /* USE_FULL_LL_DRIVER */
2285 
2286 /**
2287   * @}
2288   */
2289 
2290 /**
2291   * @}
2292   */
2293 
2294 #endif /* defined(RCC) */
2295 
2296 /**
2297   * @}
2298   */
2299 
2300 #ifdef __cplusplus
2301 }
2302 #endif /* __cplusplus */
2303 
2304 #endif /* STM32WB0x_LL_RCC_H */
2305