1 /**
2 ******************************************************************************
3 * @file stm32wbaxx_ll_rcc.h
4 * @author MCD Application Team
5 * @brief Header file of RCC LL module.
6 ******************************************************************************
7 * @attention
8 *
9 * Copyright (c) 2022 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 STM32WBAxx_LL_RCC_H
21 #define STM32WBAxx_LL_RCC_H
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32wbaxx.h"
29
30 /** @addtogroup STM32WBAxx_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 /** @defgroup RCC_LL_Private_Constants RCC Private Constants
44 * @{
45 */
46 /* Defines used to perform offsets*/
47 /* Offset used to access to RCC_CCIPR1, RCC_CCIPR2 and RCC_CCIPR3 registers */
48 #define RCC_OFFSET_CCIPR1 0U
49 #define RCC_OFFSET_CCIPR2 0x04U
50 #define RCC_OFFSET_CCIPR3 0x08U
51
52 /* Defines used for security configuration extension */
53 #define RCC_SECURE_MASK 0x10FBU
54 /**
55 * @}
56 */
57
58 /* Private macros ------------------------------------------------------------*/
59 /* Exported types ------------------------------------------------------------*/
60 #if defined(USE_FULL_LL_DRIVER)
61 /** @defgroup RCC_LL_Exported_Types RCC Exported Types
62 * @{
63 */
64
65 /** @defgroup LL_ES_CLOCK_FREQ Clocks Frequency Structure
66 * @{
67 */
68
69 /**
70 * @brief RCC Clocks Frequency Structure
71 */
72 typedef struct
73 {
74 uint32_t SYSCLK_Frequency; /*!< SYSCLK clock frequency */
75 uint32_t HCLK_Frequency; /*!< HCLK clock frequency */
76 uint32_t PCLK1_Frequency; /*!< PCLK1 clock frequency */
77 uint32_t PCLK2_Frequency; /*!< PCLK2 clock frequency */
78 uint32_t PCLK7_Frequency; /*!< PCLK7 clock frequency */
79 } LL_RCC_ClocksTypeDef;
80
81 /**
82 * @}
83 */
84
85 /**
86 * @}
87 */
88 #endif /* USE_FULL_LL_DRIVER */
89
90 /* Exported constants --------------------------------------------------------*/
91 /** @defgroup RCC_LL_Exported_Constants RCC Exported Constants
92 * @{
93 */
94
95 /** @defgroup RCC_LL_EC_OSC_VALUES Oscillator Values adaptation
96 * @brief Defines used to adapt values of different oscillators
97 * @note These values could be modified in the user environment according to
98 * HW set-up.
99 * @{
100 */
101 #if !defined (HSE_VALUE)
102 #define HSE_VALUE 32000000U /*!< Value of the HSE oscillator in Hz */
103 #endif /* HSE_VALUE */
104
105 #if !defined (HSI_VALUE)
106 #define HSI_VALUE 16000000U /*!< Value of the HSI oscillator in Hz */
107 #endif /* HSI_VALUE */
108
109 #if !defined (LSE_VALUE)
110 #define LSE_VALUE 32768U /*!< Value of the LSE oscillator in Hz */
111 #endif /* LSE_VALUE */
112
113 #if !defined (LSI_VALUE)
114 #define LSI_VALUE 32000U /*!< Value of the LSI oscillator in Hz */
115 #endif /* LSI_VALUE */
116
117 #if defined (RCC_LSI2_SUPPORT)
118 #if !defined (LSI2_VALUE)
119 #define LSI2_VALUE 32000U /*!< Value of the LSI2 oscillator in Hz */
120 #endif /* LSI_VALUE */
121 #endif
122
123 #if !defined (EXTERNAL_SAI1_CLOCK_VALUE)
124 #define EXTERNAL_SAI1_CLOCK_VALUE 48000U /*!< Value of the SAI1_EXTCLK external oscillator in Hz */
125 #endif /* EXTERNAL_SAI1_CLOCK_VALUE */
126
127 /**
128 * @}
129 */
130
131 /** @defgroup RCC_LL_EC_CLEAR_FLAG Clear Flags Defines
132 * @brief Flags defines which can be used with LL_RCC_WriteReg function
133 * @{
134 */
135 #define LL_RCC_CICR_LSI1RDYC RCC_CICR_LSI1RDYC /*!< LSI1 Ready Interrupt Clear */
136 #define LL_RCC_CICR_LSERDYC RCC_CICR_LSERDYC /*!< LSE Ready Interrupt Clear */
137 #define LL_RCC_CICR_HSIRDYC RCC_CICR_HSIRDYC /*!< HSI Ready Interrupt Clear */
138 #define LL_RCC_CICR_HSERDYC RCC_CICR_HSERDYC /*!< HSE Ready Interrupt Clear */
139 #define LL_RCC_CICR_PLL1RDYC RCC_CICR_PLL1RDYC /*!< PLL1 Ready Interrupt Clear */
140 #define LL_RCC_CICR_HSECSSC RCC_CICR_HSECSSC /*!< HSE Clock Security System Interrupt Clear */
141 #define LL_RCC_CICR_LSI2RDYC RCC_CICR_LSI2RDYC /*!< LSI2 Ready Interrupt Clear */
142 /**
143 * @}
144 */
145
146 /** @defgroup RCC_LL_EC_GET_FLAG Get Flags Defines
147 * @brief Flags defines which can be used with LL_RCC_ReadReg function
148 * @{
149 */
150 #define LL_RCC_CIFR_LSI1RDYF RCC_CIFR_LSI1RDYF /*!< LSI1 Ready Interrupt flag */
151 #define LL_RCC_CIFR_LSERDYF RCC_CIFR_LSERDYF /*!< LSE Ready Interrupt flag */
152 #define LL_RCC_CIFR_HSIRDYF RCC_CIFR_HSIRDYF /*!< HSI Ready Interrupt flag */
153 #define LL_RCC_CIFR_HSERDYF RCC_CIFR_HSERDYF /*!< HSE Ready Interrupt flag */
154 #define LL_RCC_CIFR_PLL1RDYF RCC_CIFR_PLL1RDYF /*!< PLL1 Ready Interrupt flag */
155 #define LL_RCC_CIFR_HSECSSF RCC_CIFR_HSECSSF /*!< HSE Clock Security System Interrupt flag */
156 #define LL_RCC_CIFR_LSI2RDYF RCC_CIFR_LSI2RDYF /*!< LSI2 Ready Interrupt flag */
157 #define LL_RCC_CSR_OBLRSTF RCC_CSR_OBLRSTF /*!< Option byte loader reset flag */
158 #define LL_RCC_CSR_PINRSTF RCC_CSR_PINRSTF /*!< NRST pin reset flag */
159 #define LL_RCC_CSR_BORRSTF RCC_CSR_BORRSTF /*!< BOR reset flag */
160 #define LL_RCC_CSR_SFTRSTF RCC_CSR_SFTRSTF /*!< Software reset flag */
161 #define LL_RCC_CSR_IWDGRSTF RCC_CSR_IWDGRSTF /*!< Independent watchdog reset flag */
162 #if defined(WWDG)
163 #define LL_RCC_CSR_WWDGRSTF RCC_CSR_WWDGRSTF /*!< Window watchdog reset flag */
164 #endif /* defined(WWDG) */
165 #define LL_RCC_CSR_LPWRRSTF RCC_CSR_LPWRRSTF /*!< Low-power reset flag */
166 /**
167 * @}
168 */
169
170 /** @defgroup RCC_LL_EC_IT IT Defines
171 * @brief IT defines which can be used with LL_RCC_ReadReg and LL_RCC_WriteReg functions
172 * @{
173 */
174 #define LL_RCC_CIER_LSI1RDYIE RCC_CIER_LSI1RDYIE /*!< LSI1 Ready Interrupt Enable */
175 #define LL_RCC_CIER_LSERDYIE RCC_CIER_LSERDYIE /*!< LSE Ready Interrupt Enable */
176 #define LL_RCC_CIER_HSIRDYIE RCC_CIER_HSIRDYIE /*!< HSI Ready Interrupt Enable */
177 #define LL_RCC_CIER_HSERDYIE RCC_CIER_HSERDYIE /*!< HSE Ready Interrupt Enable */
178 #define LL_RCC_CIER_PLL1RDYIE RCC_CIER_PLL1RDYIE /*!< PLL1 Ready Interrupt Enable */
179 #define LL_RCC_CIER_LSI2RDYIE RCC_CIER_LSI2RDYIE /*!< LSI2 Ready Interrupt Enable */
180 /**
181 * @}
182 */
183
184 /** @defgroup RCC_LL_EC_LSIPRE LSI prescaler
185 * @{
186 */
187 #define LL_RCC_LSI_DIV_1 0U /*!< LSI1 divided by 1 */
188 #define LL_RCC_LSI_DIV_128 RCC_BDCR1_LSI1PREDIV /*!< LSI1 divided by 128 */
189 /**
190 * @}
191 */
192
193 #if defined(RCC_BDCR2_LSI2CFG)
194 /** @defgroup RCC_LL_EC_LSI2CFG LSI2 oscillator temperature sensitivity configuration
195 * @{
196 */
197 #define LL_RCC_LSI2_TEMP_SENSITIVITY_80 0U /*!< LSI2 frequency temperature sensitivity is close to zero at +80 degrees C */
198 #define LL_RCC_LSI2_TEMP_SENSITIVITY_50 RCC_BDCR2_LSI2CFG_0 /*!< LSI2 frequency temperature sensitivity is close to zero at +50 degrees C */
199 #define LL_RCC_LSI2_TEMP_SENSITIVITY_20 RCC_BDCR2_LSI2CFG_1 /*!< LSI2 frequency temperature sensitivity is close to zero at +20 degrees C */
200 /**
201 * @}
202 */
203 #endif /* RCC_BDCR2_LSI2CFG */
204
205 #if defined(RCC_BDCR2_LSI2MODE)
206 /** @defgroup RCC_LL_EC_LSI2MODE LSI2 oscillator operating mode configuration
207 * @{
208 */
209 #define LL_RCC_LSI2_NOMINAL_MODE 0U /*!< LSI2 nominal power, high accuracy */
210 #define LL_RCC_LSI2_LOWPOWER_MODE RCC_BDCR2_LSI2MODE_0 /*!< LSI2 low power, medium accuracy */
211 #define LL_RCC_LSI2_ULTRALOWPOWER_MODE RCC_BDCR2_LSI2MODE_1 /*!< LSI2 ultra low power, low accuracy */
212 /**
213 * @}
214 */
215 #endif /* RCC_BDCR2_LSI2MODE */
216
217 /** @defgroup RCC_LL_EC_LSEDRIVE LSE oscillator drive capability
218 * @{
219 */
220 #define LL_RCC_LSEDRIVE_MEDIUMLOW RCC_BDCR1_LSEDRV_0 /*!< Xtal mode medium low driving capability */
221 #define LL_RCC_LSEDRIVE_MEDIUMHIGH RCC_BDCR1_LSEDRV_1 /*!< Xtal mode medium high driving capability */
222 #define LL_RCC_LSEDRIVE_HIGH RCC_BDCR1_LSEDRV /*!< Xtal mode higher driving capability */
223 /**
224 * @}
225 */
226
227 /** @defgroup RCC_LL_EC_LSCO_CLKSOURCE LSCO Selection
228 * @{
229 */
230 #define LL_RCC_LSCO_CLKSOURCE_LSI 0U /*!< LSI selection for low speed clock */
231 #define LL_RCC_LSCO_CLKSOURCE_LSE RCC_BDCR1_LSCOSEL /*!< LSE selection for low speed clock */
232 /**
233 * @}
234 */
235
236
237 /** @defgroup RCC_LL_EC_SYS_CLKSOURCE System clock switch
238 * @{
239 */
240 #define LL_RCC_SYS_CLKSOURCE_HSI 0U /*!< HSI selection as system clock */
241 #define LL_RCC_SYS_CLKSOURCE_HSE RCC_CFGR1_SW_1 /*!< HSE selection as system clock */
242 #define LL_RCC_SYS_CLKSOURCE_PLL1R (RCC_CFGR1_SW_1 | RCC_CFGR1_SW_0) /*!< PLL1R selection as system clock */
243 /**
244 * @}
245 */
246
247
248 /** @defgroup RCC_LL_EC_SYS_CLKSOURCE_STATUS System clock switch status
249 * @{
250 */
251 #define LL_RCC_SYS_CLKSOURCE_STATUS_HSI 0U /*!< HSI used as system clock */
252 #define LL_RCC_SYS_CLKSOURCE_STATUS_HSE RCC_CFGR1_SWS_1 /*!< HSE used as system clock */
253 #define LL_RCC_SYS_CLKSOURCE_STATUS_PLL1R (RCC_CFGR1_SWS_1 | RCC_CFGR1_SWS_0) /*!< PLL1R used as system clock */
254 /**
255 * @}
256 */
257
258
259 /** @defgroup RCC_LL_EC_SYSCLK_DIV AHB prescaler
260 * @{
261 */
262 #define LL_RCC_SYSCLK_DIV_1 0U /*!< SYSCLK not divided */
263 #define LL_RCC_SYSCLK_DIV_2 RCC_CFGR2_HPRE_2 /*!< SYSCLK divided by 2 */
264 #define LL_RCC_SYSCLK_DIV_4 (RCC_CFGR2_HPRE_2 | RCC_CFGR2_HPRE_0) /*!< SYSCLK divided by 4 */
265 #define LL_RCC_SYSCLK_DIV_8 (RCC_CFGR2_HPRE_2 | RCC_CFGR2_HPRE_1) /*!< SYSCLK divided by 8 */
266 #define LL_RCC_SYSCLK_DIV_16 (RCC_CFGR2_HPRE_2 | RCC_CFGR2_HPRE_1 | RCC_CFGR2_HPRE_0) /*!< SYSCLK divided by 16 */
267 /**
268 * @}
269 */
270
271
272 /** @defgroup RCC_LL_EC_SYSTICK_CLKSOURCE SYSTICK clock source selection
273 * @{
274 */
275 #define LL_RCC_SYSTICK_CLKSOURCE_HCLKDIV8 0U /*!< HCLKDIV8 clock used as SYSTICK clock source */
276 #define LL_RCC_SYSTICK_CLKSOURCE_LSI RCC_CCIPR1_SYSTICKSEL_0 /*!< LSI clock used as SYSTICK clock source */
277 #define LL_RCC_SYSTICK_CLKSOURCE_LSE RCC_CCIPR1_SYSTICKSEL_1 /*!< LSE clock used as SYSTICK clock source */
278 /**
279 * @}
280 */
281
282 /** @defgroup RCC_LL_EC_APB1_DIV APB1 prescaler
283 * @{
284 */
285 #define LL_RCC_APB1_DIV_1 0U /*!< HCLK not divided */
286 #define LL_RCC_APB1_DIV_2 RCC_CFGR2_PPRE1_2 /*!< HCLK divided by 2 */
287 #define LL_RCC_APB1_DIV_4 (RCC_CFGR2_PPRE1_2 | RCC_CFGR2_PPRE1_0) /*!< HCLK divided by 4 */
288 #define LL_RCC_APB1_DIV_8 (RCC_CFGR2_PPRE1_2 | RCC_CFGR2_PPRE1_1) /*!< HCLK divided by 8 */
289 #define LL_RCC_APB1_DIV_16 (RCC_CFGR2_PPRE1_2 | RCC_CFGR2_PPRE1_1 | RCC_CFGR2_PPRE1_0) /*!< HCLK divided by 16 */
290 /**
291 * @}
292 */
293
294
295 /** @defgroup RCC_LL_EC_APB2_DIV APB2 prescaler
296 * @{
297 */
298 #define LL_RCC_APB2_DIV_1 0U /*!< HCLK not divided */
299 #define LL_RCC_APB2_DIV_2 RCC_CFGR2_PPRE2_2 /*!< HCLK divided by 2 */
300 #define LL_RCC_APB2_DIV_4 (RCC_CFGR2_PPRE2_2 | RCC_CFGR2_PPRE2_0) /*!< HCLK divided by 4 */
301 #define LL_RCC_APB2_DIV_8 (RCC_CFGR2_PPRE2_2 | RCC_CFGR2_PPRE2_1) /*!< HCLK divided by 8 */
302 #define LL_RCC_APB2_DIV_16 (RCC_CFGR2_PPRE2_2 | RCC_CFGR2_PPRE2_1 | RCC_CFGR2_PPRE2_0) /*!< HCLK divided by 16 */
303 /**
304 * @}
305 */
306
307 /** @defgroup RCC_LL_EC_APB7_DIV APB7 prescaler
308 * @{
309 */
310 #define LL_RCC_APB7_DIV_1 0U /*!< HCLK not divided */
311 #define LL_RCC_APB7_DIV_2 RCC_CFGR3_PPRE7_2 /*!< HCLK divided by 2 */
312 #define LL_RCC_APB7_DIV_4 (RCC_CFGR3_PPRE7_2 | RCC_CFGR3_PPRE7_0) /*!< HCLK divided by 4 */
313 #define LL_RCC_APB7_DIV_8 (RCC_CFGR3_PPRE7_2 | RCC_CFGR3_PPRE7_1) /*!< HCLK divided by 8 */
314 #define LL_RCC_APB7_DIV_16 (RCC_CFGR3_PPRE7_2 | RCC_CFGR3_PPRE7_1 | RCC_CFGR3_PPRE7_0) /*!< HCLK divided by 16 */
315 /**
316 * @}
317 */
318
319 /** @defgroup RCC_LL_EC_AHB5_DIV AHB5 prescaler when SYSCLK is PLL1R
320 * @{
321 */
322 #define LL_RCC_AHB5_DIV_1 0U /*!< SYSCLK not divided */
323 #define LL_RCC_AHB5_DIV_2 RCC_CFGR4_HPRE5_2 /*!< SYSCLK divided by 2 */
324 #define LL_RCC_AHB5_DIV_3 (RCC_CFGR4_HPRE5_2 | RCC_CFGR4_HPRE5_0) /*!< SYSCLK divided by 3 */
325 #define LL_RCC_AHB5_DIV_4 (RCC_CFGR4_HPRE5_2 | RCC_CFGR4_HPRE5_1) /*!< SYSCLK divided by 4 */
326 #define LL_RCC_AHB5_DIV_6 (RCC_CFGR4_HPRE5_2 | RCC_CFGR4_HPRE5_1 | RCC_CFGR4_HPRE5_0) /*!< SYSCLK divided by 6 */
327 /**
328 * @}
329 */
330
331 /** @defgroup RCC_LL_EC_AHB5_DIVIDER AHB5 divider when SYSCLK is HSI or HSE
332 * @{
333 */
334 #define LL_RCC_AHB5_DIVIDER_1 0U /*!< SYSCLK not divided */
335 #define LL_RCC_AHB5_DIVIDER_2 RCC_CFGR4_HDIV5 /*!< SYSCLK divided by 2 */
336 /**
337 * @}
338 */
339
340 /** @defgroup RCC_LL_EC_MCO1SOURCE MCO1 SOURCE selection
341 * @{
342 */
343 #define LL_RCC_MCO1SOURCE_NOCLOCK 0U /*!< MCO output disabled, no clock on MCO */
344 #define LL_RCC_MCO1SOURCE_SYSCLK RCC_CFGR1_MCOSEL_0 /*!< SYSCLK selection as MCO1 source */
345 #define LL_RCC_MCO1SOURCE_HSI (RCC_CFGR1_MCOSEL_0 | RCC_CFGR1_MCOSEL_1) /*!< HSI selection as MCO1 source */
346 #define LL_RCC_MCO1SOURCE_HSE RCC_CFGR1_MCOSEL_2 /*!< HSE selection as MCO1 source */
347 #define LL_RCC_MCO1SOURCE_PLL1R (RCC_CFGR1_MCOSEL_0 | RCC_CFGR1_MCOSEL_2) /*!< PLL1RCLK selection as MCO1 source */
348 #define LL_RCC_MCO1SOURCE_LSI (RCC_CFGR1_MCOSEL_1 | RCC_CFGR1_MCOSEL_2) /*!< LSI selection as MCO1 source */
349 #define LL_RCC_MCO1SOURCE_LSE (RCC_CFGR1_MCOSEL_0 | RCC_CFGR1_MCOSEL_1| RCC_CFGR1_MCOSEL_2)/*!< LSE selection as MCO1 source */
350 #define LL_RCC_MCO1SOURCE_PLL1P RCC_CFGR1_MCOSEL_3 /*!< PLL1PCLK selection as MCO1 source */
351 #define LL_RCC_MCO1SOURCE_PLL1Q (RCC_CFGR1_MCOSEL_0 | RCC_CFGR1_MCOSEL_3) /*!< PLL1QCLK selection as MCO1 source */
352 #define LL_RCC_MCO1SOURCE_HCLK5 (RCC_CFGR1_MCOSEL_1 | RCC_CFGR1_MCOSEL_3) /*!< HCLK5 selection as MCO1 source */
353 /**
354 * @}
355 */
356
357 /** @defgroup RCC_LL_EC_MCO1_DIV MCO1 prescaler
358 * @{
359 */
360 #define LL_RCC_MCO1_DIV_1 0U /*!< MCO not divided */
361 #define LL_RCC_MCO1_DIV_2 RCC_CFGR1_MCOPRE_0 /*!< MCO divided by 2 */
362 #define LL_RCC_MCO1_DIV_4 RCC_CFGR1_MCOPRE_1 /*!< MCO divided by 4 */
363 #define LL_RCC_MCO1_DIV_8 (RCC_CFGR1_MCOPRE_1 | RCC_CFGR1_MCOPRE_0) /*!< MCO divided by 8 */
364 #define LL_RCC_MCO1_DIV_16 RCC_CFGR1_MCOPRE_2 /*!< MCO divided by 16 */
365 /**
366 * @}
367 */
368
369 #if defined(USE_FULL_LL_DRIVER)
370 /** @defgroup RCC_LL_EC_PERIPH_FREQUENCY Peripheral clock frequency
371 * @{
372 */
373 #define LL_RCC_PERIPH_FREQUENCY_NO 0U /*!< No clock enabled for the peripheral */
374 #define LL_RCC_PERIPH_FREQUENCY_NA 0xFFFFFFFFU /*!< Frequency cannot be provided as external clock */
375 /**
376 * @}
377 */
378 #endif /* USE_FULL_LL_DRIVER */
379
380 /** @defgroup RCC_LL_EC_RTC_CLKSOURCE RTC clock source selection
381 * @{
382 */
383 #define LL_RCC_RTC_CLKSOURCE_NONE 0U /*!< No clock used as RTC clock */
384 #define LL_RCC_RTC_CLKSOURCE_LSE RCC_BDCR1_RTCSEL_0 /*!< LSE oscillator clock used as RTC clock */
385 #define LL_RCC_RTC_CLKSOURCE_LSI RCC_BDCR1_RTCSEL_1 /*!< LSI oscillator clock used as RTC clock */
386 #define LL_RCC_RTC_CLKSOURCE_HSE_DIV32 RCC_BDCR1_RTCSEL /*!< HSE oscillator clock divided by 32 used as RTC clock */
387 /**
388 * @}
389 */
390
391 /** @defgroup RCC_LL_EC_RADIO_SLEEPTIMER_CLKSOURCE RADIO Sleep Timer Clock source
392 * @{
393 */
394 #define LL_RCC_RADIOSLEEPSOURCE_NONE 0U /*!< No clock selected, 2.4 GHz RADIO sleep timer kernel clock disabled */
395 #define LL_RCC_RADIOSLEEPSOURCE_LSE RCC_BDCR1_RADIOSTSEL_0 /*!< LSE oscillator clock selected */
396 #define LL_RCC_RADIOSLEEPSOURCE_LSI RCC_BDCR1_RADIOSTSEL_1 /*!< LSI oscillator clock selected */
397 #define LL_RCC_RADIOSLEEPSOURCE_HSE_DIV1000 RCC_BDCR1_RADIOSTSEL /*!< HSE oscillator clock divided by 1000 selected */
398 /**
399 * @}
400 */
401
402 /** @defgroup RCC_LL_EC_USART_CLKSOURCE Peripheral USARTx clock source selection
403 * @{
404 */
405 #define LL_RCC_USART1_CLKSOURCE_PCLK2 (RCC_CCIPR1_USART1SEL << 16U) /*!< PCLK2 clock used as USART1 clock source */
406 #define LL_RCC_USART1_CLKSOURCE_SYSCLK ((RCC_CCIPR1_USART1SEL << 16U) | RCC_CCIPR1_USART1SEL_0) /*!< SYSCLK clock used as USART1 clock source */
407 #define LL_RCC_USART1_CLKSOURCE_HSI ((RCC_CCIPR1_USART1SEL << 16U) | RCC_CCIPR1_USART1SEL_1) /*!< HSI clock used as USART1 clock source */
408 #define LL_RCC_USART1_CLKSOURCE_LSE ((RCC_CCIPR1_USART1SEL << 16U) | RCC_CCIPR1_USART1SEL) /*!< LSE clock used as USART1 clock source */
409 #if defined(USART2)
410 #define LL_RCC_USART2_CLKSOURCE_PCLK1 (RCC_CCIPR1_USART2SEL << 16U) /*!< PCLK1 clock used as USART2 clock source */
411 #define LL_RCC_USART2_CLKSOURCE_SYSCLK ((RCC_CCIPR1_USART2SEL << 16U) | RCC_CCIPR1_USART2SEL_0) /*!< SYSCLK clock used as USART2 clock source */
412 #define LL_RCC_USART2_CLKSOURCE_HSI ((RCC_CCIPR1_USART2SEL << 16U) | RCC_CCIPR1_USART2SEL_1) /*!< HSI clock used as USART2 clock source */
413 #define LL_RCC_USART2_CLKSOURCE_LSE ((RCC_CCIPR1_USART2SEL << 16U) | RCC_CCIPR1_USART2SEL) /*!< LSE clock used as USART2 clock source */
414 #endif /* USART2 */
415 /**
416 * @}
417 */
418
419 /** @defgroup RCC_LL_EC_LPUART_CLKSOURCE Peripheral LPUARTx clock source selection
420 * @{
421 */
422 #define LL_RCC_LPUART1_CLKSOURCE_PCLK7 0U /*!< PCLK3 clock used as LPUART1 clock source */
423 #define LL_RCC_LPUART1_CLKSOURCE_SYSCLK RCC_CCIPR3_LPUART1SEL_0 /*!< SYSCLK clock used as LPUART1 clock source */
424 #define LL_RCC_LPUART1_CLKSOURCE_HSI RCC_CCIPR3_LPUART1SEL_1 /*!< HSI clock used as LPUART1 clock source */
425 #define LL_RCC_LPUART1_CLKSOURCE_LSE (RCC_CCIPR3_LPUART1SEL_0 | RCC_CCIPR3_LPUART1SEL_1) /*!< LSE clock used as LPUART1 clock source */
426 /**
427 * @}
428 */
429
430 /** @defgroup RCC_LL_EC_I2C_CLKSOURCE Peripheral I2Cx clock source selection
431 * @{
432 */
433 #define LL_RCC_I2C1_CLKSOURCE_PCLK1 ((RCC_OFFSET_CCIPR1 << 24U) | (RCC_CCIPR1_I2C1SEL_Pos << 16U)) /*!< PCLK1 clock used as I2C1 clock source */
434 #define LL_RCC_I2C1_CLKSOURCE_SYSCLK ((RCC_OFFSET_CCIPR1 << 24U) | (RCC_CCIPR1_I2C1SEL_Pos << 16U) | (RCC_CCIPR1_I2C1SEL_0 >> RCC_CCIPR1_I2C1SEL_Pos)) /*!< SYSCLK clock used as I2C1 clock source */
435 #define LL_RCC_I2C1_CLKSOURCE_HSI ((RCC_OFFSET_CCIPR1 << 24U) | (RCC_CCIPR1_I2C1SEL_Pos << 16U) | (RCC_CCIPR1_I2C1SEL_1 >> RCC_CCIPR1_I2C1SEL_Pos)) /*!< HSI clock used as I2C1 clock source */
436 #define LL_RCC_I2C3_CLKSOURCE_PCLK7 ((RCC_OFFSET_CCIPR3 << 24U) | (RCC_CCIPR3_I2C3SEL_Pos << 16U)) /*!< PCLK7 clock used as I2C3 clock source */
437 #define LL_RCC_I2C3_CLKSOURCE_SYSCLK ((RCC_OFFSET_CCIPR3 << 24U) | (RCC_CCIPR3_I2C3SEL_Pos << 16U) | (RCC_CCIPR3_I2C3SEL_0 >> RCC_CCIPR3_I2C3SEL_Pos)) /*!< SYSCLK clock used as I2C3 clock source */
438 #define LL_RCC_I2C3_CLKSOURCE_HSI ((RCC_OFFSET_CCIPR3 << 24U) | (RCC_CCIPR3_I2C3SEL_Pos << 16U) | (RCC_CCIPR3_I2C3SEL_1 >> RCC_CCIPR3_I2C3SEL_Pos)) /*!< HSI clock used as I2C3 clock source */
439 /**
440 * @}
441 */
442
443 /** @defgroup RCC_LL_EC_SPI_CLKSOURCE Peripheral SPIx clock source selection
444 * @{
445 */
446 #if defined(SPI1)
447 #define LL_RCC_SPI1_CLKSOURCE_PCLK2 ((RCC_OFFSET_CCIPR1 << 24U) | (RCC_CCIPR1_SPI1SEL_Pos << 16U)) /*!< PCLK2 clock used as SPI1 clock source */
448 #define LL_RCC_SPI1_CLKSOURCE_SYSCLK ((RCC_OFFSET_CCIPR1 << 24U) | (RCC_CCIPR1_SPI1SEL_Pos << 16U) | (RCC_CCIPR1_SPI1SEL_0 >> RCC_CCIPR1_SPI1SEL_Pos)) /*!< SYSCLK clock used as SPI1 clock source */
449 #define LL_RCC_SPI1_CLKSOURCE_HSI ((RCC_OFFSET_CCIPR1 << 24U) | (RCC_CCIPR1_SPI1SEL_Pos << 16U) | (RCC_CCIPR1_SPI1SEL_1 >> RCC_CCIPR1_SPI1SEL_Pos)) /*!< HSI clock used as SPI1 clock source */
450 #endif /* SPI1 */
451 #define LL_RCC_SPI3_CLKSOURCE_PCLK7 ((RCC_OFFSET_CCIPR3 << 24U) | (RCC_CCIPR3_SPI3SEL_Pos << 16U)) /*!< PCLK7 clock used as SPI3 clock source */
452 #define LL_RCC_SPI3_CLKSOURCE_SYSCLK ((RCC_OFFSET_CCIPR3 << 24U) | (RCC_CCIPR3_SPI3SEL_Pos << 16U) | (RCC_CCIPR3_SPI3SEL_0 >> RCC_CCIPR3_SPI3SEL_Pos)) /*!< SYSCLK clock used as SPI3 clock source */
453 #define LL_RCC_SPI3_CLKSOURCE_HSI ((RCC_OFFSET_CCIPR3 << 24U) | (RCC_CCIPR3_SPI3SEL_Pos << 16U) | (RCC_CCIPR3_SPI3SEL_1 >> RCC_CCIPR3_SPI3SEL_Pos)) /*!< HSI clock used as SPI3 clock source */
454 /**
455 * @}
456 */
457
458 /** @defgroup RCC_LL_EC_LPTIM_CLKSOURCE Peripheral LPTIMx clock source selection
459 * @{
460 */
461 #define LL_RCC_LPTIM1_CLKSOURCE_PCLK7 ((RCC_OFFSET_CCIPR3 << 24U) | (RCC_CCIPR3_LPTIM1SEL_Pos << 16U)) /*!< PCLK7 clock used as LPTIM1 clock source */
462 #define LL_RCC_LPTIM1_CLKSOURCE_LSI ((RCC_OFFSET_CCIPR3 << 24U) | (RCC_CCIPR3_LPTIM1SEL_Pos << 16U) | (RCC_CCIPR3_LPTIM1SEL_0 >> RCC_CCIPR3_LPTIM1SEL_Pos)) /*!< LSI clock used as LPTIM1 clock source */
463 #define LL_RCC_LPTIM1_CLKSOURCE_HSI ((RCC_OFFSET_CCIPR3 << 24U) | (RCC_CCIPR3_LPTIM1SEL_Pos << 16U) | (RCC_CCIPR3_LPTIM1SEL_1 >> RCC_CCIPR3_LPTIM1SEL_Pos)) /*!< HSI clock used as LPTIM1 clock source */
464 #define LL_RCC_LPTIM1_CLKSOURCE_LSE ((RCC_OFFSET_CCIPR3 << 24U) | (RCC_CCIPR3_LPTIM1SEL_Pos << 16U) | (RCC_CCIPR3_LPTIM1SEL >> RCC_CCIPR3_LPTIM1SEL_Pos)) /*!< LSE clock used as LPTIM1 clock source */
465 #if defined(LPTIM2)
466 #define LL_RCC_LPTIM2_CLKSOURCE_PCLK1 ((RCC_OFFSET_CCIPR1 << 24U) | (RCC_CCIPR1_LPTIM2SEL_Pos << 16U)) /*!< PCLK1 clock used as LPTIM2 clock source */
467 #define LL_RCC_LPTIM2_CLKSOURCE_LSI ((RCC_OFFSET_CCIPR1 << 24U) | (RCC_CCIPR1_LPTIM2SEL_Pos << 16U) | (RCC_CCIPR1_LPTIM2SEL_0 >> RCC_CCIPR1_LPTIM2SEL_Pos)) /*!< LSI clock used as LPTIM2 clock source */
468 #define LL_RCC_LPTIM2_CLKSOURCE_HSI ((RCC_OFFSET_CCIPR1 << 24U) | (RCC_CCIPR1_LPTIM2SEL_Pos << 16U) | (RCC_CCIPR1_LPTIM2SEL_1 >> RCC_CCIPR1_LPTIM2SEL_Pos)) /*!< HSI clock used as LPTIM2 clock source */
469 #define LL_RCC_LPTIM2_CLKSOURCE_LSE ((RCC_OFFSET_CCIPR1 << 24U) | (RCC_CCIPR1_LPTIM2SEL_Pos << 16U) | (RCC_CCIPR1_LPTIM2SEL >> RCC_CCIPR1_LPTIM2SEL_Pos)) /*!< LSE clock used as LPTIM2 clock source */
470 #endif /* LPTIM2 */
471 /**
472 * @}
473 */
474
475 #if defined(SAI1)
476 /** @defgroup RCC_LL_EC_SAI_CLKSOURCE Peripheral SAIx clock source selection
477 * @{
478 */
479 #define LL_RCC_SAI1_CLKSOURCE_PLL1P (RCC_CCIPR2_SAI1SEL << 16U) /*!< PLL1P clock used as SAI1 clock source */
480 #define LL_RCC_SAI1_CLKSOURCE_PLL1Q ((RCC_CCIPR2_SAI1SEL << 16U) | RCC_CCIPR2_SAI1SEL_0) /*!< PLL1Q clock used as SAI1 clock source */
481 #define LL_RCC_SAI1_CLKSOURCE_SYSCLK ((RCC_CCIPR2_SAI1SEL << 16U) | RCC_CCIPR2_SAI1SEL_1) /*!< System clock used as SAI1 clock source */
482 #define LL_RCC_SAI1_CLKSOURCE_PIN ((RCC_CCIPR2_SAI1SEL << 16U) | (RCC_CCIPR2_SAI1SEL_1 | RCC_CCIPR2_SAI1SEL_0)) /*!< External input clock used as SAI1 clock source */
483 #define LL_RCC_SAI1_CLKSOURCE_HSI ((RCC_CCIPR2_SAI1SEL << 16U) | RCC_CCIPR2_SAI1SEL_2) /*!< HSI clock used as SAI1 clock source */
484 /**
485 * @}
486 */
487 #endif /* SAI1 */
488
489
490 /** @defgroup RCC_LL_EC_RNG_CLKSOURCE Peripheral RNG clock source selection
491 * @{
492 */
493 #define LL_RCC_RNG_CLKSOURCE_LSE 0U /*!< LSE clock used as RNG clock source */
494 #define LL_RCC_RNG_CLKSOURCE_LSI RCC_CCIPR2_RNGSEL_0 /*!< LSI clock used as RNG clock source */
495 #define LL_RCC_RNG_CLKSOURCE_HSI RCC_CCIPR2_RNGSEL_1 /*!< HSI clock used as RNG clock source */
496 #define LL_RCC_RNG_CLKSOURCE_PLL1Q_DIV2 (RCC_CCIPR2_RNGSEL_1 | RCC_CCIPR2_RNGSEL_0) /*!< PLL1Q/2 clock used as RNG clock source */
497 /**
498 * @}
499 */
500 /** Legacy definitions for compatibility purpose
501 @cond 0
502 */
503 #define LL_RCC_RNG_CLKSOURCE_PLL1Q LL_RCC_RNG_CLKSOURCE_PLL1Q_DIV2
504 /**
505 @endcond
506 */
507
508 /** @defgroup RCC_LL_EC_ADC_CLKSOURCE Peripheral ADC4 clock source selection
509 * @{
510 */
511 #define LL_RCC_ADC_CLKSOURCE_HCLK 0U /*!< HCLK1 clock used as ADC4 clock source */
512 #define LL_RCC_ADC_CLKSOURCE_SYSCLK RCC_CCIPR3_ADCSEL_0 /*!< SYSCLK clock used as ADC4 clock source */
513 #define LL_RCC_ADC_CLKSOURCE_PLL1P RCC_CCIPR3_ADCSEL_1 /*!< PLL1P clock used as ADC4 clock source */
514 #define LL_RCC_ADC_CLKSOURCE_HSI RCC_CCIPR3_ADCSEL_2 /*!< HSI clock used as ADC4 clock source */
515 #define LL_RCC_ADC_CLKSOURCE_HSE (RCC_CCIPR3_ADCSEL_1 | RCC_CCIPR3_ADCSEL_0) /*!< HSE clock used as ADC4 clock source */
516 /**
517 * @}
518 */
519
520
521
522 /** @defgroup RCC_LL_EC_TIM_INPUT_CAPTURE_CLOCKSource TIM Input capture clock source selection
523 * @{
524 */
525 #define LL_RCC_TIMIC_CLKSOURCE_NONE 0U /*!< No clock available for TIM16/TIM17 and LPTIM2 input capture */
526 #define LL_RCC_TIMIC_CLKSOURCE_HSI_DIV256 RCC_CCIPR1_TIMICSEL /*!< HSI/256 selected for TIM16/TIM17 and LPTIM2 input capture */
527 /**
528 * @}
529 */
530
531 /** @defgroup RCC_LL_EC_USART Peripheral USARTx get clock source
532 * @{
533 */
534 #define LL_RCC_USART1_CLKSOURCE RCC_CCIPR1_USART1SEL /*!< USART1 Clock source selection */
535 #if defined(USART2)
536 #define LL_RCC_USART2_CLKSOURCE RCC_CCIPR1_USART2SEL /*!< USART2 Clock source selection */
537 #endif /* USART2 */
538 /**
539 * @}
540 */
541
542 /** @defgroup RCC_LL_EC_SPI Peripheral SPIx get clock source
543 * @{
544 */
545 #if defined(SPI1)
546 #define LL_RCC_SPI1_CLKSOURCE ((RCC_OFFSET_CCIPR1 << 24U) | (RCC_CCIPR1_SPI1SEL_Pos << 16U) | (RCC_CCIPR1_SPI1SEL >> RCC_CCIPR1_SPI1SEL_Pos)) /*!< SPI1 Clock source selection */
547 #endif /* SPI1 */
548 #define LL_RCC_SPI3_CLKSOURCE ((RCC_OFFSET_CCIPR3 << 24U) | (RCC_CCIPR3_SPI3SEL_Pos << 16U) | (RCC_CCIPR3_SPI3SEL >> RCC_CCIPR3_SPI3SEL_Pos)) /*!< SPI3 Clock source selection */
549 /**
550 * @}
551 */
552
553 /** @defgroup RCC_LL_EC_LPUART Peripheral LPUARTx get clock source
554 * @{
555 */
556 #define LL_RCC_LPUART1_CLKSOURCE RCC_CCIPR3_LPUART1SEL /*!< LPUART1 Clock source selection */
557 /**
558 * @}
559 */
560
561 /** @defgroup RCC_LL_EC_I2C Peripheral I2Cx get clock source
562 * @{
563 */
564 #if defined(I2C1)
565 #define LL_RCC_I2C1_CLKSOURCE ((RCC_OFFSET_CCIPR1 << 24U) | (RCC_CCIPR1_I2C1SEL_Pos << 16U) | (RCC_CCIPR1_I2C1SEL >> RCC_CCIPR1_I2C1SEL_Pos)) /*!< I2C1 Clock source selection */
566 #endif /* I2C1 */
567 #define LL_RCC_I2C3_CLKSOURCE ((RCC_OFFSET_CCIPR3 << 24U) | (RCC_CCIPR3_I2C3SEL_Pos << 16U) | (RCC_CCIPR3_I2C3SEL >> RCC_CCIPR3_I2C3SEL_Pos)) /*!< I2C3 Clock source selection */
568
569 /**
570 * @}
571 */
572
573 /** @defgroup RCC_LL_EC_LPTIM Peripheral LPTIMx get clock source
574 * @{
575 */
576 #define LL_RCC_LPTIM1_CLKSOURCE ((RCC_OFFSET_CCIPR3 << 24U) | (RCC_CCIPR3_LPTIM1SEL_Pos << 16U) | (RCC_CCIPR3_LPTIM1SEL >> RCC_CCIPR3_LPTIM1SEL_Pos)) /*!< LPTIM1 Clock source selection */
577 #if defined(LPTIM2)
578 #define LL_RCC_LPTIM2_CLKSOURCE ((RCC_OFFSET_CCIPR1 << 24U) | (RCC_CCIPR1_LPTIM2SEL_Pos << 16U) | (RCC_CCIPR1_LPTIM2SEL >> RCC_CCIPR1_LPTIM2SEL_Pos)) /*!< LPTIM2 Clock source selection */
579 #endif /* LPTIM2 */
580 /**
581 * @}
582 */
583
584 #if defined(SAI1)
585 /** @defgroup RCC_LL_EC_SAI Peripheral SAIx get clock source
586 * @{
587 */
588 #define LL_RCC_SAI1_CLKSOURCE RCC_CCIPR2_SAI1SEL /*!< SAI1 Clock source selection */
589 /**
590 * @}
591 */
592 #endif /* SAI1 */
593
594 /** @defgroup RCC_LL_EC_RNG Peripheral RNG get clock source
595 * @{
596 */
597 #define LL_RCC_RNG_CLKSOURCE RCC_CCIPR2_RNGSEL /*!< RNG Clock source selection */
598 /**
599 * @}
600 */
601
602 /** @defgroup RCC_LL_EC_ADC Peripheral ADC get clock source
603 * @{
604 */
605 #define LL_RCC_ADC_CLKSOURCE RCC_CCIPR3_ADCSEL /*!< ADCs Clock source selection */
606 /**
607 * @}
608 */
609
610
611 /** @defgroup RCC_LL_EC_PLL1SOURCE PLL1 entry clock source
612 * @{
613 */
614 #define LL_RCC_PLL1SOURCE_NONE 0U /*!< No clock selected as PLL1 entry clock source */
615 #define LL_RCC_PLL1SOURCE_HSI RCC_PLL1CFGR_PLL1SRC_1 /*!< HSI clock selected as PLL1 entry clock source */
616 #define LL_RCC_PLL1SOURCE_HSE (RCC_PLL1CFGR_PLL1SRC_0 | RCC_PLL1CFGR_PLL1SRC_1) /*!< HSE clock selected as PLL1 entry clock source */
617 /**
618 * @}
619 */
620
621 /** @defgroup RCC_LL_EC_PLLINPUTRANGE All PLLs input ranges
622 * @{
623 */
624 #define LL_RCC_PLLINPUTRANGE_4_8 2U /*!< VCO input range: 4 to 8 MHz */
625 #define LL_RCC_PLLINPUTRANGE_8_16 3U /*!< VCO input range: 8 to 16 MHz */
626 /**
627 * @}
628 */
629
630 /** @defgroup RCC_LL_EC_PLL1RCLKPRESTEP PLL1RCLK prescaler steps division
631 * @{
632 */
633 #define LL_RCC_PLL1RCLK_2_STEP_DIV 0U /*!< PLL1RCLK 2-step division */
634 #define LL_RCC_PLL1RCLK_3_STEP_DIV RCC_PLL1CFGR_PLL1RCLKPRESTEP /*!< PLL1RCLK 3-step division */
635 /**
636 * @}
637 */
638
639 /** @defgroup RCC_LSE_Trimming LSE Trimming
640 * @{
641 */
642 #define LL_RCC_LSETRIMMING_R 0U /*!< Current source resistance R */
643 #define LL_RCC_LSETRIMMING_3_4_R RCC_BDCR1_LSETRIM_0 /*!< Current source resistance 3/4 * R */
644 #define LL_RCC_LSETRIMMING_2_3_R RCC_BDCR1_LSETRIM_1 /*!< Current source resistance 2/3 * R */
645 #define LL_RCC_LSETRIMMING_1_2_R RCC_BDCR1_LSETRIM /*!< Current source resistance 1/2 * R */
646 /**
647 * @}
648 */
649
650 /** @defgroup RCC_LL_EF_Security_Services Security Services
651 * @note Only available when system implements security (TZEN=1)
652 * @{
653 */
654 #define LL_RCC_ALL_NSEC 0U /*!< No security on RCC resources (default) */
655 #define LL_RCC_ALL_SEC RCC_SECURE_MASK /*!< Security on all RCC resources */
656
657 #define LL_RCC_HSI_SEC RCC_SECCFGR_HSISEC /*!< HSI clock configuration secure-only access */
658 #define LL_RCC_HSI_NSEC 0U /*!< HSI clock configuration secure/non-secure access */
659 #define LL_RCC_HSE_SEC RCC_SECCFGR_HSESEC /*!< HSE clock configuration secure-only access */
660 #define LL_RCC_HSE_NSEC 0U /*!< HSE clock configuration secure/non-secure access */
661 #define LL_RCC_LSE_SEC RCC_SECCFGR_LSESEC /*!< LSE clock configuration secure-only access */
662 #define LL_RCC_LSE_NSEC 0U /*!< LSE clock configuration secure/non-secure access */
663 #define LL_RCC_LSI_SEC RCC_SECCFGR_LSISEC /*!< LSI clock configuration secure-only access */
664 #define LL_RCC_LSI_NSEC 0U /*!< LSI clock configuration secure/non-secure access */
665 #define LL_RCC_SYSCLK_SEC RCC_SECCFGR_SYSCLKSEC /*!< SYSCLK clock; STOPWUCK and MCO output configuration secure-only access */
666 #define LL_RCC_SYSCLK_NSEC 0U /*!< SYSCLK clock; STOPWUCK and MCO output configuration secure/non-secure access */
667 #define LL_RCC_PRESCALERS_SEC RCC_SECCFGR_PRESCSEC /*!< AHBx/APBx prescaler configuration secure-only access */
668 #define LL_RCC_PRESCALERS_NSEC 0U /*!< AHBx/APBx prescaler configuration secure/non-secure access */
669 #define LL_RCC_PLL1_SEC RCC_SECCFGR_PLL1SEC /*!< PLL1 clock configuration secure-only access */
670 #define LL_RCC_PLL1_NSEC 0U /*!< PLL1 clock configuration secure/non-secure access */
671 #define LL_RCC_RESET_FLAGS_SEC RCC_SECCFGR_RMVFSEC /*!< Remove reset flag secure-only access */
672 #define LL_RCC_RESET_FLAGS_NSEC 0U /*!< Remove reset flag secure/non-secure access */
673 /**
674 * @}
675 */
676
677 /**
678 * @}
679 */
680
681 /* Exported macro ------------------------------------------------------------*/
682 /** @defgroup RCC_LL_Exported_Macros RCC Exported Macros
683 * @{
684 */
685
686 /** @defgroup RCC_LL_EM_WRITE_READ Common Write and read registers Macros
687 * @{
688 */
689
690 /**
691 * @brief Write a value in RCC register
692 * @param __REG__ Register to be written
693 * @param __VALUE__ Value to be written in the register
694 * @retval None
695 */
696 #define LL_RCC_WriteReg(__REG__, __VALUE__) WRITE_REG(RCC->__REG__, (__VALUE__))
697
698 /**
699 * @brief Read a value in RCC register
700 * @param __REG__ Register to be read
701 * @retval Register value
702 */
703 #define LL_RCC_ReadReg(__REG__) READ_REG(RCC->__REG__)
704 /**
705 * @}
706 */
707
708 /** @defgroup RCC_LL_EM_CALC_FREQ Calculate frequencies
709 * @{
710 */
711
712 /**
713 * @brief Helper macro to calculate the PLL1RCLK frequency on system domain
714 * @note ex: @ref __LL_RCC_CALC_PLL1RCLK_FREQ (HSE_VALUE,@ref LL_RCC_PLL1_GetDivider (),
715 * @ref LL_RCC_PLL1_GetN (), @ref LL_RCC_PLL1_GetR ());
716 * @param __INPUTFREQ__ PLL1 Input frequency (based on HSE/HSI)
717 * @param __PLL1M__ parameter can be a value between 1 and 16
718 * @param __PLL1N__ parameter can be a value between 4 and 512
719 * @param __PLL1R__ parameter can be a value between 1 and 128
720 * @retval PLL1R clock frequency (in Hz)
721 */
722
723 #define __LL_RCC_CALC_PLL1RCLK_FREQ(__INPUTFREQ__, __PLL1M__, __PLL1N__, __PLL1R__) ((((__INPUTFREQ__) /(__PLL1M__)) * (__PLL1N__)) / (__PLL1R__))
724
725 /**
726 * @brief Helper macro to calculate the PLL1PCLK frequency
727 * @note ex: @ref __LL_RCC_CALC_PLL1PCLK_FREQ (HSE_VALUE,@ref LL_RCC_PLL1_GetDivider (),
728 * @ref LL_RCC_PLL1_GetN (), @ref LL_RCC_PLL1_GetP ());
729 * @param __INPUTFREQ__ PLL1 Input frequency (based on HSE/HSI)
730 * @param __PLL1M__ parameter can be a value between 1 and 16
731 * @param __PLL1N__ parameter can be a value between 4 and 512
732 * @param __PLL1P__ parameter can be a value between 2 and 128
733 * @retval PLL1P clock frequency (in Hz)
734 */
735 #define __LL_RCC_CALC_PLL1PCLK_FREQ(__INPUTFREQ__, __PLL1M__, __PLL1N__, __PLL1P__) ((((__INPUTFREQ__) /(__PLL1M__)) * (__PLL1N__)) / (__PLL1P__))
736
737 /**
738 * @brief Helper macro to calculate the PLL1QCLK frequency
739 * @note ex: @ref __LL_RCC_CALC_PLL1QCLK_FREQ (HSE_VALUE,@ref LL_RCC_PLL1_GetDivider (),
740 * @ref LL_RCC_PLL1_GetN (), @ref LL_RCC_PLL1_GetQ ());
741 * @param __INPUTFREQ__ PLL1 Input frequency (based on HSE/HSI)
742 * @param __PLL1M__ parameter can be a value between 1 and 16
743 * @param __PLL1N__ parameter can be a value between 4 and 512
744 * @param __PLL1Q__ parameter can be a value between 1 and 128
745 * @retval PLL1 clock frequency (in Hz)
746 */
747 #define __LL_RCC_CALC_PLL1QCLK_FREQ(__INPUTFREQ__, __PLL1M__, __PLL1N__, __PLL1Q__) ((((__INPUTFREQ__) /(__PLL1M__)) * (__PLL1N__)) / (__PLL1Q__))
748
749 /**
750 * @brief Helper macro to calculate the HCLK frequency
751 * @param __SYSCLKFREQ__ SYSCLK frequency (based on HSE/HSI/PLLCLK)
752 * @param __AHBPRESCALER__ This parameter can be one of the following values:
753 * @arg @ref LL_RCC_SYSCLK_DIV_1
754 * @arg @ref LL_RCC_SYSCLK_DIV_2
755 * @arg @ref LL_RCC_SYSCLK_DIV_4
756 * @arg @ref LL_RCC_SYSCLK_DIV_8
757 * @arg @ref LL_RCC_SYSCLK_DIV_16
758 * @retval HCLK clock frequency (in Hz)
759 */
760 #define __LL_RCC_CALC_HCLK_FREQ(__SYSCLKFREQ__, __AHBPRESCALER__) ((__SYSCLKFREQ__) >> AHBPrescTable[((__AHBPRESCALER__) & RCC_CFGR2_HPRE) >> RCC_CFGR2_HPRE_Pos])
761
762 /**
763 * @brief Helper macro to calculate the PCLK1 frequency (ABP1)
764 * @param __HCLKFREQ__ HCLK frequency
765 * @param __APB1PRESCALER__ This parameter can be one of the following values:
766 * @arg @ref LL_RCC_APB1_DIV_1
767 * @arg @ref LL_RCC_APB1_DIV_2
768 * @arg @ref LL_RCC_APB1_DIV_4
769 * @arg @ref LL_RCC_APB1_DIV_8
770 * @arg @ref LL_RCC_APB1_DIV_16
771 * @retval PCLK1 clock frequency (in Hz)
772 */
773 #define __LL_RCC_CALC_PCLK1_FREQ(__HCLKFREQ__, __APB1PRESCALER__) ((__HCLKFREQ__) >> (APBPrescTable[((__APB1PRESCALER__) & RCC_CFGR2_PPRE1) >> RCC_CFGR2_PPRE1_Pos]))
774
775 /**
776 * @brief Helper macro to calculate the PCLK2 frequency (ABP2)
777 * @param __HCLKFREQ__ HCLK frequency
778 * @param __APB2PRESCALER__ This parameter can be one of the following values:
779 * @arg @ref LL_RCC_APB2_DIV_1
780 * @arg @ref LL_RCC_APB2_DIV_2
781 * @arg @ref LL_RCC_APB2_DIV_4
782 * @arg @ref LL_RCC_APB2_DIV_8
783 * @arg @ref LL_RCC_APB2_DIV_16
784 * @retval PCLK2 clock frequency (in Hz)
785 */
786 #define __LL_RCC_CALC_PCLK2_FREQ(__HCLKFREQ__, __APB2PRESCALER__) ((__HCLKFREQ__) >> APBPrescTable[(__APB2PRESCALER__) >> RCC_CFGR2_PPRE2_Pos])
787
788
789 /**
790 * @brief Helper macro to calculate the PCLK7 frequency (ABP7)
791 * @param __HCLKFREQ__ HCLK frequency
792 * @param __APB7PRESCALER__ This parameter can be one of the following values:
793 * @arg @ref LL_RCC_APB7_DIV_1
794 * @arg @ref LL_RCC_APB7_DIV_2
795 * @arg @ref LL_RCC_APB7_DIV_4
796 * @arg @ref LL_RCC_APB7_DIV_8
797 * @arg @ref LL_RCC_APB7_DIV_16
798 * @retval PCLK3 clock frequency (in Hz)
799 */
800 #define __LL_RCC_CALC_PCLK7_FREQ(__HCLKFREQ__, __APB7PRESCALER__) ((__HCLKFREQ__) >> APBPrescTable[(__APB7PRESCALER__) >> RCC_CFGR3_PPRE7_Pos])
801
802 /**
803 * @}
804 */
805
806 /**
807 * @}
808 */
809
810 /* Exported functions --------------------------------------------------------*/
811 /** @defgroup RCC_LL_Exported_Functions RCC Exported Functions
812 * @{
813 */
814
815 /** @defgroup RCC_LL_EF_HSE HSE
816 * @{
817 */
818
819 /**
820 * @brief Enable HSE crystal oscillator (HSE ON)
821 * @rmtoll CR HSEON LL_RCC_HSE_Enable
822 * @retval None
823 */
LL_RCC_HSE_Enable(void)824 __STATIC_INLINE void LL_RCC_HSE_Enable(void)
825 {
826 SET_BIT(RCC->CR, RCC_CR_HSEON);
827 }
828
829 /**
830 * @brief Disable HSE crystal oscillator (HSE ON)
831 * @rmtoll CR HSEON LL_RCC_HSE_Disable
832 * @retval None
833 */
LL_RCC_HSE_Disable(void)834 __STATIC_INLINE void LL_RCC_HSE_Disable(void)
835 {
836 CLEAR_BIT(RCC->CR, RCC_CR_HSEON);
837 }
838
839 /**
840 * @brief Check if HSE oscillator Ready
841 * @rmtoll CR HSERDY LL_RCC_HSE_IsReady
842 * @retval State of bit (1 or 0).
843 */
LL_RCC_HSE_IsReady(void)844 __STATIC_INLINE uint32_t LL_RCC_HSE_IsReady(void)
845 {
846 return ((READ_BIT(RCC->CR, RCC_CR_HSERDY) == RCC_CR_HSERDY) ? 1UL : 0UL);
847 }
848
849 /**
850 * @brief Enable HSE clock prescaler for sysclk
851 * @rmtoll CR HSEPRE LL_RCC_HSE_EnablePrescaler
852 * @note Control the division factor of the HSE32 clock for sysclk
853 * @retval None
854 */
LL_RCC_HSE_EnablePrescaler(void)855 __STATIC_INLINE void LL_RCC_HSE_EnablePrescaler(void)
856 {
857 SET_BIT(RCC->CR, RCC_CR_HSEPRE);
858 }
859
860 /**
861 * @brief Check if HSE clock prescaler for sysclk is enabled
862 * @rmtoll CR HSEPRE LL_RCC_HSE_IsEnabledPrescaler
863 * @note Check if the HSE32 clock for sysclk is divided by 2 or not
864 * @retval State of bit (1 or 0).
865 */
LL_RCC_HSE_IsEnabledPrescaler(void)866 __STATIC_INLINE uint32_t LL_RCC_HSE_IsEnabledPrescaler(void)
867 {
868 return ((READ_BIT(RCC->CR, RCC_CR_HSEPRE) == RCC_CR_HSEPRE) ? 1UL : 0UL);
869 }
870
871 /**
872 * @brief Disable HSE clock prescaler for sysclk
873 * @rmtoll CR HSEPRE LL_RCC_HSE_DisablePrescaler
874 * @note Control the division factor of the HSE32 clock for sysclk
875 * @retval None
876 */
LL_RCC_HSE_DisablePrescaler(void)877 __STATIC_INLINE void LL_RCC_HSE_DisablePrescaler(void)
878 {
879 CLEAR_BIT(RCC->CR, RCC_CR_HSEPRE);
880 }
881
882 /**
883 * @brief Enable the Clock Security System.
884 * @rmtoll CR HSECSSON LL_RCC_HSE_EnableCSS
885 * @retval None
886 */
LL_RCC_HSE_EnableCSS(void)887 __STATIC_INLINE void LL_RCC_HSE_EnableCSS(void)
888 {
889 SET_BIT(RCC->CR, RCC_CR_HSECSSON);
890 }
891
892 /**
893 * @brief Set HSE clock trimming
894 * @note user-programmable capacitor trimming value.
895 * @rmtoll ECSCR1 HSETRIM LL_RCC_HSE_SetClockTrimming
896 * @param Value Between Min_Data = 0 and Max_Data = 63
897 * @retval None
898 */
LL_RCC_HSE_SetClockTrimming(uint32_t Value)899 __STATIC_INLINE void LL_RCC_HSE_SetClockTrimming(uint32_t Value)
900 {
901 MODIFY_REG(RCC->ECSCR1, RCC_ECSCR1_HSETRIM, Value << RCC_ECSCR1_HSETRIM_Pos);
902 }
903
904 /**
905 * @brief Get HSE clock trimming
906 * @rmtoll ECSCR1 HSETRIM LL_RCC_HSE_GetClockTrimming
907 * @retval Between Min_Data = 0 and Max_Data = 63
908 */
LL_RCC_HSE_GetClockTrimming(void)909 __STATIC_INLINE uint32_t LL_RCC_HSE_GetClockTrimming(void)
910 {
911 return (uint32_t)(READ_BIT(RCC->ECSCR1, RCC_ECSCR1_HSETRIM) >> RCC_ECSCR1_HSETRIM_Pos);
912 }
913 /**
914 * @}
915 */
916
917 /** @defgroup RCC_LL_EF_HSI HSI
918 * @{
919 */
920
921 /**
922 * @brief Enable HSI even in stop mode
923 * @note HSI oscillator is forced ON even in Stop mode
924 * @rmtoll CR HSIKERON LL_RCC_HSI_EnableInStopMode
925 * @retval None
926 */
LL_RCC_HSI_EnableInStopMode(void)927 __STATIC_INLINE void LL_RCC_HSI_EnableInStopMode(void)
928 {
929 SET_BIT(RCC->CR, RCC_CR_HSIKERON);
930 }
931
932 /**
933 * @brief Disable HSI in stop mode
934 * @rmtoll CR HSIKERON LL_RCC_HSI_DisableInStopMode
935 * @retval None
936 */
LL_RCC_HSI_DisableInStopMode(void)937 __STATIC_INLINE void LL_RCC_HSI_DisableInStopMode(void)
938 {
939 CLEAR_BIT(RCC->CR, RCC_CR_HSIKERON);
940 }
941
942 /**
943 * @brief Check if HSI is enabled in stop mode
944 * @rmtoll CR HSIKERON LL_RCC_HSI_IsEnabledInStopMode
945 * @retval State of bit (1 or 0).
946 */
LL_RCC_HSI_IsEnabledInStopMode(void)947 __STATIC_INLINE uint32_t LL_RCC_HSI_IsEnabledInStopMode(void)
948 {
949 return ((READ_BIT(RCC->CR, RCC_CR_HSIKERON) == RCC_CR_HSIKERON) ? 1UL : 0UL);
950 }
951
952 /**
953 * @brief Enable HSI oscillator
954 * @rmtoll CR HSION LL_RCC_HSI_Enable
955 * @retval None
956 */
LL_RCC_HSI_Enable(void)957 __STATIC_INLINE void LL_RCC_HSI_Enable(void)
958 {
959 SET_BIT(RCC->CR, RCC_CR_HSION);
960 }
961
962 /**
963 * @brief Disable HSI oscillator
964 * @rmtoll CR HSION LL_RCC_HSI_Disable
965 * @retval None
966 */
LL_RCC_HSI_Disable(void)967 __STATIC_INLINE void LL_RCC_HSI_Disable(void)
968 {
969 CLEAR_BIT(RCC->CR, RCC_CR_HSION);
970 }
971
972 /**
973 * @brief Check if HSI clock is ready
974 * @rmtoll CR HSIRDY LL_RCC_HSI_IsReady
975 * @retval State of bit (1 or 0).
976 */
LL_RCC_HSI_IsReady(void)977 __STATIC_INLINE uint32_t LL_RCC_HSI_IsReady(void)
978 {
979 return ((READ_BIT(RCC->CR, RCC_CR_HSIRDY) == RCC_CR_HSIRDY) ? 1UL : 0UL);
980 }
981
982 /**
983 * @brief Get HSI Calibration value
984 * @note When HSITRIM is written, HSICAL is updated with the sum of
985 * HSITRIM and the factory trim value
986 * @rmtoll ICSCR3 HSICAL LL_RCC_HSI_GetCalibration
987 * @retval Between Min_Data = 0 and Max_Data = 4095
988 */
LL_RCC_HSI_GetCalibration(void)989 __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibration(void)
990 {
991 return (uint32_t)(READ_BIT(RCC->ICSCR3, RCC_ICSCR3_HSICAL) >> RCC_ICSCR3_HSICAL_Pos);
992 }
993
994 /**
995 * @brief Set HSI Calibration trimming
996 * @note user-programmable trimming value that is added to the HSICAL
997 * @note Default value is 16, which, when added to the HSICAL value,
998 * should trim the HSI to 16 MHz +/- 1 %
999 * @rmtoll ICSCR3 HSITRIM LL_RCC_HSI_SetCalibTrimming
1000 * @param Value Between Min_Data = 0 and Max_Data = 31
1001 * @retval None
1002 */
LL_RCC_HSI_SetCalibTrimming(uint32_t Value)1003 __STATIC_INLINE void LL_RCC_HSI_SetCalibTrimming(uint32_t Value)
1004 {
1005 MODIFY_REG(RCC->ICSCR3, RCC_ICSCR3_HSITRIM, Value << RCC_ICSCR3_HSITRIM_Pos);
1006 }
1007
1008 /**
1009 * @brief Get HSI Calibration trimming
1010 * @rmtoll ICSCR3 HSITRIM LL_RCC_HSI_GetCalibTrimming
1011 * @retval Between Min_Data = 0 and Max_Data = 31
1012 */
LL_RCC_HSI_GetCalibTrimming(void)1013 __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibTrimming(void)
1014 {
1015 return (uint32_t)(READ_BIT(RCC->ICSCR3, RCC_ICSCR3_HSITRIM) >> RCC_ICSCR3_HSITRIM_Pos);
1016 }
1017
1018 /**
1019 * @}
1020 */
1021
1022 /** @defgroup RCC_LL_EF_LSE LSE
1023 * @{
1024 */
1025
1026 /**
1027 * @brief Enable Low Speed External (LSE) crystal.
1028 * @rmtoll BDCR1 LSEON LL_RCC_LSE_Enable
1029 * @retval None
1030 */
LL_RCC_LSE_Enable(void)1031 __STATIC_INLINE void LL_RCC_LSE_Enable(void)
1032 {
1033 SET_BIT(RCC->BDCR1, RCC_BDCR1_LSEON);
1034 }
1035
1036 /**
1037 * @brief Disable Low Speed External (LSE) crystal.
1038 * @rmtoll BDCR1 LSEON LL_RCC_LSE_Disable
1039 * @retval None
1040 */
LL_RCC_LSE_Disable(void)1041 __STATIC_INLINE void LL_RCC_LSE_Disable(void)
1042 {
1043 CLEAR_BIT(RCC->BDCR1, RCC_BDCR1_LSEON);
1044 }
1045
1046 /**
1047 * @brief Enable external clock source (LSE bypass).
1048 * @rmtoll BDCR1 LSEBYP LL_RCC_LSE_EnableBypass
1049 * @retval None
1050 */
LL_RCC_LSE_EnableBypass(void)1051 __STATIC_INLINE void LL_RCC_LSE_EnableBypass(void)
1052 {
1053 SET_BIT(RCC->BDCR1, RCC_BDCR1_LSEBYP);
1054 }
1055
1056 /**
1057 * @brief Disable external clock source (LSE bypass).
1058 * @rmtoll BDCR1 LSEBYP LL_RCC_LSE_DisableBypass
1059 * @retval None
1060 */
LL_RCC_LSE_DisableBypass(void)1061 __STATIC_INLINE void LL_RCC_LSE_DisableBypass(void)
1062 {
1063 CLEAR_BIT(RCC->BDCR1, RCC_BDCR1_LSEBYP);
1064 }
1065
1066 /**
1067 * @brief Enable LSE clock glitch filter.
1068 * @rmtoll BDCR1 LSEGFON LL_RCC_LSE_EnableGlitchFilter
1069 * @retval None
1070 */
LL_RCC_LSE_EnableGlitchFilter(void)1071 __STATIC_INLINE void LL_RCC_LSE_EnableGlitchFilter(void)
1072 {
1073 SET_BIT(RCC->BDCR1, RCC_BDCR1_LSEGFON);
1074 }
1075
1076 /**
1077 * @brief Disable LSE clock glitch filter.
1078 * @rmtoll BDCR1 LSEGFON LL_RCC_LSE_DisableGlitchFilter
1079 * @retval None
1080 */
LL_RCC_LSE_DisableGlitchFilter(void)1081 __STATIC_INLINE void LL_RCC_LSE_DisableGlitchFilter(void)
1082 {
1083 CLEAR_BIT(RCC->BDCR1, RCC_BDCR1_LSEGFON);
1084 }
1085
1086 /**
1087 * @brief Set LSE trimming
1088 * @rmtoll BDCR1 LSETRIM LL_RCC_LSE_SetClockTrimming
1089 * @param LSETrim This parameter can be one of the following values:
1090 * @arg @ref LL_RCC_LSETRIMMING_R
1091 * @arg @ref LL_RCC_LSETRIMMING_3_4_R
1092 * @arg @ref LL_RCC_LSETRIMMING_2_3_R
1093 * @arg @ref LL_RCC_LSETRIMMING_1_2_R
1094 * @retval None
1095 */
LL_RCC_LSE_SetClockTrimming(uint32_t LSETrim)1096 __STATIC_INLINE void LL_RCC_LSE_SetClockTrimming(uint32_t LSETrim)
1097 {
1098 MODIFY_REG(RCC->BDCR1, RCC_BDCR1_LSETRIM, LSETrim);
1099 }
1100
1101 /**
1102 * @brief Get LSE trimming
1103 * @rmtoll BDCR1 LSETRIM LL_RCC_LSE_GetClockTrimming
1104 * @retval Returned value can be one of the following values:
1105 * @arg @ref LL_RCC_LSETRIMMING_R
1106 * @arg @ref LL_RCC_LSETRIMMING_3_4_R
1107 * @arg @ref LL_RCC_LSETRIMMING_2_3_R
1108 * @arg @ref LL_RCC_LSETRIMMING_1_2_R
1109 * @retval None
1110 */
LL_RCC_LSE_GetClockTrimming(void)1111 __STATIC_INLINE uint32_t LL_RCC_LSE_GetClockTrimming(void)
1112 {
1113 return (uint32_t)(READ_BIT(RCC->BDCR1, RCC_BDCR1_LSETRIM));
1114 }
1115
1116 /**
1117 * @brief Set LSE oscillator drive capability
1118 * @note The oscillator is in Xtal mode when it is not in bypass mode.
1119 * @rmtoll BDCR1 LSEDRV LL_RCC_LSE_SetDriveCapability
1120 * @param LSEDrive This parameter can be one of the following values:
1121 * @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW
1122 * @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH
1123 * @arg @ref LL_RCC_LSEDRIVE_HIGH
1124 * @retval None
1125 */
LL_RCC_LSE_SetDriveCapability(uint32_t LSEDrive)1126 __STATIC_INLINE void LL_RCC_LSE_SetDriveCapability(uint32_t LSEDrive)
1127 {
1128 MODIFY_REG(RCC->BDCR1, RCC_BDCR1_LSEDRV, LSEDrive);
1129 }
1130
1131 /**
1132 * @brief Get LSE oscillator drive capability
1133 * @rmtoll BDCR1 LSEDRV LL_RCC_LSE_GetDriveCapability
1134 * @retval Returned value can be one of the following values:
1135 * @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW
1136 * @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH
1137 * @arg @ref LL_RCC_LSEDRIVE_HIGH
1138 */
LL_RCC_LSE_GetDriveCapability(void)1139 __STATIC_INLINE uint32_t LL_RCC_LSE_GetDriveCapability(void)
1140 {
1141 return (uint32_t)(READ_BIT(RCC->BDCR1, RCC_BDCR1_LSEDRV));
1142 }
1143
1144 /**
1145 * @brief Enable Clock security system on LSE.
1146 * @rmtoll BDCR1 LSECSSON LL_RCC_LSE_EnableCSS
1147 * @retval None
1148 */
LL_RCC_LSE_EnableCSS(void)1149 __STATIC_INLINE void LL_RCC_LSE_EnableCSS(void)
1150 {
1151 SET_BIT(RCC->BDCR1, RCC_BDCR1_LSECSSON);
1152 }
1153
1154 /**
1155 * @brief Disable Clock security system on LSE.
1156 * @note Clock security system can be disabled only after a LSE
1157 * failure detection. In that case it MUST be disabled by software.
1158 * @rmtoll BDCR1 LSECSSON LL_RCC_LSE_DisableCSS
1159 * @retval None
1160 */
LL_RCC_LSE_DisableCSS(void)1161 __STATIC_INLINE void LL_RCC_LSE_DisableCSS(void)
1162 {
1163 CLEAR_BIT(RCC->BDCR1, RCC_BDCR1_LSECSSON);
1164 }
1165
1166 /**
1167 * @brief Check if LSE oscillator Ready
1168 * @rmtoll BDCR1 LSERDY LL_RCC_LSE_IsReady
1169 * @retval State of bit (1 or 0).
1170 */
LL_RCC_LSE_IsReady(void)1171 __STATIC_INLINE uint32_t LL_RCC_LSE_IsReady(void)
1172 {
1173 return ((READ_BIT(RCC->BDCR1, RCC_BDCR1_LSERDY) == RCC_BDCR1_LSERDY) ? 1UL : 0UL);
1174 }
1175
1176 /**
1177 * @brief Enable LSE oscillator propagation for system clock
1178 * @rmtoll BDCR1 LSESYSEN LL_RCC_LSE_EnablePropagation
1179 * @retval None
1180 */
LL_RCC_LSE_EnablePropagation(void)1181 __STATIC_INLINE void LL_RCC_LSE_EnablePropagation(void)
1182 {
1183 SET_BIT(RCC->BDCR1, RCC_BDCR1_LSESYSEN);
1184 }
1185
1186 /**
1187 * @brief Disable LSE oscillator propagation for system clock
1188 * @rmtoll BDCR1 LSESYSEN LL_RCC_LSE_DisablePropagation
1189 * @retval None
1190 */
LL_RCC_LSE_DisablePropagation(void)1191 __STATIC_INLINE void LL_RCC_LSE_DisablePropagation(void)
1192 {
1193 CLEAR_BIT(RCC->BDCR1, RCC_BDCR1_LSESYSEN);
1194 }
1195
1196 /**
1197 * @brief Check if LSE oscillator propagation for system clock Ready
1198 * @rmtoll BDCR1 LSESYSRDY LL_RCC_LSE_IsPropagationReady
1199 * @retval State of bit (1 or 0).
1200 */
LL_RCC_LSE_IsPropagationReady(void)1201 __STATIC_INLINE uint32_t LL_RCC_LSE_IsPropagationReady(void)
1202 {
1203 return ((READ_BIT(RCC->BDCR1, RCC_BDCR1_LSESYSRDY) == RCC_BDCR1_LSESYSRDY) ? 1UL : 0UL);
1204 }
1205
1206 /**
1207 * @brief Check if CSS on LSE failure Detection
1208 * @rmtoll BDCR1 LSECSSD LL_RCC_LSE_IsCSSDetected
1209 * @retval State of bit (1 or 0).
1210 */
LL_RCC_LSE_IsCSSDetected(void)1211 __STATIC_INLINE uint32_t LL_RCC_LSE_IsCSSDetected(void)
1212 {
1213 return ((READ_BIT(RCC->BDCR1, RCC_BDCR1_LSECSSD) == RCC_BDCR1_LSECSSD) ? 1UL : 0UL);
1214 }
1215
1216 /**
1217 * @}
1218 */
1219
1220 /** @defgroup RCC_LL_EF_LSI1 LSI1
1221 * @{
1222 */
1223
1224 /**
1225 * @brief Enable LSI1 Oscillator
1226 * @rmtoll BDCR1 LSI1ON LL_RCC_LSI1_Enable
1227 * @retval None
1228 */
LL_RCC_LSI1_Enable(void)1229 __STATIC_INLINE void LL_RCC_LSI1_Enable(void)
1230 {
1231 SET_BIT(RCC->BDCR1, RCC_BDCR1_LSI1ON);
1232 }
1233
1234 /**
1235 * @brief Disable LSI1 Oscillator
1236 * @rmtoll BDCR1 LSI1ON LL_RCC_LSI1_Disable
1237 * @retval None
1238 */
LL_RCC_LSI1_Disable(void)1239 __STATIC_INLINE void LL_RCC_LSI1_Disable(void)
1240 {
1241 CLEAR_BIT(RCC->BDCR1, RCC_BDCR1_LSI1ON);
1242 }
1243
1244 /**
1245 * @brief Check if LSI1 is Ready
1246 * @rmtoll BDCR1 LSI1RDY LL_RCC_LSI1_IsReady
1247 * @retval State of bit (1 or 0).
1248 */
LL_RCC_LSI1_IsReady(void)1249 __STATIC_INLINE uint32_t LL_RCC_LSI1_IsReady(void)
1250 {
1251 return ((READ_BIT(RCC->BDCR1, RCC_BDCR1_LSI1RDY) == RCC_BDCR1_LSI1RDY) ? 1UL : 0UL);
1252 }
1253
1254 /**
1255 * @brief Set LSI1 prescaler
1256 * @rmtoll BDCR1 LSI1PREDIV LL_RCC_LSI1_SetPrescaler
1257 * @param LSI1Prescaler This parameter can be one of the following values:
1258 * @arg @ref LL_RCC_LSI_DIV_1
1259 * @arg @ref LL_RCC_LSI_DIV_128
1260 * @retval None
1261 */
LL_RCC_LSI1_SetPrescaler(uint32_t LSI1Prescaler)1262 __STATIC_INLINE void LL_RCC_LSI1_SetPrescaler(uint32_t LSI1Prescaler)
1263 {
1264 MODIFY_REG(RCC->BDCR1, RCC_BDCR1_LSI1PREDIV, LSI1Prescaler);
1265 }
1266
1267 /**
1268 * @brief Get LSI1 prescaler
1269 * @rmtoll BDCR1 LSI1PREDIV LL_RCC_LSI1_GetPrescaler
1270 * @retval Returned value can be one of the following values:
1271 * @arg @ref LL_RCC_LSI_DIV_1
1272 * @arg @ref LL_RCC_LSI_DIV_128
1273 */
LL_RCC_LSI1_GetPrescaler(void)1274 __STATIC_INLINE uint32_t LL_RCC_LSI1_GetPrescaler(void)
1275 {
1276 return (READ_BIT(RCC->BDCR1, RCC_BDCR1_LSI1PREDIV));
1277 }
1278
1279 /**
1280 * @}
1281 */
1282
1283 #if defined(RCC_LSI2_SUPPORT)
1284 /** @defgroup RCC_LL_EF_LSI2 LSI2
1285 * @{
1286 */
1287
1288 /**
1289 * @brief Enable LSI2 Oscillator
1290 * @rmtoll BDCR1 LSI2ON LL_RCC_LSI2_Enable
1291 * @retval None
1292 */
LL_RCC_LSI2_Enable(void)1293 __STATIC_INLINE void LL_RCC_LSI2_Enable(void)
1294 {
1295 SET_BIT(RCC->BDCR1, RCC_BDCR1_LSI2ON);
1296 }
1297
1298 /**
1299 * @brief Disable LSI2 Oscillator
1300 * @rmtoll BDCR1 LSI2ON LL_RCC_LSI2_Disable
1301 * @retval None
1302 */
LL_RCC_LSI2_Disable(void)1303 __STATIC_INLINE void LL_RCC_LSI2_Disable(void)
1304 {
1305 CLEAR_BIT(RCC->BDCR1, RCC_BDCR1_LSI2ON);
1306 }
1307
1308 /**
1309 * @brief Check if LSI2 is Ready
1310 * @rmtoll BDCR1 LSI2RDY LL_RCC_LSI2_IsReady
1311 * @retval State of bit (1 or 0).
1312 */
LL_RCC_LSI2_IsReady(void)1313 __STATIC_INLINE uint32_t LL_RCC_LSI2_IsReady(void)
1314 {
1315 return ((READ_BIT(RCC->BDCR1, RCC_BDCR1_LSI2RDY) == RCC_BDCR1_LSI2RDY) ? 1UL : 0UL);
1316 }
1317
1318 /**
1319 * @brief Configure LSI2 oscillator temperature sensitivity
1320 * @rmtoll BDCR2 LSI2CFG LL_RCC_LSI2_SetTempSensitivity
1321 * @param Sensitivity This parameter can be one of the following values:
1322 * @arg @ref LL_RCC_LSI2_TEMP_SENSITIVITY_80
1323 * @arg @ref LL_RCC_LSI2_TEMP_SENSITIVITY_50
1324 * @arg @ref LL_RCC_LSI2_TEMP_SENSITIVITY_20
1325 * @retval None
1326 */
LL_RCC_LSI2_SetTempSensitivity(uint32_t Sensitivity)1327 __STATIC_INLINE void LL_RCC_LSI2_SetTempSensitivity(uint32_t Sensitivity)
1328 {
1329 MODIFY_REG(RCC->BDCR2, RCC_BDCR2_LSI2CFG, Sensitivity);
1330 }
1331
1332 /**
1333 * @brief Get LSI2 oscillator temperature sensitivity
1334 * @rmtoll BDCR2 LSI2CFG LL_RCC_LSI2_GetTempSensitivity
1335 * @retval Returned value can be one of the following values:
1336 * @arg @ref LL_RCC_LSI2_TEMP_SENSITIVITY_80
1337 * @arg @ref LL_RCC_LSI2_TEMP_SENSITIVITY_50
1338 * @arg @ref LL_RCC_LSI2_TEMP_SENSITIVITY_20
1339 */
LL_RCC_LSI2_GetTempSensitivity(void)1340 __STATIC_INLINE uint32_t LL_RCC_LSI2_GetTempSensitivity(void)
1341 {
1342 return (uint32_t)(READ_BIT(RCC->BDCR2, RCC_BDCR2_LSI2CFG));
1343 }
1344
1345 /**
1346 * @brief Configure LSI2 operating mode configuration
1347 * @rmtoll BDCR2 LSI2MODE LL_RCC_LSI2_SetOperatingMode
1348 * @param Mode This parameter can be one of the following values:
1349 * @arg @ref LL_RCC_LSI2_NOMINAL_MODE
1350 * @arg @ref LL_RCC_LSI2_LOWPOWER_MODE
1351 * @arg @ref LL_RCC_LSI2_ULTRALOWPOWER_MODE
1352 * @retval None
1353 */
LL_RCC_LSI2_SetOperatingMode(uint32_t Mode)1354 __STATIC_INLINE void LL_RCC_LSI2_SetOperatingMode(uint32_t Mode)
1355 {
1356 MODIFY_REG(RCC->BDCR2, RCC_BDCR2_LSI2MODE, Mode);
1357 }
1358
1359 /**
1360 * @brief Get LSI2 oscillator operating mode
1361 * @rmtoll BDCR2 LSI2MODE LL_RCC_LSI2_GetOperatingMode
1362 * @retval Returned value can be one of the following values:
1363 * @arg @ref LL_RCC_LSI2_NOMINAL_MODE
1364 * @arg @ref LL_RCC_LSI2_LOWPOWER_MODE
1365 * @arg @ref LL_RCC_LSI2_ULTRALOWPOWER_MODE
1366 */
LL_RCC_LSI2_GetOperatingMode(void)1367 __STATIC_INLINE uint32_t LL_RCC_LSI2_GetOperatingMode(void)
1368 {
1369 return (uint32_t)(READ_BIT(RCC->BDCR2, RCC_BDCR2_LSI2MODE));
1370 }
1371
1372 /**
1373 * @}
1374 */
1375 #endif /* LSI2 */
1376
1377 /** @defgroup RCC_LL_EF_LSCO LSCO
1378 * @{
1379 */
1380
1381 /**
1382 * @brief Enable Low speed clock
1383 * @rmtoll BDCR1 LSCOEN LL_RCC_LSCO_Enable
1384 * @retval None
1385 */
LL_RCC_LSCO_Enable(void)1386 __STATIC_INLINE void LL_RCC_LSCO_Enable(void)
1387 {
1388 SET_BIT(RCC->BDCR1, RCC_BDCR1_LSCOEN);
1389 }
1390
1391 /**
1392 * @brief Disable Low speed clock
1393 * @rmtoll BDCR1 LSCOEN LL_RCC_LSCO_Disable
1394 * @retval None
1395 */
LL_RCC_LSCO_Disable(void)1396 __STATIC_INLINE void LL_RCC_LSCO_Disable(void)
1397 {
1398 CLEAR_BIT(RCC->BDCR1, RCC_BDCR1_LSCOEN);
1399 }
1400
1401 /**
1402 * @brief Configure Low speed clock selection
1403 * @rmtoll BDCR1 LSCOSEL LL_RCC_LSCO_SetSource
1404 * @param Source This parameter can be one of the following values:
1405 * @arg @ref LL_RCC_LSCO_CLKSOURCE_LSI
1406 * @arg @ref LL_RCC_LSCO_CLKSOURCE_LSE
1407 * @retval None
1408 */
LL_RCC_LSCO_SetSource(uint32_t Source)1409 __STATIC_INLINE void LL_RCC_LSCO_SetSource(uint32_t Source)
1410 {
1411 MODIFY_REG(RCC->BDCR1, RCC_BDCR1_LSCOSEL, Source);
1412 }
1413
1414 /**
1415 * @brief Get Low speed clock selection
1416 * @rmtoll BDCR1 LSCOSEL LL_RCC_LSCO_GetSource
1417 * @retval Returned value can be one of the following values:
1418 * @arg @ref LL_RCC_LSCO_CLKSOURCE_LSI
1419 * @arg @ref LL_RCC_LSCO_CLKSOURCE_LSE
1420 */
LL_RCC_LSCO_GetSource(void)1421 __STATIC_INLINE uint32_t LL_RCC_LSCO_GetSource(void)
1422 {
1423 return (uint32_t)(READ_BIT(RCC->BDCR1, RCC_BDCR1_LSCOSEL));
1424 }
1425
1426 /**
1427 * @}
1428 */
1429
1430 /** @defgroup RCC_LL_EF_System System
1431 * @{
1432 */
1433
1434 /**
1435 * @brief Configure the system clock source
1436 * @rmtoll CFGR1 SW LL_RCC_SetSysClkSource
1437 * @param Source This parameter can be one of the following values:
1438 * @arg @ref LL_RCC_SYS_CLKSOURCE_HSI
1439 * @arg @ref LL_RCC_SYS_CLKSOURCE_HSE
1440 * @arg @ref LL_RCC_SYS_CLKSOURCE_PLL1R
1441 * @retval None
1442 */
LL_RCC_SetSysClkSource(uint32_t Source)1443 __STATIC_INLINE void LL_RCC_SetSysClkSource(uint32_t Source)
1444 {
1445 MODIFY_REG(RCC->CFGR1, RCC_CFGR1_SW, Source);
1446 }
1447
1448 /**
1449 * @brief Get the system clock source
1450 * @rmtoll CFGR1 SWS LL_RCC_GetSysClkSource
1451 * @retval Returned value can be one of the following values:
1452 * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSI
1453 * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSE
1454 * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_PLL1R
1455 */
LL_RCC_GetSysClkSource(void)1456 __STATIC_INLINE uint32_t LL_RCC_GetSysClkSource(void)
1457 {
1458 return (uint32_t)(READ_BIT(RCC->CFGR1, RCC_CFGR1_SWS));
1459 }
1460
1461 /**
1462 * @brief Set AHB prescaler
1463 * @rmtoll CFGR2 HPRE LL_RCC_SetAHBPrescaler
1464 * @param Prescaler This parameter can be one of the following values:
1465 * @arg @ref LL_RCC_SYSCLK_DIV_1
1466 * @arg @ref LL_RCC_SYSCLK_DIV_2
1467 * @arg @ref LL_RCC_SYSCLK_DIV_4
1468 * @arg @ref LL_RCC_SYSCLK_DIV_8
1469 * @arg @ref LL_RCC_SYSCLK_DIV_16
1470 * @retval None
1471 */
LL_RCC_SetAHBPrescaler(uint32_t Prescaler)1472 __STATIC_INLINE void LL_RCC_SetAHBPrescaler(uint32_t Prescaler)
1473 {
1474 MODIFY_REG(RCC->CFGR2, RCC_CFGR2_HPRE, Prescaler);
1475 }
1476
1477 /**
1478 * @brief Set Systick clock source
1479 * @rmtoll CCIPR1 SYSTICKSEL LL_RCC_SetSystickClockSource
1480 * @param SystickSource This parameter can be one of the following values:
1481 * @arg @ref LL_RCC_SYSTICK_CLKSOURCE_LSI
1482 * @arg @ref LL_RCC_SYSTICK_CLKSOURCE_LSE
1483 * @arg @ref LL_RCC_SYSTICK_CLKSOURCE_HCLKDIV8
1484 * @retval None
1485 */
LL_RCC_SetSystickClockSource(uint32_t SystickSource)1486 __STATIC_INLINE void LL_RCC_SetSystickClockSource(uint32_t SystickSource)
1487 {
1488 MODIFY_REG(RCC->CCIPR1, RCC_CCIPR1_SYSTICKSEL, SystickSource);
1489 }
1490
1491 /**
1492 * @brief Set APB1 prescaler
1493 * @rmtoll CFGR2 PPRE1 LL_RCC_SetAPB1Prescaler
1494 * @param Prescaler This parameter can be one of the following values:
1495 * @arg @ref LL_RCC_APB1_DIV_1
1496 * @arg @ref LL_RCC_APB1_DIV_2
1497 * @arg @ref LL_RCC_APB1_DIV_4
1498 * @arg @ref LL_RCC_APB1_DIV_8
1499 * @arg @ref LL_RCC_APB1_DIV_16
1500 * @retval None
1501 */
LL_RCC_SetAPB1Prescaler(uint32_t Prescaler)1502 __STATIC_INLINE void LL_RCC_SetAPB1Prescaler(uint32_t Prescaler)
1503 {
1504 MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PPRE1, Prescaler);
1505 }
1506
1507 /**
1508 * @brief Set APB2 prescaler
1509 * @rmtoll CFGR2 PPRE2 LL_RCC_SetAPB2Prescaler
1510 * @param Prescaler This parameter can be one of the following values:
1511 * @arg @ref LL_RCC_APB2_DIV_1
1512 * @arg @ref LL_RCC_APB2_DIV_2
1513 * @arg @ref LL_RCC_APB2_DIV_4
1514 * @arg @ref LL_RCC_APB2_DIV_8
1515 * @arg @ref LL_RCC_APB2_DIV_16
1516 * @retval None
1517 */
LL_RCC_SetAPB2Prescaler(uint32_t Prescaler)1518 __STATIC_INLINE void LL_RCC_SetAPB2Prescaler(uint32_t Prescaler)
1519 {
1520 MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PPRE2, Prescaler);
1521 }
1522
1523 /**
1524 * @brief Set APB7 prescaler
1525 * @rmtoll CFGR3 PPRE7 LL_RCC_SetAPB7Prescaler
1526 * @param Prescaler This parameter can be one of the following values:
1527 * @arg @ref LL_RCC_APB7_DIV_1
1528 * @arg @ref LL_RCC_APB7_DIV_2
1529 * @arg @ref LL_RCC_APB7_DIV_4
1530 * @arg @ref LL_RCC_APB7_DIV_8
1531 * @arg @ref LL_RCC_APB7_DIV_16
1532 * @retval None
1533 */
LL_RCC_SetAPB7Prescaler(uint32_t Prescaler)1534 __STATIC_INLINE void LL_RCC_SetAPB7Prescaler(uint32_t Prescaler)
1535 {
1536 MODIFY_REG(RCC->CFGR3, RCC_CFGR3_PPRE7, Prescaler);
1537 }
1538
1539 /**
1540 * @brief Set AHB5 prescaler when SYSCLK is PLL1R
1541 * @rmtoll CFGR4 HPRE5 LL_RCC_SetAHB5Prescaler
1542 * @param Prescaler This parameter can be one of the following values:
1543 * @arg @ref LL_RCC_AHB5_DIV_1
1544 * @arg @ref LL_RCC_AHB5_DIV_2
1545 * @arg @ref LL_RCC_AHB5_DIV_3
1546 * @arg @ref LL_RCC_AHB5_DIV_4
1547 * @arg @ref LL_RCC_AHB5_DIV_6
1548 * @retval None
1549 */
LL_RCC_SetAHB5Prescaler(uint32_t Prescaler)1550 __STATIC_INLINE void LL_RCC_SetAHB5Prescaler(uint32_t Prescaler)
1551 {
1552 MODIFY_REG(RCC->CFGR4, RCC_CFGR4_HPRE5, Prescaler);
1553 }
1554
1555 /**
1556 * @brief Set AHB5 divider when SYSCLK is HSI or HSE
1557 * @rmtoll CFGR4 HDIV5 LL_RCC_SetAHB5Divider
1558 * @param Divider This parameter can be one of the following values:
1559 * @arg @ref LL_RCC_AHB5_DIVIDER_1
1560 * @arg @ref LL_RCC_AHB5_DIVIDER_2
1561 * @retval None
1562 */
LL_RCC_SetAHB5Divider(uint32_t Divider)1563 __STATIC_INLINE void LL_RCC_SetAHB5Divider(uint32_t Divider)
1564 {
1565 MODIFY_REG(RCC->CFGR4, RCC_CFGR4_HDIV5, Divider);
1566 }
1567
1568 /**
1569 * @brief Get AHB prescaler
1570 * @rmtoll CFGR2 HPRE LL_RCC_GetAHBPrescaler
1571 * @retval Returned value can be one of the following values:
1572 * @arg @ref LL_RCC_SYSCLK_DIV_1
1573 * @arg @ref LL_RCC_SYSCLK_DIV_2
1574 * @arg @ref LL_RCC_SYSCLK_DIV_4
1575 * @arg @ref LL_RCC_SYSCLK_DIV_8
1576 * @arg @ref LL_RCC_SYSCLK_DIV_16
1577 */
LL_RCC_GetAHBPrescaler(void)1578 __STATIC_INLINE uint32_t LL_RCC_GetAHBPrescaler(void)
1579 {
1580 return (uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_HPRE));
1581 }
1582
1583 /**
1584 * @brief Get Sysctick clock source
1585 * @rmtoll CCIPR1 SYSTICKSEL LL_RCC_SetSystickClockSource
1586 * @retval Returned value can be one of the following values:
1587 * @arg @ref LL_RCC_SYSTICK_CLKSOURCE_LSI
1588 * @arg @ref LL_RCC_SYSTICK_CLKSOURCE_LSE
1589 * @arg @ref LL_RCC_SYSTICK_CLKSOURCE_HCLKDIV8
1590 */
LL_RCC_GetSystickClockSource(void)1591 __STATIC_INLINE uint32_t LL_RCC_GetSystickClockSource(void)
1592 {
1593 return (uint32_t)(READ_BIT(RCC->CCIPR1, RCC_CCIPR1_SYSTICKSEL));
1594 }
1595
1596 /**
1597 * @brief Get APB1 prescaler
1598 * @rmtoll CFGR2 PPRE1 LL_RCC_GetAPB1Prescaler
1599 * @retval Returned value can be one of the following values:
1600 * @arg @ref LL_RCC_APB1_DIV_1
1601 * @arg @ref LL_RCC_APB1_DIV_2
1602 * @arg @ref LL_RCC_APB1_DIV_4
1603 * @arg @ref LL_RCC_APB1_DIV_8
1604 * @arg @ref LL_RCC_APB1_DIV_16
1605 */
LL_RCC_GetAPB1Prescaler(void)1606 __STATIC_INLINE uint32_t LL_RCC_GetAPB1Prescaler(void)
1607 {
1608 return (uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_PPRE1));
1609 }
1610
1611 /**
1612 * @brief Get APB2 prescaler
1613 * @rmtoll CFGR2 PPRE2 LL_RCC_GetAPB2Prescaler
1614 * @retval Returned value can be one of the following values:
1615 * @arg @ref LL_RCC_APB2_DIV_1
1616 * @arg @ref LL_RCC_APB2_DIV_2
1617 * @arg @ref LL_RCC_APB2_DIV_4
1618 * @arg @ref LL_RCC_APB2_DIV_8
1619 * @arg @ref LL_RCC_APB2_DIV_16
1620 */
LL_RCC_GetAPB2Prescaler(void)1621 __STATIC_INLINE uint32_t LL_RCC_GetAPB2Prescaler(void)
1622 {
1623 return (uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_PPRE2));
1624 }
1625
1626 /**
1627 * @brief Get APB7 prescaler
1628 * @rmtoll CFGR3 PPRE7 LL_RCC_GetAPB7Prescaler
1629 * @retval Returned value can be one of the following values:
1630 * @arg @ref LL_RCC_APB7_DIV_1
1631 * @arg @ref LL_RCC_APB7_DIV_2
1632 * @arg @ref LL_RCC_APB7_DIV_4
1633 * @arg @ref LL_RCC_APB7_DIV_8
1634 * @arg @ref LL_RCC_APB7_DIV_16
1635 */
LL_RCC_GetAPB7Prescaler(void)1636 __STATIC_INLINE uint32_t LL_RCC_GetAPB7Prescaler(void)
1637 {
1638 return (uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_PPRE7));
1639 }
1640
1641 /**
1642 * @brief Get AHB5 prescaler when SYSCLK is PLL1R
1643 * @rmtoll CFGR4 HPRE5 LL_RCC_GetAHB5Prescaler
1644 * @retval Returned value can be one of the following values:
1645 * @arg @ref LL_RCC_AHB5_DIV_1
1646 * @arg @ref LL_RCC_AHB5_DIV_2
1647 * @arg @ref LL_RCC_AHB5_DIV_3
1648 * @arg @ref LL_RCC_AHB5_DIV_4
1649 * @arg @ref LL_RCC_AHB5_DIV_6
1650 */
LL_RCC_GetAHB5Prescaler(void)1651 __STATIC_INLINE uint32_t LL_RCC_GetAHB5Prescaler(void)
1652 {
1653 return (uint32_t)(READ_BIT(RCC->CFGR4, RCC_CFGR4_HPRE5));
1654 }
1655
1656 /**
1657 * @brief Get AHB5 divider when SYSCLK is HSI or HSE
1658 * @rmtoll CFGR4 HDIV5 LL_RCC_GetAHB5Divider
1659 * @retval Returned value can be one of the following values:
1660 * @arg @ref LL_RCC_AHB5_DIVIDER_1
1661 * @arg @ref LL_RCC_AHB5_DIVIDER_2
1662 */
LL_RCC_GetAHB5Divider(void)1663 __STATIC_INLINE uint32_t LL_RCC_GetAHB5Divider(void)
1664 {
1665 return (uint32_t)(READ_BIT(RCC->CFGR4, RCC_CFGR4_HDIV5));
1666 }
1667 /**
1668 * @}
1669 */
1670
1671 /** @defgroup RCC_LL_EF_RADIO RADIO
1672 * @{
1673 */
1674
1675 /**
1676 * @brief Enable the 2.4 GHz RADIO baseband clock
1677 * @rmtoll RADIOENR BBCLKEN LL_RCC_RADIO_EnableBasebandClock
1678 * @retval None
1679 */
LL_RCC_RADIO_EnableBasebandClock(void)1680 __STATIC_INLINE void LL_RCC_RADIO_EnableBasebandClock(void)
1681 {
1682 SET_BIT(RCC->RADIOENR, RCC_RADIOENR_BBCLKEN);
1683 }
1684
1685 /**
1686 * @brief Disable the 2.4 GHz RADIO baseband clock
1687 * @rmtoll RADIOENR BBCLKEN LL_RCC_RADIO_DisableBasebandClock
1688 * @retval None
1689 */
LL_RCC_RADIO_DisableBasebandClock(void)1690 __STATIC_INLINE void LL_RCC_RADIO_DisableBasebandClock(void)
1691 {
1692 CLEAR_BIT(RCC->RADIOENR, RCC_RADIOENR_BBCLKEN);
1693 }
1694
1695 /**
1696 * @brief Check if 2.4 GHz RADIO baseband clock is enabled
1697 * @rmtoll RADIOENR BBCLKEN LL_RCC_RADIO_IsEnabledBasebandClock
1698 * @retval State of bit (1 or 0).
1699 */
LL_RCC_RADIO_IsEnabledBasebandClock(void)1700 __STATIC_INLINE uint32_t LL_RCC_RADIO_IsEnabledBasebandClock(void)
1701 {
1702 return ((READ_BIT(RCC->RADIOENR, RCC_RADIOENR_BBCLKEN) == RCC_RADIOENR_BBCLKEN) ? 1UL : 0UL);
1703 }
1704
1705 /**
1706 * @brief Disable the 2.4 GHz RADIO bus clock and HSE32 oscillator by 2.4 GHz RADIO sleep timer wakeup event
1707 * @rmtoll RADIOENR STRADIOCLKON LL_RCC_RADIO_DisableSleepTimerClock
1708 * @retval None
1709 */
LL_RCC_RADIO_DisableSleepTimerClock(void)1710 __STATIC_INLINE void LL_RCC_RADIO_DisableSleepTimerClock(void)
1711 {
1712 CLEAR_BIT(RCC->RADIOENR, RCC_RADIOENR_STRADIOCLKON);
1713 }
1714
1715 /**
1716 * @brief Check if 2.4 GHz RADIO bus clock and HSE32 oscillator are enabled by 2.4 GHz RADIO sleep timer wakeup event
1717 * @rmtoll RADIOENR STRADIOCLKON LL_RCC_RADIO_IsEnabledSleepTimerClock
1718 * @retval State of bit (1 or 0).
1719 */
LL_RCC_RADIO_IsEnabledSleepTimerClock(void)1720 __STATIC_INLINE uint32_t LL_RCC_RADIO_IsEnabledSleepTimerClock(void)
1721 {
1722 return ((READ_BIT(RCC->RADIOENR, RCC_RADIOENR_STRADIOCLKON) == RCC_RADIOENR_STRADIOCLKON) ? 1UL : 0UL);
1723 }
1724
1725 /**
1726 * @brief Check if 2.4 GHz RADIO bus clock is ready
1727 * @rmtoll RADIOENR RADIOCLKRDY LL_RCC_RADIO_IsBusClockReady
1728 * @retval State of bit (1 or 0).
1729 */
LL_RCC_RADIO_IsBusClockReady(void)1730 __STATIC_INLINE uint32_t LL_RCC_RADIO_IsBusClockReady(void)
1731 {
1732 return ((READ_BIT(RCC->RADIOENR, RCC_RADIOENR_RADIOCLKRDY) == RCC_RADIOENR_RADIOCLKRDY) ? 1UL : 0UL);
1733 }
1734
1735 /**
1736 * @brief Set the 2.4 GHz RADIO sleep timer kernel clock
1737 * @rmtoll BDCR1 RADIOSTSEL LL_RCC_RADIO_SetSleepTimerClockSource
1738 * @param Source This parameter can be one of the following values:
1739 * @arg @ref LL_RCC_RADIOSLEEPSOURCE_NONE
1740 * @arg @ref LL_RCC_RADIOSLEEPSOURCE_LSE
1741 * @arg @ref LL_RCC_RADIOSLEEPSOURCE_LSI (*)
1742 * @arg @ref LL_RCC_RADIOSLEEPSOURCE_HSE_DIV1000
1743 *
1744 * (*) value not defined in all devices.
1745 * @retval None
1746 */
LL_RCC_RADIO_SetSleepTimerClockSource(uint32_t Source)1747 __STATIC_INLINE void LL_RCC_RADIO_SetSleepTimerClockSource(uint32_t Source)
1748 {
1749 MODIFY_REG(RCC->BDCR1, RCC_BDCR1_RADIOSTSEL, Source);
1750 }
1751
1752 /**
1753 * @brief Get the 2.4 GHz RADIO sleep timer kernel clock
1754 * @rmtoll BDCR1 RADIOSTSEL LL_RCC_RADIO_GetSleepTimerClockSource
1755 * @retval Returned value can be one of the following values:
1756 * @arg @ref LL_RCC_RADIOSLEEPSOURCE_NONE
1757 * @arg @ref LL_RCC_RADIOSLEEPSOURCE_LSE
1758 * @arg @ref LL_RCC_RADIOSLEEPSOURCE_LSI (*)
1759 * @arg @ref LL_RCC_RADIOSLEEPSOURCE_HSE_DIV1000
1760 *
1761 * (*) value not defined in all devices.
1762 */
LL_RCC_RADIO_GetSleepTimerClockSource(void)1763 __STATIC_INLINE uint32_t LL_RCC_RADIO_GetSleepTimerClockSource(void)
1764 {
1765 return (uint32_t)(READ_BIT(RCC->BDCR1, RCC_BDCR1_RADIOSTSEL));
1766 }
1767
1768 /**
1769 * @}
1770 */
1771
1772 /** @defgroup RCC_LL_EF_MCO MCO
1773 * @{
1774 */
1775
1776 /**
1777 * @brief Configure MCOx
1778 * @rmtoll CFGR1 MCOSEL LL_RCC_ConfigMCO\n
1779 * CFGR1 MCOPRE LL_RCC_ConfigMCO
1780 * @param MCOxSource This parameter can be one of the following values:
1781 * @arg @ref LL_RCC_MCO1SOURCE_NOCLOCK
1782 * @arg @ref LL_RCC_MCO1SOURCE_SYSCLK
1783 * @arg @ref LL_RCC_MCO1SOURCE_HSI
1784 * @arg @ref LL_RCC_MCO1SOURCE_HSE
1785 * @arg @ref LL_RCC_MCO1SOURCE_PLL1R
1786 * @arg @ref LL_RCC_MCO1SOURCE_PLL1Q
1787 * @arg @ref LL_RCC_MCO1SOURCE_PLL1P
1788 * @arg @ref LL_RCC_MCO1SOURCE_LSI
1789 * @arg @ref LL_RCC_MCO1SOURCE_LSE
1790 * @arg @ref LL_RCC_MCO1SOURCE_HCLK5
1791 * @param MCOxPrescaler This parameter can be one of the following values:
1792 * @arg @ref LL_RCC_MCO1_DIV_1
1793 * @arg @ref LL_RCC_MCO1_DIV_2
1794 * @arg @ref LL_RCC_MCO1_DIV_4
1795 * @arg @ref LL_RCC_MCO1_DIV_8
1796 * @arg @ref LL_RCC_MCO1_DIV_16
1797 * @retval None
1798 */
LL_RCC_ConfigMCO(uint32_t MCOxSource,uint32_t MCOxPrescaler)1799 __STATIC_INLINE void LL_RCC_ConfigMCO(uint32_t MCOxSource, uint32_t MCOxPrescaler)
1800 {
1801 MODIFY_REG(RCC->CFGR1, RCC_CFGR1_MCOSEL | RCC_CFGR1_MCOPRE, MCOxSource | MCOxPrescaler);
1802 }
1803
1804 /**
1805 * @}
1806 */
1807
1808 /** @defgroup RCC_LL_EF_Peripheral_Clock_Source Peripheral Clock Source
1809 * @{
1810 */
1811
1812 /**
1813 * @brief Configure USARTx clock source
1814 * @rmtoll CCIPR1 USART1SEL LL_RCC_SetUSARTClockSource\n
1815 * CCIPR1 USART2SEL LL_RCC_SetUSARTClockSource\n
1816 * @param USARTxSource This parameter can be one of the following values:
1817 * @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK2
1818 * @arg @ref LL_RCC_USART1_CLKSOURCE_SYSCLK
1819 * @arg @ref LL_RCC_USART1_CLKSOURCE_HSI
1820 * @arg @ref LL_RCC_USART1_CLKSOURCE_LSE
1821 * @arg @ref LL_RCC_USART2_CLKSOURCE_PCLK1
1822 * @arg @ref LL_RCC_USART2_CLKSOURCE_SYSCLK
1823 * @arg @ref LL_RCC_USART2_CLKSOURCE_HSI
1824 * @arg @ref LL_RCC_USART2_CLKSOURCE_LSE
1825 * @retval None
1826 */
LL_RCC_SetUSARTClockSource(uint32_t USARTxSource)1827 __STATIC_INLINE void LL_RCC_SetUSARTClockSource(uint32_t USARTxSource)
1828 {
1829 MODIFY_REG(RCC->CCIPR1, USARTxSource >> 16U, (USARTxSource & 0x0000FFFFU));
1830 }
1831
1832 /**
1833 * @brief Configure LPUARTx clock source
1834 * @rmtoll CCIPR3 LPUART1SEL LL_RCC_SetLPUARTClockSource
1835 * @param LPUARTxSource This parameter can be one of the following values:
1836 * @arg @ref LL_RCC_LPUART1_CLKSOURCE_PCLK7
1837 * @arg @ref LL_RCC_LPUART1_CLKSOURCE_SYSCLK
1838 * @arg @ref LL_RCC_LPUART1_CLKSOURCE_HSI
1839 * @arg @ref LL_RCC_LPUART1_CLKSOURCE_LSE
1840 * @retval None
1841 */
LL_RCC_SetLPUARTClockSource(uint32_t LPUARTxSource)1842 __STATIC_INLINE void LL_RCC_SetLPUARTClockSource(uint32_t LPUARTxSource)
1843 {
1844 MODIFY_REG(RCC->CCIPR3, RCC_CCIPR3_LPUART1SEL, LPUARTxSource);
1845 }
1846
1847 /**
1848 * @brief Configure I2Cx clock source
1849 * @rmtoll CCIPR1 I2C1SEL LL_RCC_SetI2CClockSource\n
1850 * CCIPR3 I2C3SEL LL_RCC_SetI2CClockSource\n
1851 * @param I2CxSource This parameter can be one of the following values:
1852 * @arg @ref LL_RCC_I2C1_CLKSOURCE_PCLK1
1853 * @arg @ref LL_RCC_I2C1_CLKSOURCE_SYSCLK
1854 * @arg @ref LL_RCC_I2C1_CLKSOURCE_HSI
1855 * @arg @ref LL_RCC_I2C3_CLKSOURCE_PCLK7
1856 * @arg @ref LL_RCC_I2C3_CLKSOURCE_SYSCLK
1857 * @arg @ref LL_RCC_I2C3_CLKSOURCE_HSI
1858 * @retval None
1859 */
LL_RCC_SetI2CClockSource(uint32_t I2CxSource)1860 __STATIC_INLINE void LL_RCC_SetI2CClockSource(uint32_t I2CxSource)
1861 {
1862 __IO uint32_t *reg = (__IO uint32_t *)(uint32_t)(RCC_BASE + 0xE0U + (I2CxSource >> 24U));
1863 MODIFY_REG(*reg, 3U << (((I2CxSource & 0x00FF0000U) >> 16U) & 0x1FU), ((I2CxSource & 0x000000FFU) << (((I2CxSource & 0x00FF0000U) >> 16U) & 0x1FU)));
1864 }
1865
1866 /**
1867 * @brief Configure SPIx clock source
1868 * @rmtoll CCIPR1 SPI1SEL LL_RCC_SetSPIClockSource\n
1869 * CCIPR3 SPI3SEL LL_RCC_SetSPIClockSource\n
1870 * @param SPIxSource This parameter can be one of the following values:
1871 * @arg @ref LL_RCC_SPI1_CLKSOURCE_PCLK2
1872 * @arg @ref LL_RCC_SPI1_CLKSOURCE_SYSCLK
1873 * @arg @ref LL_RCC_SPI1_CLKSOURCE_HSI
1874 * @arg @ref LL_RCC_SPI3_CLKSOURCE_PCLK7
1875 * @arg @ref LL_RCC_SPI3_CLKSOURCE_SYSCLK
1876 * @arg @ref LL_RCC_SPI3_CLKSOURCE_HSI
1877 * @retval None
1878 */
LL_RCC_SetSPIClockSource(uint32_t SPIxSource)1879 __STATIC_INLINE void LL_RCC_SetSPIClockSource(uint32_t SPIxSource)
1880 {
1881 __IO uint32_t *reg = (__IO uint32_t *)(uint32_t)(RCC_BASE + 0xE0U + (SPIxSource >> 24U));
1882 MODIFY_REG(*reg, 3U << (((SPIxSource & 0x00FF0000U) >> 16U) & 0x1FU), ((SPIxSource & 0x000000FFU) << (((SPIxSource & 0x00FF0000U) >> 16U) & 0x1FU)));
1883 }
1884
1885 /**
1886 * @brief Configure LPTIMx clock source
1887 * @rmtoll CCIPR3 LPTIM1SEL LL_RCC_SetLPTIMClockSource\n
1888 * CCIPR1 LPTIM2SEL LL_RCC_SetLPTIMClockSource\n
1889 * @param LPTIMxSource This parameter can be one of the following values:
1890 * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK7
1891 * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI
1892 * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_HSI
1893 * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE
1894 * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PCLK1
1895 * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSI
1896 * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_HSI
1897 * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSE
1898 * @retval None
1899 */
LL_RCC_SetLPTIMClockSource(uint32_t LPTIMxSource)1900 __STATIC_INLINE void LL_RCC_SetLPTIMClockSource(uint32_t LPTIMxSource)
1901 {
1902 __IO uint32_t *reg = (__IO uint32_t *)(uint32_t)(RCC_BASE + 0xE0U + (LPTIMxSource >> 24U));
1903 MODIFY_REG(*reg, 3U << (((LPTIMxSource & 0x00FF0000U) >> 16U) & 0x1FU), ((LPTIMxSource & 0x000000FFU) << (((LPTIMxSource & 0x00FF0000U) >> 16U) & 0x1FU)));
1904 }
1905
1906
1907 /**
1908 * @brief Configure SAIx clock source
1909 * @rmtoll CCIPR2 SAI1SEL LL_RCC_SetSAIClockSource\n
1910 * @param SAIxSource This parameter can be one of the following values:
1911 * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL1P(*)
1912 * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL1Q(*)
1913 * @arg @ref LL_RCC_SAI1_CLKSOURCE_SYSCLK(*)
1914 * @arg @ref LL_RCC_SAI1_CLKSOURCE_PIN(*)
1915 * @arg @ref LL_RCC_SAI1_CLKSOURCE_HSI(*)
1916 * (*) Feature not available on all devices of the family
1917 * @retval None
1918 */
LL_RCC_SetSAIClockSource(uint32_t SAIxSource)1919 __STATIC_INLINE void LL_RCC_SetSAIClockSource(uint32_t SAIxSource)
1920 {
1921 MODIFY_REG(RCC->CCIPR2, (SAIxSource >> 16U), (SAIxSource & 0x0000FFFFU));
1922 }
1923
1924 /**
1925 * @brief Configure RNG clock source
1926 * @rmtoll CCIPR2 RNGSEL LL_RCC_SetRNGClockSource
1927 * @param RNGxSource This parameter can be one of the following values:
1928 * @arg @ref LL_RCC_RNG_CLKSOURCE_LSE
1929 * @arg @ref LL_RCC_RNG_CLKSOURCE_LSI
1930 * @arg @ref LL_RCC_RNG_CLKSOURCE_HSI
1931 * @arg @ref LL_RCC_RNG_CLKSOURCE_PLL1Q_DIV2
1932 * @retval None
1933 */
LL_RCC_SetRNGClockSource(uint32_t RNGxSource)1934 __STATIC_INLINE void LL_RCC_SetRNGClockSource(uint32_t RNGxSource)
1935 {
1936 MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_RNGSEL, RNGxSource);
1937 }
1938
1939 /**
1940 * @brief Configure ADC clock source
1941 * @rmtoll CCIPR3 ADCSEL LL_RCC_SetADCClockSource
1942 * @param ADC4Source This parameter can be one of the following values:
1943 * @arg @ref LL_RCC_ADC_CLKSOURCE_HCLK
1944 * @arg @ref LL_RCC_ADC_CLKSOURCE_SYSCLK
1945 * @arg @ref LL_RCC_ADC_CLKSOURCE_PLL1P
1946 * @arg @ref LL_RCC_ADC_CLKSOURCE_HSE
1947 * @arg @ref LL_RCC_ADC_CLKSOURCE_HSI
1948 * @retval None
1949 */
LL_RCC_SetADCClockSource(uint32_t ADC4Source)1950 __STATIC_INLINE void LL_RCC_SetADCClockSource(uint32_t ADC4Source)
1951 {
1952 MODIFY_REG(RCC->CCIPR3, RCC_CCIPR3_ADCSEL, ADC4Source);
1953 }
1954
1955
1956 /**
1957 * @brief Get USARTx clock source
1958 * @rmtoll CCIPR1 USART1SEL LL_RCC_GetUSARTClockSource\n
1959 * CCIPR1 USART2SEL LL_RCC_GetUSARTClockSource\n
1960 * @param USARTx This parameter can be one of the following values:
1961 * @arg @ref LL_RCC_USART1_CLKSOURCE
1962 * @arg @ref LL_RCC_USART2_CLKSOURCE
1963 * @retval Returned value can be one of the following values:
1964 * @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK2
1965 * @arg @ref LL_RCC_USART1_CLKSOURCE_SYSCLK
1966 * @arg @ref LL_RCC_USART1_CLKSOURCE_HSI
1967 * @arg @ref LL_RCC_USART1_CLKSOURCE_LSE
1968 * @arg @ref LL_RCC_USART2_CLKSOURCE_PCLK1
1969 * @arg @ref LL_RCC_USART2_CLKSOURCE_SYSCLK
1970 * @arg @ref LL_RCC_USART2_CLKSOURCE_HSI
1971 * @arg @ref LL_RCC_USART2_CLKSOURCE_LSE
1972 */
LL_RCC_GetUSARTClockSource(uint32_t USARTx)1973 __STATIC_INLINE uint32_t LL_RCC_GetUSARTClockSource(uint32_t USARTx)
1974 {
1975 return (uint32_t)(READ_BIT(RCC->CCIPR1, USARTx) | (USARTx << 16U));
1976 }
1977
1978 /**
1979 * @brief Get LPUARTx clock source
1980 * @rmtoll CCIPR3 LPUART1SEL LL_RCC_GetLPUARTClockSource
1981 * @param LPUARTx This parameter can be one of the following values:
1982 * @arg @ref LL_RCC_LPUART1_CLKSOURCE
1983 * @retval Returned value can be one of the following values:
1984 * @arg @ref LL_RCC_LPUART1_CLKSOURCE_PCLK7
1985 * @arg @ref LL_RCC_LPUART1_CLKSOURCE_SYSCLK
1986 * @arg @ref LL_RCC_LPUART1_CLKSOURCE_HSI
1987 * @arg @ref LL_RCC_LPUART1_CLKSOURCE_LSE
1988 */
LL_RCC_GetLPUARTClockSource(uint32_t LPUARTx)1989 __STATIC_INLINE uint32_t LL_RCC_GetLPUARTClockSource(uint32_t LPUARTx)
1990 {
1991 return (uint32_t)(READ_BIT(RCC->CCIPR3, LPUARTx));
1992 }
1993
1994 /**
1995 * @brief Get I2Cx clock source
1996 * @rmtoll CCIPR1 I2C1SEL LL_RCC_GetI2CClockSource\n
1997 * CCIPR3 I2C3SEL LL_RCC_GetI2CClockSource\n
1998 * @param I2Cx This parameter can be one of the following values:
1999 * @arg @ref LL_RCC_I2C1_CLKSOURCE
2000 * @arg @ref LL_RCC_I2C3_CLKSOURCE
2001 * @retval Returned value can be one of the following values:
2002 * @arg @ref LL_RCC_I2C1_CLKSOURCE_PCLK1
2003 * @arg @ref LL_RCC_I2C1_CLKSOURCE_SYSCLK
2004 * @arg @ref LL_RCC_I2C1_CLKSOURCE_HSI
2005 * @arg @ref LL_RCC_I2C3_CLKSOURCE_PCLK7
2006 * @arg @ref LL_RCC_I2C3_CLKSOURCE_SYSCLK
2007 * @arg @ref LL_RCC_I2C3_CLKSOURCE_HSI
2008 */
LL_RCC_GetI2CClockSource(uint32_t I2Cx)2009 __STATIC_INLINE uint32_t LL_RCC_GetI2CClockSource(uint32_t I2Cx)
2010 {
2011 __IO const uint32_t *reg = (__IO uint32_t *)(uint32_t)(RCC_BASE + 0xE0U + (I2Cx >> 24U));
2012 return (uint32_t)((READ_BIT(*reg, (3UL << (((I2Cx & 0x00FF0000UL) >> 16U) & 0x1FUL))) >> (((I2Cx & 0x00FF0000UL) >> 16U) & 0x1FUL)) | (I2Cx & 0xFFFF0000UL));
2013 }
2014
2015 /**
2016 * @brief Get SPIx clock source
2017 * @rmtoll CCIPR1 SPI1SEL LL_RCC_GetSPIClockSource\n
2018 * CCIPR3 SPI3SEL LL_RCC_GetSPIClockSource
2019 * @param SPIx This parameter can be one of the following values:
2020 * @arg @ref LL_RCC_SPI1_CLKSOURCE
2021 * @arg @ref LL_RCC_SPI3_CLKSOURCE
2022 * @retval Returned value can be one of the following values:
2023 * @arg @ref LL_RCC_SPI1_CLKSOURCE_PCLK2
2024 * @arg @ref LL_RCC_SPI1_CLKSOURCE_SYSCLK
2025 * @arg @ref LL_RCC_SPI1_CLKSOURCE_HSI
2026 * @arg @ref LL_RCC_SPI3_CLKSOURCE_PCLK7
2027 * @arg @ref LL_RCC_SPI3_CLKSOURCE_SYSCLK
2028 * @arg @ref LL_RCC_SPI3_CLKSOURCE_HSI
2029 */
LL_RCC_GetSPIClockSource(uint32_t SPIx)2030 __STATIC_INLINE uint32_t LL_RCC_GetSPIClockSource(uint32_t SPIx)
2031 {
2032 __IO const uint32_t *reg = (__IO uint32_t *)(uint32_t)(RCC_BASE + 0xE0U + (SPIx >> 24U));
2033 return (uint32_t)((READ_BIT(*reg, (3UL << (((SPIx & 0x00FF0000UL) >> 16U) & 0x1FUL))) >> (((SPIx & 0x00FF0000UL) >> 16U) & 0x1FUL)) | (SPIx & 0xFFFF0000UL));
2034 }
2035
2036 /**
2037 * @brief Get LPTIMx clock source
2038 * @rmtoll CCIPR3 LPTIM1SEL LL_RCC_GetLPTIMClockSource\n
2039 * CCIPR1 LPTIM2SEL LL_RCC_GetLPTIMClockSource\n
2040 * @param LPTIMx This parameter can be one of the following values:
2041 * @arg @ref LL_RCC_LPTIM1_CLKSOURCE
2042 * @arg @ref LL_RCC_LPTIM2_CLKSOURCE
2043 * @retval Returned value can be one of the following values:
2044 * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK7
2045 * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI
2046 * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_HSI
2047 * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE
2048 * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_PCLK1
2049 * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSI
2050 * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_HSI
2051 * @arg @ref LL_RCC_LPTIM2_CLKSOURCE_LSE
2052 */
LL_RCC_GetLPTIMClockSource(uint32_t LPTIMx)2053 __STATIC_INLINE uint32_t LL_RCC_GetLPTIMClockSource(uint32_t LPTIMx)
2054 {
2055 __IO const uint32_t *reg = (__IO uint32_t *)(uint32_t)(RCC_BASE + 0xE0U + (LPTIMx >> 24U));
2056 return (uint32_t)((READ_BIT(*reg, (3UL << (((LPTIMx & 0x00FF0000UL) >> 16U) & 0x1FUL))) >> (((LPTIMx & 0x00FF0000UL) >> 16U) & 0x1FUL)) | (LPTIMx & 0xFFFF0000UL));
2057 }
2058
2059 /**
2060 * @brief Set Tim Input capture clock source
2061 * @rmtoll CCIPR1 TIMICSEL LL_RCC_SetTIMICClockSource
2062 * @param TIMICSource This parameter can be one of the following combined values:
2063 * @arg @ref LL_RCC_TIMIC_CLKSOURCE_NONE
2064 * @arg @ref LL_RCC_TIMIC_CLKSOURCE_HSI_DIV256
2065 * @note HSI clock without division is also available when TIMICSEL[2] is 1.
2066 * @retval None
2067 */
LL_RCC_SetTIMICClockSource(uint32_t TIMICSource)2068 __STATIC_INLINE void LL_RCC_SetTIMICClockSource(uint32_t TIMICSource)
2069 {
2070 MODIFY_REG(RCC->CCIPR1, RCC_CCIPR1_TIMICSEL, TIMICSource);
2071 }
2072
2073 /**
2074 * @brief Get Tim Input capture clock source
2075 * @rmtoll CCIPR1 TIMICSEL LL_RCC_GetTIMICClockSource
2076 * @retval Returned value can be one of the following combined values:
2077 * @arg @ref LL_RCC_TIMIC_CLKSOURCE_NONE
2078 * @arg @ref LL_RCC_TIMIC_CLKSOURCE_HSI_DIV256
2079 */
LL_RCC_GetTIMICClockSource(void)2080 __STATIC_INLINE uint32_t LL_RCC_GetTIMICClockSource(void)
2081 {
2082 return (uint32_t)(READ_BIT(RCC->CCIPR1, RCC_CCIPR1_TIMICSEL));
2083 }
2084
2085 /**
2086 * @brief Get SAIx clock source
2087 * @rmtoll CCIPR2 SAI1SEL LL_RCC_GetSAIClockSource\n
2088 * @param SAIx This parameter can be one of the following values:
2089 * @arg @ref LL_RCC_SAI1_CLKSOURCE(*)
2090 * @retval Returned value can be one of the following values:
2091 * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL1P(*)
2092 * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL1Q(*)
2093 * @arg @ref LL_RCC_SAI1_CLKSOURCE_SYSCLK(*)
2094 * @arg @ref LL_RCC_SAI1_CLKSOURCE_PIN(*)
2095 * @arg @ref LL_RCC_SAI1_CLKSOURCE_HSI(*)
2096 * (*) Feature not available on all devices of the family
2097 */
LL_RCC_GetSAIClockSource(uint32_t SAIx)2098 __STATIC_INLINE uint32_t LL_RCC_GetSAIClockSource(uint32_t SAIx)
2099 {
2100 return (uint32_t)(READ_BIT(RCC->CCIPR2, SAIx) | (SAIx << 16U));
2101 }
2102
2103 /**
2104 * @brief Get RNGx clock source
2105 * @rmtoll CCIPR2 RNGSEL LL_RCC_GetRNGClockSource
2106 * @param RNGx This parameter can be one of the following values:
2107 * @arg @ref LL_RCC_RNG_CLKSOURCE
2108 * @retval Returned value can be one of the following values:
2109 * @arg @ref LL_RCC_RNG_CLKSOURCE_LSE
2110 * @arg @ref LL_RCC_RNG_CLKSOURCE_LSI
2111 * @arg @ref LL_RCC_RNG_CLKSOURCE_HSI
2112 * @arg @ref LL_RCC_RNG_CLKSOURCE_PLL1Q_DIV2
2113 */
LL_RCC_GetRNGClockSource(uint32_t RNGx)2114 __STATIC_INLINE uint32_t LL_RCC_GetRNGClockSource(uint32_t RNGx)
2115 {
2116 return (uint32_t)(READ_BIT(RCC->CCIPR2, RNGx));
2117 }
2118
2119 /**
2120 * @brief Get ADCx clock source
2121 * @rmtoll CCIPR3 ADCSEL LL_RCC_GetADCClockSource
2122 * @param ADCx This parameter can be one of the following values:
2123 * @arg @ref LL_RCC_ADC_CLKSOURCE
2124 * @retval Returned value can be one of the following values:
2125 * @arg @ref LL_RCC_ADC_CLKSOURCE_HCLK
2126 * @arg @ref LL_RCC_ADC_CLKSOURCE_SYSCLK
2127 * @arg @ref LL_RCC_ADC_CLKSOURCE_PLL1P
2128 * @arg @ref LL_RCC_ADC_CLKSOURCE_HSE
2129 * @arg @ref LL_RCC_ADC_CLKSOURCE_HSI
2130 */
LL_RCC_GetADCClockSource(uint32_t ADCx)2131 __STATIC_INLINE uint32_t LL_RCC_GetADCClockSource(uint32_t ADCx)
2132 {
2133 return (uint32_t)(READ_BIT(RCC->CCIPR3, ADCx));
2134 }
2135
2136
2137 /**
2138 * @}
2139 */
2140
2141 /** @defgroup RCC_LL_EF_RTC RTC
2142 * @{
2143 */
2144
2145 /**
2146 * @brief Set RTC Clock Source
2147 * @note Once the RTC clock source has been selected, it cannot be changed anymore unless
2148 * the Backup domain is reset, or unless a failure is detected on LSE (LSECSSD is
2149 * set). The BDRST bit can be used to reset them.
2150 * @rmtoll BDCR1 RTCSEL LL_RCC_SetRTCClockSource
2151 * @param Source This parameter can be one of the following values:
2152 * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
2153 * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
2154 * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
2155 * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV32
2156 * @retval None
2157 */
LL_RCC_SetRTCClockSource(uint32_t Source)2158 __STATIC_INLINE void LL_RCC_SetRTCClockSource(uint32_t Source)
2159 {
2160 MODIFY_REG(RCC->BDCR1, RCC_BDCR1_RTCSEL, Source);
2161 }
2162
2163 /**
2164 * @brief Get RTC Clock Source
2165 * @rmtoll BDCR1 RTCSEL LL_RCC_GetRTCClockSource
2166 * @retval Returned value can be one of the following values:
2167 * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
2168 * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
2169 * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
2170 * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE_DIV32
2171 */
LL_RCC_GetRTCClockSource(void)2172 __STATIC_INLINE uint32_t LL_RCC_GetRTCClockSource(void)
2173 {
2174 return (uint32_t)(READ_BIT(RCC->BDCR1, RCC_BDCR1_RTCSEL));
2175 }
2176
2177 /**
2178 * @brief Force the Backup domain reset
2179 * @rmtoll BDCR1 BDRST LL_RCC_ForceBackupDomainReset
2180 * @retval None
2181 */
LL_RCC_ForceBackupDomainReset(void)2182 __STATIC_INLINE void LL_RCC_ForceBackupDomainReset(void)
2183 {
2184 SET_BIT(RCC->BDCR1, RCC_BDCR1_BDRST);
2185 }
2186
2187 /**
2188 * @brief Release the Backup domain reset
2189 * @rmtoll BDCR1 BDRST LL_RCC_ReleaseBackupDomainReset
2190 * @retval None
2191 */
LL_RCC_ReleaseBackupDomainReset(void)2192 __STATIC_INLINE void LL_RCC_ReleaseBackupDomainReset(void)
2193 {
2194 CLEAR_BIT(RCC->BDCR1, RCC_BDCR1_BDRST);
2195 }
2196
2197 /**
2198 * @}
2199 */
2200
2201 /** @defgroup RCC_LL_EF_PLL1 PLL1
2202 * @{
2203 */
2204
2205 /**
2206 * @brief Enable PLL1
2207 * @rmtoll CR PLL1ON LL_RCC_PLL1_Enable
2208 * @retval None
2209 */
LL_RCC_PLL1_Enable(void)2210 __STATIC_INLINE void LL_RCC_PLL1_Enable(void)
2211 {
2212 SET_BIT(RCC->CR, RCC_CR_PLL1ON);
2213 }
2214
2215 /**
2216 * @brief Disable PLL1
2217 * @note Cannot be disabled if the PLL1 clock is used as the system clock
2218 * @rmtoll CR PLL1ON LL_RCC_PLL1_Disable
2219 * @retval None
2220 */
LL_RCC_PLL1_Disable(void)2221 __STATIC_INLINE void LL_RCC_PLL1_Disable(void)
2222 {
2223 CLEAR_BIT(RCC->CR, RCC_CR_PLL1ON);
2224 }
2225
2226 /**
2227 * @brief Check if PLL1 Ready
2228 * @rmtoll CR PLL1RDY LL_RCC_PLL1_IsReady
2229 * @retval State of bit (1 or 0).
2230 */
LL_RCC_PLL1_IsReady(void)2231 __STATIC_INLINE uint32_t LL_RCC_PLL1_IsReady(void)
2232 {
2233 return ((READ_BIT(RCC->CR, RCC_CR_PLL1RDY) == RCC_CR_PLL1RDY) ? 1UL : 0UL);
2234 }
2235
2236 /**
2237 * @brief Enable prescaler division on PLL1RCLK for SYSCLK
2238 * @rmtoll PLL1CFGR PLL1RCLKPRE LL_RCC_PLL1_EnablePLL1RCLKDivision
2239 * @retval None
2240 */
LL_RCC_PLL1_EnablePLL1RCLKDivision(void)2241 __STATIC_INLINE void LL_RCC_PLL1_EnablePLL1RCLKDivision(void)
2242 {
2243 SET_BIT(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1RCLKPRE);
2244 }
2245
2246 /**
2247 * @brief Disable PLL1RCLK for SYSCLK prescaler division
2248 * @rmtoll PLL1CFGR PLL1RCLKPRE LL_RCC_PLL1_DisablePLL1RCLKDivision
2249 * @retval None
2250 */
LL_RCC_PLL1_DisablePLL1RCLKDivision(void)2251 __STATIC_INLINE void LL_RCC_PLL1_DisablePLL1RCLKDivision(void)
2252 {
2253 CLEAR_BIT(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1RCLKPRE);
2254 }
2255
2256 /**
2257 * @brief Set the division step of PLL1RCLK clock for SYSCLK
2258 * @rmtoll PLL1CFGR PLL1RCLKPRESTEP LL_RCC_PLL1_SetPLL1RCLKDivisionStep
2259 * @param Step This parameter can be one of the following values:
2260 * @arg @ref LL_RCC_PLL1RCLK_2_STEP_DIV
2261 * @arg @ref LL_RCC_PLL1RCLK_3_STEP_DIV
2262 * @retval None
2263 */
LL_RCC_PLL1_SetPLL1RCLKDivisionStep(uint32_t Step)2264 __STATIC_INLINE void LL_RCC_PLL1_SetPLL1RCLKDivisionStep(uint32_t Step)
2265 {
2266 MODIFY_REG(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1RCLKPRESTEP, Step);
2267 }
2268
2269 /**
2270 * @brief Get the division step of PLL1RCLK clock for SYSCLK
2271 * @rmtoll PLL1CFGR PLL1RCLKPRESTEP LL_RCC_PLL1_GetPLL1RCLKDivisionStep
2272 * @retval Returned value can be one of the following values:
2273 * @arg @ref LL_RCC_PLL1RCLK_2_STEP_DIV
2274 * @arg @ref LL_RCC_PLL1RCLK_3_STEP_DIV
2275 */
LL_RCC_PLL1_GetPLL1RCLKDivisionStep(void)2276 __STATIC_INLINE uint32_t LL_RCC_PLL1_GetPLL1RCLKDivisionStep(void)
2277 {
2278 return (uint32_t)(READ_BIT(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1RCLKPRESTEP));
2279 }
2280
2281 /**
2282 * @brief Check if prescaler division on PLL1RCLK for SYSCLK is ready
2283 * @rmtoll PLL1CFGR PLL1RCLKPRERDY LL_RCC_PLL1_IsPLL1RCLKDivisionReady
2284 * @retval State of bit (1 or 0).
2285 */
LL_RCC_PLL1_IsPLL1RCLKDivisionReady(void)2286 __STATIC_INLINE uint32_t LL_RCC_PLL1_IsPLL1RCLKDivisionReady(void)
2287 {
2288 return ((READ_BIT(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1RCLKPRERDY) == RCC_PLL1CFGR_PLL1RCLKPRERDY) ? 1UL : 0UL);
2289 }
2290
2291 /**
2292 * @brief Configure PLL1R used for SYSCLK Domain
2293 * @note PLL1 Source, PLLM, PLLN and PLLR can be written only when PLL1 is disabled.
2294 * @note PLLN/PLLR can be written only when PLL1 is disabled.
2295 * @rmtoll PLL1CFGR PLL1SRC LL_RCC_PLL1_ConfigDomain_PLL1R\n
2296 * PLL1CFGR PLL1M LL_RCC_PLL1_ConfigDomain_PLL1R\n
2297 * PLL1DIVR PLL1N LL_RCC_PLL1_ConfigDomain_PLL1R\n
2298 * PLL1DIVR PLL1R LL_RCC_PLL1_ConfigDomain_PLL1R
2299 * @param Source This parameter can be one of the following values:
2300 * @arg @ref LL_RCC_PLL1SOURCE_NONE
2301 * @arg @ref LL_RCC_PLL1SOURCE_HSI
2302 * @arg @ref LL_RCC_PLL1SOURCE_HSE
2303 * @param PLLM parameter can be a value between 1 and 16
2304 * @param PLLR parameter can be a value between 1 and 128
2305 * @param PLLN parameter can be a value between 4 and 512
2306 * @retval None
2307 */
LL_RCC_PLL1_ConfigDomain_PLL1R(uint32_t Source,uint32_t PLLM,uint32_t PLLN,uint32_t PLLR)2308 __STATIC_INLINE void LL_RCC_PLL1_ConfigDomain_PLL1R(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR)
2309 {
2310 MODIFY_REG(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1SRC | RCC_PLL1CFGR_PLL1M, Source | ((PLLM - 1UL) << RCC_PLL1CFGR_PLL1M_Pos));
2311 MODIFY_REG(RCC->PLL1DIVR, RCC_PLL1DIVR_PLL1N | RCC_PLL1DIVR_PLL1R, ((PLLN - 1UL) << RCC_PLL1DIVR_PLL1N_Pos) | ((PLLR - 1UL) << RCC_PLL1DIVR_PLL1R_Pos));
2312 }
2313
2314 /**
2315 * @brief Configure PLL1P
2316 * @note PLL1 Source, PLLM, PLLN and PLLPDIV can be written only when PLL1 is disabled.
2317 * @note This can be selected for ADC and SAI
2318 * @rmtoll PLL1CFGR PLL1SRC LL_RCC_PLL1_ConfigDomain_PLL1P\n
2319 * PLL1CFGR PLL1M LL_RCC_PLL1_ConfigDomain_PLL1P\n
2320 * PLL1DIVR PLL1N LL_RCC_PLL1_ConfigDomain_PLL1P\n
2321 * PLL1DIVR PLL1P LL_RCC_PLL1_ConfigDomain_PLL1P
2322 * @param Source This parameter can be one of the following values:
2323 * @arg @ref LL_RCC_PLL1SOURCE_NONE
2324 * @arg @ref LL_RCC_PLL1SOURCE_HSI
2325 * @arg @ref LL_RCC_PLL1SOURCE_HSE
2326 * @param PLLM parameter can be a value between 1 and 16
2327 * @param PLLN parameter can be a value between 4 and 512
2328 * @param PLLP parameter can be a value between 2 and 128
2329 * @retval None
2330 */
LL_RCC_PLL1_ConfigDomain_PLL1P(uint32_t Source,uint32_t PLLM,uint32_t PLLN,uint32_t PLLP)2331 __STATIC_INLINE void LL_RCC_PLL1_ConfigDomain_PLL1P(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP)
2332 {
2333 MODIFY_REG(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1SRC | RCC_PLL1CFGR_PLL1M, Source | ((PLLM - 1UL) << RCC_PLL1CFGR_PLL1M_Pos));
2334 MODIFY_REG(RCC->PLL1DIVR, RCC_PLL1DIVR_PLL1N | RCC_PLL1DIVR_PLL1P, ((PLLN - 1UL) << RCC_PLL1DIVR_PLL1N_Pos) | ((PLLP - 1UL) << RCC_PLL1DIVR_PLL1P_Pos));
2335 }
2336
2337 /**
2338 * @brief Configure PLL1Q
2339 * @note PLL1 Source, PLLM, PLLN and PLLQ can be written only when PLL1 is disabled.
2340 * @note This can be selected for RNG and SAI
2341 * @rmtoll PLL1CFGR PLL1SRC LL_RCC_PLL1_ConfigDomain_PLL1Q\n
2342 * PLL1CFGR PLL1M LL_RCC_PLL1_ConfigDomain_PLL1Q\n
2343 * PLL1DIVR PLL1N LL_RCC_PLL1_ConfigDomain_PLL1Q\n
2344 * PLL1DIVR PLL1Q LL_RCC_PLL1_ConfigDomain_PLL1Q
2345 * @param Source This parameter can be one of the following values:
2346 * @arg @ref LL_RCC_PLL1SOURCE_NONE
2347 * @arg @ref LL_RCC_PLL1SOURCE_HSI
2348 * @arg @ref LL_RCC_PLL1SOURCE_HSE
2349 * @param PLLM parameter can be a value between 1 and 16
2350 * @param PLLN parameter can be a value between 4 and 512
2351 * @param PLLQ parameter can be a value between 1 and 128
2352 * @retval None
2353 */
LL_RCC_PLL1_ConfigDomain_PLL1Q(uint32_t Source,uint32_t PLLM,uint32_t PLLN,uint32_t PLLQ)2354 __STATIC_INLINE void LL_RCC_PLL1_ConfigDomain_PLL1Q(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLQ)
2355 {
2356 MODIFY_REG(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1SRC | RCC_PLL1CFGR_PLL1M, Source | ((PLLM - 1UL) << RCC_PLL1CFGR_PLL1M_Pos));
2357 MODIFY_REG(RCC->PLL1DIVR, RCC_PLL1DIVR_PLL1N | RCC_PLL1DIVR_PLL1Q, ((PLLN - 1UL) << RCC_PLL1DIVR_PLL1N_Pos) | ((PLLQ - 1UL) << RCC_PLL1DIVR_PLL1Q_Pos));
2358 }
2359
2360 /**
2361 * @brief Configure PLL1 clock source
2362 * @rmtoll PLL1CFGR PLL1SRC LL_RCC_PLL1_SetMainSource
2363 * @param PLL1Source This parameter can be one of the following values:
2364 * @arg @ref LL_RCC_PLL1SOURCE_NONE
2365 * @arg @ref LL_RCC_PLL1SOURCE_HSI
2366 * @arg @ref LL_RCC_PLL1SOURCE_HSE
2367 * @retval None
2368 */
LL_RCC_PLL1_SetMainSource(uint32_t PLL1Source)2369 __STATIC_INLINE void LL_RCC_PLL1_SetMainSource(uint32_t PLL1Source)
2370 {
2371 MODIFY_REG(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1SRC, PLL1Source);
2372 }
2373
2374 /**
2375 * @brief Get the oscillator used as PLL1 clock source.
2376 * @rmtoll PLL1CFGR PLL1SRC LL_RCC_PLL1_GetMainSource
2377 * @retval Returned value can be one of the following values:
2378 * @arg @ref LL_RCC_PLL1SOURCE_NONE
2379 * @arg @ref LL_RCC_PLL1SOURCE_HSI
2380 * @arg @ref LL_RCC_PLL1SOURCE_HSE
2381 */
LL_RCC_PLL1_GetMainSource(void)2382 __STATIC_INLINE uint32_t LL_RCC_PLL1_GetMainSource(void)
2383 {
2384 return (uint32_t)(READ_BIT(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1SRC));
2385 }
2386
2387 /**
2388 * @brief Set PLL1 multiplication factor for VCO
2389 * @rmtoll PLL1DIVR PLL1N LL_RCC_PLL1_SetN
2390 * @param PLL1N parameter can be a value between 4 and 512
2391 */
LL_RCC_PLL1_SetN(uint32_t PLL1N)2392 __STATIC_INLINE void LL_RCC_PLL1_SetN(uint32_t PLL1N)
2393 {
2394 MODIFY_REG(RCC->PLL1DIVR, RCC_PLL1DIVR_PLL1N, (PLL1N - 1UL) << RCC_PLL1DIVR_PLL1N_Pos);
2395 }
2396
2397 /**
2398 * @brief Get PLL1 multiplication factor for VCO
2399 * @rmtoll PLL1DIVR PLL1N LL_RCC_PLL1_GetN
2400 * @retval Between 4 and 512
2401 */
LL_RCC_PLL1_GetN(void)2402 __STATIC_INLINE uint32_t LL_RCC_PLL1_GetN(void)
2403 {
2404 return (uint32_t)((READ_BIT(RCC->PLL1DIVR, RCC_PLL1DIVR_PLL1N) >> RCC_PLL1DIVR_PLL1N_Pos) + 1UL);
2405 }
2406
2407
2408 /**
2409 * @brief Set PLL1 division factor for PLL1P
2410 * @note Used for PLL1PCLK selected ADC and SAI
2411 * @rmtoll PLL1DIVR PLL1P LL_RCC_PLL1_SetP
2412 * @param PLL1P parameter can be a value between 2 and 128
2413 */
LL_RCC_PLL1_SetP(uint32_t PLL1P)2414 __STATIC_INLINE void LL_RCC_PLL1_SetP(uint32_t PLL1P)
2415 {
2416 MODIFY_REG(RCC->PLL1DIVR, RCC_PLL1DIVR_PLL1P, (PLL1P - 1UL) << RCC_PLL1DIVR_PLL1P_Pos);
2417 }
2418
2419 /**
2420 * @brief Get PLL1 division factor for PLL1P
2421 * @note Used for PLL1PCLK selected ADC and SAI
2422 * @rmtoll PLL1DIVR PLL1P LL_RCC_PLL1_GetP
2423 * @retval Between 2 and 128
2424 */
LL_RCC_PLL1_GetP(void)2425 __STATIC_INLINE uint32_t LL_RCC_PLL1_GetP(void)
2426 {
2427 return (uint32_t)((READ_BIT(RCC->PLL1DIVR, RCC_PLL1DIVR_PLL1P) >> RCC_PLL1DIVR_PLL1P_Pos) + 1UL);
2428 }
2429
2430
2431 /**
2432 * @brief Set PLL1 division factor for PLL1Q
2433 * @note Used for PLL1QCLK selected for RNG and SAI
2434 * @rmtoll PLL1DIVR PLL1Q LL_RCC_PLL1_SetQ
2435 * @param PLL1Q parameter can be a value between 1 and 128
2436 */
LL_RCC_PLL1_SetQ(uint32_t PLL1Q)2437 __STATIC_INLINE void LL_RCC_PLL1_SetQ(uint32_t PLL1Q)
2438 {
2439 MODIFY_REG(RCC->PLL1DIVR, RCC_PLL1DIVR_PLL1Q, (PLL1Q - 1UL) << RCC_PLL1DIVR_PLL1Q_Pos);
2440 }
2441
2442 /**
2443 * @brief Get PLL1 division factor for PLL1Q
2444 * @note Used for PLL1QCLK selected for RNG and SAI
2445 * @rmtoll PLL1DIVR PLL1Q LL_RCC_PLL1_GetQ
2446 * @retval Between 1 and 128
2447 */
LL_RCC_PLL1_GetQ(void)2448 __STATIC_INLINE uint32_t LL_RCC_PLL1_GetQ(void)
2449 {
2450 return (uint32_t)((READ_BIT(RCC->PLL1DIVR, RCC_PLL1DIVR_PLL1Q) >> RCC_PLL1DIVR_PLL1Q_Pos) + 1UL);
2451 }
2452
2453 /**
2454 * @brief Set PLL1 division factor for PLL1R
2455 * @note Used for PLL1RCLK selected for system clock
2456 * @rmtoll PLL1DIVR PLL1R LL_RCC_PLL1_SetR
2457 * @param PLL1R parameter can be a value between 1 and 128
2458 */
LL_RCC_PLL1_SetR(uint32_t PLL1R)2459 __STATIC_INLINE void LL_RCC_PLL1_SetR(uint32_t PLL1R)
2460 {
2461 MODIFY_REG(RCC->PLL1DIVR, RCC_PLL1DIVR_PLL1R, (PLL1R - 1UL) << RCC_PLL1DIVR_PLL1R_Pos);
2462 }
2463
2464 /**
2465 * @brief Get PLL1 division factor for PLL1R
2466 * @note Used for PLL1RCLK selected for system clock
2467 * @rmtoll PLL1DIVR PLL1R LL_RCC_PLL1_GetR
2468 * @retval Between 1 and 128
2469 */
LL_RCC_PLL1_GetR(void)2470 __STATIC_INLINE uint32_t LL_RCC_PLL1_GetR(void)
2471 {
2472 return (uint32_t)((READ_BIT(RCC->PLL1DIVR, RCC_PLL1DIVR_PLL1R) >> RCC_PLL1DIVR_PLL1R_Pos) + 1UL);
2473 }
2474
2475 /**
2476 * @brief Set Division factor for PLL1
2477 * @rmtoll PLL1CFGR PLL1M LL_RCC_PLL1_SetDivider
2478 * @param PLL1M parameter can be a value between 1 and 8
2479 */
LL_RCC_PLL1_SetDivider(uint32_t PLL1M)2480 __STATIC_INLINE void LL_RCC_PLL1_SetDivider(uint32_t PLL1M)
2481 {
2482 MODIFY_REG(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1M, (PLL1M - 1UL) << RCC_PLL1CFGR_PLL1M_Pos);
2483 }
2484
2485 /**
2486 * @brief Get Division factor for PLL1
2487 * @rmtoll PLL1CFGR PLL1M LL_RCC_PLL1_GetDivider
2488 * @retval Between 1 and 8
2489 */
LL_RCC_PLL1_GetDivider(void)2490 __STATIC_INLINE uint32_t LL_RCC_PLL1_GetDivider(void)
2491 {
2492 return (uint32_t)((READ_BIT(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1M) >> RCC_PLL1CFGR_PLL1M_Pos) + 1UL);
2493 }
2494
2495 /**
2496 * @brief Enable PLL1P output
2497 * @rmtoll PLL1CFGR PLL1PEN LL_RCC_PLL1_EnableDomain_PLL1P
2498 * @retval None
2499 */
LL_RCC_PLL1_EnableDomain_PLL1P(void)2500 __STATIC_INLINE void LL_RCC_PLL1_EnableDomain_PLL1P(void)
2501 {
2502 SET_BIT(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1PEN);
2503 }
2504
2505 /**
2506 * @brief Disable PLL1P output
2507 * @note In order to save power, when the PLL1PCLK of the PLL1 is
2508 * not used, should be 0
2509 * @rmtoll PLL1CFGR PLL1PEN LL_RCC_PLL1_DisableDomain_PLL1P
2510 * @retval None
2511 */
LL_RCC_PLL1_DisableDomain_PLL1P(void)2512 __STATIC_INLINE void LL_RCC_PLL1_DisableDomain_PLL1P(void)
2513 {
2514 CLEAR_BIT(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1PEN);
2515 }
2516
2517 /**
2518 * @brief Check if PLL1P output is enabled
2519 * @rmtoll PLL1CFGR PLL1PEN LL_RCC_PLL1_IsEnabledDomain_PLL1P
2520 * @retval State of bit (1 or 0).
2521 */
LL_RCC_PLL1_IsEnabledDomain_PLL1P(void)2522 __STATIC_INLINE uint32_t LL_RCC_PLL1_IsEnabledDomain_PLL1P(void)
2523 {
2524 return ((READ_BIT(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1PEN) == RCC_PLL1CFGR_PLL1PEN) ? 1UL : 0UL);
2525 }
2526
2527 /**
2528 * @brief Enable PLL1Q output
2529 * @rmtoll PLL1CFGR PLL1QEN LL_RCC_PLL1_EnableDomain_PLL1Q
2530 * @retval None
2531 */
LL_RCC_PLL1_EnableDomain_PLL1Q(void)2532 __STATIC_INLINE void LL_RCC_PLL1_EnableDomain_PLL1Q(void)
2533 {
2534 SET_BIT(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1QEN);
2535 }
2536
2537 /**
2538 * @brief Disable PLL1Q output
2539 * @note In order to save power, when the PLL1QCLK of the PLL1 is
2540 * not used, should be 0
2541 * @rmtoll PLL1CFGR PLL1QEN LL_RCC_PLL1_DisableDomain_PLL1Q
2542 * @retval None
2543 */
LL_RCC_PLL1_DisableDomain_PLL1Q(void)2544 __STATIC_INLINE void LL_RCC_PLL1_DisableDomain_PLL1Q(void)
2545 {
2546 CLEAR_BIT(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1QEN);
2547 }
2548
2549 /**
2550 * @brief Check if PLL1Q output is enabled
2551 * @rmtoll PLL1CFGR PLL1QEN LL_RCC_PLL1_IsEnabledDomain_PLL1Q
2552 * @retval State of bit (1 or 0).
2553 */
LL_RCC_PLL1_IsEnabledDomain_PLL1Q(void)2554 __STATIC_INLINE uint32_t LL_RCC_PLL1_IsEnabledDomain_PLL1Q(void)
2555 {
2556 return ((READ_BIT(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1QEN) == RCC_PLL1CFGR_PLL1QEN) ? 1UL : 0UL);
2557 }
2558
2559 /**
2560 * @brief Enable PLL1R output mapped on SYSCLK domain
2561 * @rmtoll PLL1CFGR PLL1REN LL_RCC_PLL1_EnableDomain_PLL1R
2562 * @retval None
2563 */
LL_RCC_PLL1_EnableDomain_PLL1R(void)2564 __STATIC_INLINE void LL_RCC_PLL1_EnableDomain_PLL1R(void)
2565 {
2566 SET_BIT(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1REN);
2567 }
2568
2569 /**
2570 * @brief Disable PLL1 output mapped on SYSCLK domain
2571 * @note Cannot be disabled if the PLL1 clock is used as the system
2572 * clock
2573 * @note In order to save power, when the PLL1RCLK of the PLL1 is
2574 * not used, PLL1 should be 0
2575 * @rmtoll PLL1CFGR PLL1REN LL_RCC_PLL1_DisableDomain_PLL1R
2576 * @retval None
2577 */
LL_RCC_PLL1_DisableDomain_PLL1R(void)2578 __STATIC_INLINE void LL_RCC_PLL1_DisableDomain_PLL1R(void)
2579 {
2580 CLEAR_BIT(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1REN);
2581 }
2582
2583 /**
2584 * @brief Check if PLL1R output mapped on SYSCLK domain clock is enabled
2585 * @rmtoll PLL1CFGR PLL1REN LL_RCC_PLL1_IsEnabledDomain_PLL1R
2586 * @retval State of bit (1 or 0).
2587 */
LL_RCC_PLL1_IsEnabledDomain_PLL1R(void)2588 __STATIC_INLINE uint32_t LL_RCC_PLL1_IsEnabledDomain_PLL1R(void)
2589 {
2590 return ((READ_BIT(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1REN) == RCC_PLL1CFGR_PLL1REN) ? 1UL : 0UL);
2591 }
2592
2593 /**
2594 * @brief Enable PLL1 FRACN
2595 * @rmtoll PLL1CFGR PLL1FRACEN LL_RCC_PLL1FRACN_Enable
2596 * @retval None
2597 */
LL_RCC_PLL1FRACN_Enable(void)2598 __STATIC_INLINE void LL_RCC_PLL1FRACN_Enable(void)
2599 {
2600 SET_BIT(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1FRACEN);
2601 }
2602
2603 /**
2604 * @brief Check if PLL1 FRACN is enabled
2605 * @rmtoll PLL1CFGR PLL1FRACEN LL_RCC_PLL1FRACN_IsEnabled
2606 * @retval State of bit (1 or 0).
2607 */
LL_RCC_PLL1FRACN_IsEnabled(void)2608 __STATIC_INLINE uint32_t LL_RCC_PLL1FRACN_IsEnabled(void)
2609 {
2610 return ((READ_BIT(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1FRACEN) == RCC_PLL1CFGR_PLL1FRACEN) ? 1UL : 0UL);
2611 }
2612
2613 /**
2614 * @brief Disable PLL1 FRACN
2615 * @rmtoll PLL1CFGR PLL1FRACEN LL_RCC_PLL1FRACN_Disable
2616 * @retval None
2617 */
LL_RCC_PLL1FRACN_Disable(void)2618 __STATIC_INLINE void LL_RCC_PLL1FRACN_Disable(void)
2619 {
2620 CLEAR_BIT(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1FRACEN);
2621 }
2622
2623 /**
2624 * @brief Set PLL1 FRACN Coefficient
2625 * @rmtoll PLL1FRACR PLL1FRACN LL_RCC_PLL1_SetFRACN
2626 * @param FRACN parameter can be a value between 0 and 8191 (0x1FFF)
2627 */
LL_RCC_PLL1_SetFRACN(uint32_t FRACN)2628 __STATIC_INLINE void LL_RCC_PLL1_SetFRACN(uint32_t FRACN)
2629 {
2630 MODIFY_REG(RCC->PLL1FRACR, RCC_PLL1FRACR_PLL1FRACN, FRACN << RCC_PLL1FRACR_PLL1FRACN_Pos);
2631 }
2632
2633 /**
2634 * @brief Get PLL1 FRACN Coefficient
2635 * @rmtoll PLL1FRACR PLL1FRACN LL_RCC_PLL1_GetFRACN
2636 * @retval A value between 0 and 8191 (0x1FFF)
2637 */
LL_RCC_PLL1_GetFRACN(void)2638 __STATIC_INLINE uint32_t LL_RCC_PLL1_GetFRACN(void)
2639 {
2640 return (uint32_t)(READ_BIT(RCC->PLL1FRACR, RCC_PLL1FRACR_PLL1FRACN) >> RCC_PLL1FRACR_PLL1FRACN_Pos);
2641 }
2642
2643 /**
2644 * @brief Set PLL1 VCO Input Range
2645 * @note This API shall be called only when PLL1 is disabled.
2646 * @rmtoll PLL1CFGR PLL1RGE LL_RCC_PLL1_SetVCOInputRange
2647 * @param InputRange This parameter can be one of the following values:
2648 * @arg @ref LL_RCC_PLLINPUTRANGE_4_8
2649 * @arg @ref LL_RCC_PLLINPUTRANGE_8_16
2650 * @retval None
2651 */
LL_RCC_PLL1_SetVCOInputRange(uint32_t InputRange)2652 __STATIC_INLINE void LL_RCC_PLL1_SetVCOInputRange(uint32_t InputRange)
2653 {
2654 MODIFY_REG(RCC->PLL1CFGR, RCC_PLL1CFGR_PLL1RGE, InputRange << RCC_PLL1CFGR_PLL1RGE_Pos);
2655 }
2656
2657 /**
2658 * @}
2659 */
2660
2661 #if defined(RCC_PRIVCFGR_NSPRIV)
2662 /** @defgroup RCC_LL_EF_PRIV Privileged mode
2663 * @{
2664 */
2665
2666 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
2667 /**
2668 * @brief Enable Secure Privileged mode
2669 * @rmtoll PRIVCFGR SPRIV LL_RCC_EnableSecPrivilegedMode
2670 * @retval None
2671 */
LL_RCC_EnableSecPrivilegedMode(void)2672 __STATIC_INLINE void LL_RCC_EnableSecPrivilegedMode(void)
2673 {
2674 SET_BIT(RCC->PRIVCFGR, RCC_PRIVCFGR_SPRIV);
2675 }
2676
2677 /**
2678 * @brief Disable Secure Privileged mode
2679 * @rmtoll PRIVCFGR SPRIV LL_RCC_DisableSecPrivilegedMode
2680 * @retval None
2681 */
LL_RCC_DisableSecPrivilegedMode(void)2682 __STATIC_INLINE void LL_RCC_DisableSecPrivilegedMode(void)
2683 {
2684 CLEAR_BIT(RCC->PRIVCFGR, RCC_PRIVCFGR_SPRIV);
2685 }
2686
2687 /**
2688 * @brief Check if Secure Privileged mode has been enabled or not
2689 * @rmtoll PRIVCFGR SPRIV LL_RCC_IsEnabledSecPrivilegedMode
2690 * @retval State of bit (1 or 0).
2691 */
LL_RCC_IsEnabledSecPrivilegedMode(void)2692 __STATIC_INLINE uint32_t LL_RCC_IsEnabledSecPrivilegedMode(void)
2693 {
2694 return ((READ_BIT(RCC->PRIVCFGR, RCC_PRIVCFGR_SPRIV) == RCC_PRIVCFGR_SPRIV) ? 1UL : 0UL);
2695 }
2696 #endif /* __ARM_FEATURE_CMSE && (__ARM_FEATURE_CMSE == 3U) */
2697
2698 /**
2699 * @brief Enable Non Secure Privileged mode
2700 * @rmtoll PRIVCFGR NSPRIV LL_RCC_EnableNSecPrivilegedMode
2701 * @retval None
2702 */
LL_RCC_EnableNSecPrivilegedMode(void)2703 __STATIC_INLINE void LL_RCC_EnableNSecPrivilegedMode(void)
2704 {
2705 SET_BIT(RCC->PRIVCFGR, RCC_PRIVCFGR_NSPRIV);
2706 }
2707
2708 /**
2709 * @brief Disable Non Secure Privileged mode
2710 * @rmtoll PRIVCFGR NSPRIV LL_RCC_DisableNSecPrivilegedMode
2711 * @retval None
2712 */
LL_RCC_DisableNSecPrivilegedMode(void)2713 __STATIC_INLINE void LL_RCC_DisableNSecPrivilegedMode(void)
2714 {
2715 CLEAR_BIT(RCC->PRIVCFGR, RCC_PRIVCFGR_NSPRIV);
2716 }
2717
2718 /**
2719 * @brief Check if Non Secure Privileged mode has been enabled or not
2720 * @rmtoll PRIVCFGR NSPRIV LL_RCC_IsEnabledNSecPrivilegedMode
2721 * @retval State of bit (1 or 0).
2722 */
LL_RCC_IsEnabledNSecPrivilegedMode(void)2723 __STATIC_INLINE uint32_t LL_RCC_IsEnabledNSecPrivilegedMode(void)
2724 {
2725 return ((READ_BIT(RCC->PRIVCFGR, RCC_PRIVCFGR_NSPRIV) == RCC_PRIVCFGR_NSPRIV) ? 1UL : 0UL);
2726 }
2727
2728 /**
2729 * @}
2730 */
2731 #endif /* RCC_PRIVCFGR_NSPRIV */
2732
2733 /** @defgroup RCC_LL_EF_FLAG_Management FLAG Management
2734 * @{
2735 */
2736
2737 /**
2738 * @brief Clear LSI1 ready interrupt flag
2739 * @rmtoll CICR LSI1RDYC LL_RCC_ClearFlag_LSI1RDY
2740 * @retval None
2741 */
LL_RCC_ClearFlag_LSI1RDY(void)2742 __STATIC_INLINE void LL_RCC_ClearFlag_LSI1RDY(void)
2743 {
2744 SET_BIT(RCC->CICR, RCC_CICR_LSI1RDYC);
2745 }
2746
2747 #if defined(RCC_LSI2_SUPPORT)
2748 /**
2749 * @brief Clear LSI2 ready interrupt flag
2750 * @rmtoll CICR LSI2RDYC LL_RCC_ClearFlag_LSI2RDY
2751 * @retval None
2752 */
LL_RCC_ClearFlag_LSI2RDY(void)2753 __STATIC_INLINE void LL_RCC_ClearFlag_LSI2RDY(void)
2754 {
2755 SET_BIT(RCC->CICR, RCC_CICR_LSI2RDYC);
2756 }
2757 #endif /* RCC_BDCR1_LSI2ON */
2758
2759 /**
2760 * @brief Clear LSE ready interrupt flag
2761 * @rmtoll CICR LSERDYC LL_RCC_ClearFlag_LSERDY
2762 * @retval None
2763 */
LL_RCC_ClearFlag_LSERDY(void)2764 __STATIC_INLINE void LL_RCC_ClearFlag_LSERDY(void)
2765 {
2766 SET_BIT(RCC->CICR, RCC_CICR_LSERDYC);
2767 }
2768
2769 /**
2770 * @brief Clear HSI ready interrupt flag
2771 * @rmtoll CICR HSIRDYC LL_RCC_ClearFlag_HSIRDY
2772 * @retval None
2773 */
LL_RCC_ClearFlag_HSIRDY(void)2774 __STATIC_INLINE void LL_RCC_ClearFlag_HSIRDY(void)
2775 {
2776 SET_BIT(RCC->CICR, RCC_CICR_HSIRDYC);
2777 }
2778
2779 /**
2780 * @brief Clear HSE ready interrupt flag
2781 * @rmtoll CICR HSERDYC LL_RCC_ClearFlag_HSERDY
2782 * @retval None
2783 */
LL_RCC_ClearFlag_HSERDY(void)2784 __STATIC_INLINE void LL_RCC_ClearFlag_HSERDY(void)
2785 {
2786 SET_BIT(RCC->CICR, RCC_CICR_HSERDYC);
2787 }
2788
2789 /**
2790 * @brief Clear PLL1 ready interrupt flag
2791 * @rmtoll CICR PLL1RDYC LL_RCC_ClearFlag_PLL1RDY
2792 * @retval None
2793 */
LL_RCC_ClearFlag_PLL1RDY(void)2794 __STATIC_INLINE void LL_RCC_ClearFlag_PLL1RDY(void)
2795 {
2796 SET_BIT(RCC->CICR, RCC_CICR_PLL1RDYC);
2797 }
2798
2799 /**
2800 * @brief Clear Clock security system interrupt flag
2801 * @rmtoll CICR CSSC LL_RCC_ClearFlag_HSECSS
2802 * @retval None
2803 */
LL_RCC_ClearFlag_HSECSS(void)2804 __STATIC_INLINE void LL_RCC_ClearFlag_HSECSS(void)
2805 {
2806 SET_BIT(RCC->CICR, RCC_CICR_HSECSSC);
2807 }
2808
2809
2810 /**
2811 * @brief Check if LSI1 ready interrupt occurred or not
2812 * @rmtoll CIFR LSI1RDYF LL_RCC_IsActiveFlag_LSI1RDY
2813 * @retval State of bit (1 or 0).
2814 */
LL_RCC_IsActiveFlag_LSI1RDY(void)2815 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSI1RDY(void)
2816 {
2817 return ((READ_BIT(RCC->CIFR, RCC_CIFR_LSI1RDYF) == RCC_CIFR_LSI1RDYF) ? 1UL : 0UL);
2818 }
2819
2820 #if defined(RCC_LSI2_SUPPORT)
2821 /**
2822 * @brief Check if LSI2 ready interrupt occurred or not
2823 * @rmtoll CIFR LSI2RDYF LL_RCC_IsActiveFlag_LSI2RDY
2824 * @retval State of bit (1 or 0).
2825 */
LL_RCC_IsActiveFlag_LSI2RDY(void)2826 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSI2RDY(void)
2827 {
2828 return ((READ_BIT(RCC->CIFR, RCC_CIFR_LSI2RDYF) == RCC_CIFR_LSI2RDYF) ? 1UL : 0UL);
2829 }
2830 #endif /* RCC_BDCR1_LSI2ON */
2831
2832 /**
2833 * @brief Check if LSE ready interrupt occurred or not
2834 * @rmtoll CIFR LSERDYF LL_RCC_IsActiveFlag_LSERDY
2835 * @retval State of bit (1 or 0).
2836 */
LL_RCC_IsActiveFlag_LSERDY(void)2837 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSERDY(void)
2838 {
2839 return ((READ_BIT(RCC->CIFR, RCC_CIFR_LSERDYF) == RCC_CIFR_LSERDYF) ? 1UL : 0UL);
2840 }
2841
2842 /**
2843 * @brief Check if HSI ready interrupt occurred or not
2844 * @rmtoll CIFR HSIRDYF LL_RCC_IsActiveFlag_HSIRDY
2845 * @retval State of bit (1 or 0).
2846 */
LL_RCC_IsActiveFlag_HSIRDY(void)2847 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSIRDY(void)
2848 {
2849 return ((READ_BIT(RCC->CIFR, RCC_CIFR_HSIRDYF) == RCC_CIFR_HSIRDYF) ? 1UL : 0UL);
2850 }
2851
2852 /**
2853 * @brief Check if HSE ready interrupt occurred or not
2854 * @rmtoll CIFR HSERDYF LL_RCC_IsActiveFlag_HSERDY
2855 * @retval State of bit (1 or 0).
2856 */
LL_RCC_IsActiveFlag_HSERDY(void)2857 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSERDY(void)
2858 {
2859 return ((READ_BIT(RCC->CIFR, RCC_CIFR_HSERDYF) == RCC_CIFR_HSERDYF) ? 1UL : 0UL);
2860 }
2861
2862 /**
2863 * @brief Check if PLL1 ready interrupt occurred or not
2864 * @rmtoll CIFR PLL1RDYF LL_RCC_IsActiveFlag_PLL1RDY
2865 * @retval State of bit (1 or 0).
2866 */
LL_RCC_IsActiveFlag_PLL1RDY(void)2867 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLL1RDY(void)
2868 {
2869 return ((READ_BIT(RCC->CIFR, RCC_CIFR_PLL1RDYF) == RCC_CIFR_PLL1RDYF) ? 1UL : 0UL);
2870 }
2871
2872 /**
2873 * @brief Check if Clock security system interrupt occurred or not
2874 * @rmtoll CIFR CSSF LL_RCC_IsActiveFlag_HSECSS
2875 * @retval State of bit (1 or 0).
2876 */
LL_RCC_IsActiveFlag_HSECSS(void)2877 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSECSS(void)
2878 {
2879 return ((READ_BIT(RCC->CIFR, RCC_CIFR_HSECSSF) == RCC_CIFR_HSECSSF) ? 1UL : 0UL);
2880 }
2881
2882 /**
2883 * @brief Check if RCC flag Independent Watchdog reset is set or not.
2884 * @rmtoll CSR IWDGRSTF LL_RCC_IsActiveFlag_IWDGRST
2885 * @retval State of bit (1 or 0).
2886 */
LL_RCC_IsActiveFlag_IWDGRST(void)2887 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_IWDGRST(void)
2888 {
2889 return ((READ_BIT(RCC->CSR, RCC_CSR_IWDGRSTF) == RCC_CSR_IWDGRSTF) ? 1UL : 0UL);
2890 }
2891
2892 /**
2893 * @brief Check if RCC flag Low Power reset is set or not.
2894 * @rmtoll CSR LPWRRSTF LL_RCC_IsActiveFlag_LPWRRST
2895 * @retval State of bit (1 or 0).
2896 */
LL_RCC_IsActiveFlag_LPWRRST(void)2897 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LPWRRST(void)
2898 {
2899 return ((READ_BIT(RCC->CSR, RCC_CSR_LPWRRSTF) == RCC_CSR_LPWRRSTF) ? 1UL : 0UL);
2900 }
2901
2902 /**
2903 * @brief Check if RCC flag is set or not.
2904 * @rmtoll CSR OBLRSTF LL_RCC_IsActiveFlag_OBLRST
2905 * @retval State of bit (1 or 0).
2906 */
LL_RCC_IsActiveFlag_OBLRST(void)2907 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_OBLRST(void)
2908 {
2909 return ((READ_BIT(RCC->CSR, RCC_CSR_OBLRSTF) == RCC_CSR_OBLRSTF) ? 1UL : 0UL);
2910 }
2911
2912 /**
2913 * @brief Check if RCC flag Pin reset is set or not.
2914 * @rmtoll CSR PINRSTF LL_RCC_IsActiveFlag_PINRST
2915 * @retval State of bit (1 or 0).
2916 */
LL_RCC_IsActiveFlag_PINRST(void)2917 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PINRST(void)
2918 {
2919 return ((READ_BIT(RCC->CSR, RCC_CSR_PINRSTF) == RCC_CSR_PINRSTF) ? 1UL : 0UL);
2920 }
2921
2922 /**
2923 * @brief Check if RCC flag Software reset is set or not.
2924 * @rmtoll CSR SFTRSTF LL_RCC_IsActiveFlag_SFTRST
2925 * @retval State of bit (1 or 0).
2926 */
LL_RCC_IsActiveFlag_SFTRST(void)2927 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_SFTRST(void)
2928 {
2929 return ((READ_BIT(RCC->CSR, RCC_CSR_SFTRSTF) == RCC_CSR_SFTRSTF) ? 1UL : 0UL);
2930 }
2931
2932 #if defined(WWDG)
2933 /**
2934 * @brief Check if RCC flag Window Watchdog reset is set or not.
2935 * @rmtoll CSR WWDGRSTF LL_RCC_IsActiveFlag_WWDGRST
2936 * @retval State of bit (1 or 0).
2937 */
LL_RCC_IsActiveFlag_WWDGRST(void)2938 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_WWDGRST(void)
2939 {
2940 return ((READ_BIT(RCC->CSR, RCC_CSR_WWDGRSTF) == RCC_CSR_WWDGRSTF) ? 1UL : 0UL);
2941 }
2942 #endif /* WWDG */
2943
2944 /**
2945 * @brief Check if RCC flag BOR reset is set or not.
2946 * @rmtoll CSR BORRSTF LL_RCC_IsActiveFlag_BORRST
2947 * @retval State of bit (1 or 0).
2948 */
LL_RCC_IsActiveFlag_BORRST(void)2949 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_BORRST(void)
2950 {
2951 return ((READ_BIT(RCC->CSR, RCC_CSR_BORRSTF) == RCC_CSR_BORRSTF) ? 1UL : 0UL);
2952 }
2953
2954 /**
2955 * @brief Set RMVF bit to clear the reset flags.
2956 * @rmtoll CSR RMVF LL_RCC_ClearResetFlags
2957 * @retval None
2958 */
LL_RCC_ClearResetFlags(void)2959 __STATIC_INLINE void LL_RCC_ClearResetFlags(void)
2960 {
2961 SET_BIT(RCC->CSR, RCC_CSR_RMVF);
2962 }
2963
2964 /* Alias for portability */
2965 #define LL_RCC_PLL1_ConfigDomain_SYS LL_RCC_PLL1_ConfigDomain_PLL1R
2966
2967 /**
2968 * @}
2969 */
2970
2971 /** @defgroup RCC_LL_EF_IT_Management IT Management
2972 * @{
2973 */
2974
2975 /**
2976 * @brief Enable LSI1 ready interrupt
2977 * @rmtoll CIER LSI1RDYIE LL_RCC_EnableIT_LSI1RDY
2978 * @retval None
2979 */
LL_RCC_EnableIT_LSI1RDY(void)2980 __STATIC_INLINE void LL_RCC_EnableIT_LSI1RDY(void)
2981 {
2982 SET_BIT(RCC->CIER, RCC_CIER_LSI1RDYIE);
2983 }
2984
2985 #if defined(RCC_LSI2_SUPPORT)
2986 /**
2987 * @brief Enable LSI2 ready interrupt
2988 * @rmtoll CIER LSI2RDYIE LL_RCC_EnableIT_LSI2RDY
2989 * @retval None
2990 */
LL_RCC_EnableIT_LSI2RDY(void)2991 __STATIC_INLINE void LL_RCC_EnableIT_LSI2RDY(void)
2992 {
2993 SET_BIT(RCC->CIER, RCC_CIER_LSI2RDYIE);
2994 }
2995 #endif /* RCC_BDCR1_LSI2ON */
2996
2997 /**
2998 * @brief Enable LSE ready interrupt
2999 * @rmtoll CIER LSERDYIE LL_RCC_EnableIT_LSERDY
3000 * @retval None
3001 */
LL_RCC_EnableIT_LSERDY(void)3002 __STATIC_INLINE void LL_RCC_EnableIT_LSERDY(void)
3003 {
3004 SET_BIT(RCC->CIER, RCC_CIER_LSERDYIE);
3005 }
3006
3007 /**
3008 * @brief Enable HSI ready interrupt
3009 * @rmtoll CIER HSIRDYIE LL_RCC_EnableIT_HSIRDY
3010 * @retval None
3011 */
LL_RCC_EnableIT_HSIRDY(void)3012 __STATIC_INLINE void LL_RCC_EnableIT_HSIRDY(void)
3013 {
3014 SET_BIT(RCC->CIER, RCC_CIER_HSIRDYIE);
3015 }
3016
3017 /**
3018 * @brief Enable HSE ready interrupt
3019 * @rmtoll CIER HSERDYIE LL_RCC_EnableIT_HSERDY
3020 * @retval None
3021 */
LL_RCC_EnableIT_HSERDY(void)3022 __STATIC_INLINE void LL_RCC_EnableIT_HSERDY(void)
3023 {
3024 SET_BIT(RCC->CIER, RCC_CIER_HSERDYIE);
3025 }
3026
3027 /**
3028 * @brief Enable PLL1 ready interrupt
3029 * @rmtoll CIER PLL1RDYIE LL_RCC_EnableIT_PLL1RDY
3030 * @retval None
3031 */
LL_RCC_EnableIT_PLL1RDY(void)3032 __STATIC_INLINE void LL_RCC_EnableIT_PLL1RDY(void)
3033 {
3034 SET_BIT(RCC->CIER, RCC_CIER_PLL1RDYIE);
3035 }
3036
3037 /**
3038 * @brief Disable LSI1 ready interrupt
3039 * @rmtoll CIER LSI1RDYIE LL_RCC_DisableIT_LSI1RDY
3040 * @retval None
3041 */
LL_RCC_DisableIT_LSI1RDY(void)3042 __STATIC_INLINE void LL_RCC_DisableIT_LSI1RDY(void)
3043 {
3044 CLEAR_BIT(RCC->CIER, RCC_CIER_LSI1RDYIE);
3045 }
3046
3047 #if defined(RCC_LSI2_SUPPORT)
3048 /**
3049 * @brief Disable LSI2 ready interrupt
3050 * @rmtoll CIER LSI2RDYIE LL_RCC_DisableIT_LSI2RDY
3051 * @retval None
3052 */
LL_RCC_DisableIT_LSI2RDY(void)3053 __STATIC_INLINE void LL_RCC_DisableIT_LSI2RDY(void)
3054 {
3055 CLEAR_BIT(RCC->CIER, RCC_CIER_LSI2RDYIE);
3056 }
3057 #endif /* RCC_BDCR1_LSI2ON */
3058
3059 /**
3060 * @brief Disable LSE ready interrupt
3061 * @rmtoll CIER LSERDYIE LL_RCC_DisableIT_LSERDY
3062 * @retval None
3063 */
LL_RCC_DisableIT_LSERDY(void)3064 __STATIC_INLINE void LL_RCC_DisableIT_LSERDY(void)
3065 {
3066 CLEAR_BIT(RCC->CIER, RCC_CIER_LSERDYIE);
3067 }
3068
3069 /**
3070 * @brief Disable HSI ready interrupt
3071 * @rmtoll CIER HSIRDYIE LL_RCC_DisableIT_HSIRDY
3072 * @retval None
3073 */
LL_RCC_DisableIT_HSIRDY(void)3074 __STATIC_INLINE void LL_RCC_DisableIT_HSIRDY(void)
3075 {
3076 CLEAR_BIT(RCC->CIER, RCC_CIER_HSIRDYIE);
3077 }
3078
3079 /**
3080 * @brief Disable HSE ready interrupt
3081 * @rmtoll CIER HSERDYIE LL_RCC_DisableIT_HSERDY
3082 * @retval None
3083 */
LL_RCC_DisableIT_HSERDY(void)3084 __STATIC_INLINE void LL_RCC_DisableIT_HSERDY(void)
3085 {
3086 CLEAR_BIT(RCC->CIER, RCC_CIER_HSERDYIE);
3087 }
3088
3089 /**
3090 * @brief Disable PLL1 ready interrupt
3091 * @rmtoll CIER PLL1RDYIE LL_RCC_DisableIT_PLL1RDY
3092 * @retval None
3093 */
LL_RCC_DisableIT_PLL1RDY(void)3094 __STATIC_INLINE void LL_RCC_DisableIT_PLL1RDY(void)
3095 {
3096 CLEAR_BIT(RCC->CIER, RCC_CIER_PLL1RDYIE);
3097 }
3098
3099 /**
3100 * @brief Checks if LSI1 ready interrupt source is enabled or disabled.
3101 * @rmtoll CIER LSI1RDYIE LL_RCC_IsEnabledIT_LSI1RDY
3102 * @retval State of bit (1 or 0).
3103 */
LL_RCC_IsEnabledIT_LSI1RDY(void)3104 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSI1RDY(void)
3105 {
3106 return ((READ_BIT(RCC->CIER, RCC_CIER_LSI1RDYIE) == RCC_CIER_LSI1RDYIE) ? 1UL : 0UL);
3107 }
3108
3109 #if defined(RCC_LSI2_SUPPORT)
3110 /**
3111 * @brief Checks if LSI2 ready interrupt source is enabled or disabled.
3112 * @rmtoll CIER LSI2RDYIE LL_RCC_IsEnabledIT_LSI2RDY
3113 * @retval State of bit (1 or 0).
3114 */
LL_RCC_IsEnabledIT_LSI2RDY(void)3115 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSI2RDY(void)
3116 {
3117 return ((READ_BIT(RCC->CIER, RCC_CIER_LSI2RDYIE) == RCC_CIER_LSI2RDYIE) ? 1UL : 0UL);
3118 }
3119 #endif /* RCC_BDCR1_LSI2ON */
3120
3121 /**
3122 * @brief Checks if LSE ready interrupt source is enabled or disabled.
3123 * @rmtoll CIER LSERDYIE LL_RCC_IsEnabledIT_LSERDY
3124 * @retval State of bit (1 or 0).
3125 */
LL_RCC_IsEnabledIT_LSERDY(void)3126 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSERDY(void)
3127 {
3128 return ((READ_BIT(RCC->CIER, RCC_CIER_LSERDYIE) == RCC_CIER_LSERDYIE) ? 1UL : 0UL);
3129 }
3130
3131
3132 /**
3133 * @brief Checks if HSI ready interrupt source is enabled or disabled.
3134 * @rmtoll CIER HSIRDYIE LL_RCC_IsEnabledIT_HSIRDY
3135 * @retval State of bit (1 or 0).
3136 */
LL_RCC_IsEnabledIT_HSIRDY(void)3137 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSIRDY(void)
3138 {
3139 return ((READ_BIT(RCC->CIER, RCC_CIER_HSIRDYIE) == RCC_CIER_HSIRDYIE) ? 1UL : 0UL);
3140 }
3141
3142 /**
3143 * @brief Checks if HSE ready interrupt source is enabled or disabled.
3144 * @rmtoll CIER HSERDYIE LL_RCC_IsEnabledIT_HSERDY
3145 * @retval State of bit (1 or 0).
3146 */
LL_RCC_IsEnabledIT_HSERDY(void)3147 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSERDY(void)
3148 {
3149 return ((READ_BIT(RCC->CIER, RCC_CIER_HSERDYIE) == RCC_CIER_HSERDYIE) ? 1UL : 0UL);
3150 }
3151
3152 /**
3153 * @brief Checks if PLL1 ready interrupt source is enabled or disabled.
3154 * @rmtoll CIER PLL1RDYIE LL_RCC_IsEnabledIT_PLL1RDY
3155 * @retval State of bit (1 or 0).
3156 */
LL_RCC_IsEnabledIT_PLL1RDY(void)3157 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLL1RDY(void)
3158 {
3159 return ((READ_BIT(RCC->CIER, RCC_CIER_PLL1RDYIE) == RCC_CIER_PLL1RDYIE) ? 1UL : 0UL);
3160 }
3161
3162 /**
3163 * @}
3164 */
3165
3166 /** @defgroup RCC_LL_EF_Security_Services Security Services
3167 * @{
3168 */
3169
3170 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
3171 /**
3172 * @brief Configure RCC resources security
3173 * @note Only available from secure state when system implements security (TZEN=1)
3174 * @rmtoll SECCFGR HSISEC LL_RCC_ConfigSecure\n
3175 * SECCFGR HSESEC LL_RCC_ConfigSecure\n
3176 * SECCFGR LSISEC LL_RCC_ConfigSecure\n
3177 * SECCFGR LSESEC LL_RCC_ConfigSecure\n
3178 * SECCFGR SYSCLKSEC LL_RCC_ConfigSecure\n
3179 * SECCFGR PRESCSEC LL_RCC_ConfigSecure\n
3180 * SECCFGR PLL1SEC LL_RCC_ConfigSecure\n
3181 * SECCFGR RMVFSEC LL_RCC_ConfigSecure
3182 * @param SecureConfig This parameter can be one or a combination of the following values:
3183 * @arg @ref LL_RCC_ALL_NSEC & LL_RCC_ALL_SEC
3184 * @arg @ref LL_RCC_HSI_SEC & LL_RCC_HSI_NSEC
3185 * @arg @ref LL_RCC_HSE_SEC & LL_RCC_HSE_NSEC
3186 * @arg @ref LL_RCC_LSE_SEC & LL_RCC_LSE_NSEC
3187 * @arg @ref LL_RCC_LSI_SEC & LL_RCC_LSI_NSEC
3188 * @arg @ref LL_RCC_SYSCLK_SEC & LL_RCC_SYSCLK_NSEC
3189 * @arg @ref LL_RCC_PRESCALERS_SEC & LL_RCC_PRESCALERS_NSEC
3190 * @arg @ref LL_RCC_PLL1_SEC & LL_RCC_PLL1_NSEC
3191 * @arg @ref LL_RCC_RESET_FLAGS_SEC & LL_RCC_RESET_FLAGS_NSEC
3192 * @retval None
3193 */
LL_RCC_ConfigSecure(uint32_t SecureConfig)3194 __STATIC_INLINE void LL_RCC_ConfigSecure(uint32_t SecureConfig)
3195 {
3196 WRITE_REG(RCC->SECCFGR, SecureConfig);
3197 }
3198 #endif /* __ARM_FEATURE_CMSE && (__ARM_FEATURE_CMSE == 3U) */
3199
3200 /**
3201 * @brief Get RCC resources security status
3202 * @note Only available from secure state when system implements security (TZEN=1)
3203 * @rmtoll SECCFGR HSISEC LL_RCC_GetConfigSecure\n
3204 * SECCFGR HSESEC LL_RCC_GetConfigSecure\n
3205 * SECCFGR LSISEC LL_RCC_GetConfigSecure\n
3206 * SECCFGR LSESEC LL_RCC_GetConfigSecure\n
3207 * SECCFGR SYSCLKSEC LL_RCC_GetConfigSecure\n
3208 * SECCFGR PRESCSEC LL_RCC_GetConfigSecure\n
3209 * SECCFGR PLL1SEC LL_RCC_GetConfigSecure\n
3210 * SECCFGR RMVFSEC LL_RCC_GetConfigSecure
3211 * @retval Returned value can be one or a combination of the following values:
3212 * @arg @ref LL_RCC_ALL_NSEC & LL_RCC_ALL_SEC
3213 * @arg @ref LL_RCC_HSI_SEC & LL_RCC_HSI_NSEC
3214 * @arg @ref LL_RCC_HSE_SEC & LL_RCC_HSE_NSEC
3215 * @arg @ref LL_RCC_LSE_SEC & LL_RCC_LSE_NSEC
3216 * @arg @ref LL_RCC_LSI_SEC & LL_RCC_LSI_NSEC
3217 * @arg @ref LL_RCC_SYSCLK_SEC & LL_RCC_SYSCLK_NSEC
3218 * @arg @ref LL_RCC_PRESCALERS_SEC & LL_RCC_PRESCALERS_NSEC
3219 * @arg @ref LL_RCC_PLL1_SEC & LL_RCC_PLL1_NSEC
3220 * @arg @ref LL_RCC_RESET_FLAGS_SEC & LL_RCC_RESET_FLAGS_NSEC
3221 * @retval None
3222 */
LL_RCC_GetConfigSecure(void)3223 __STATIC_INLINE uint32_t LL_RCC_GetConfigSecure(void)
3224 {
3225 return (uint32_t)(READ_BIT(RCC->SECCFGR, RCC_SECURE_MASK));
3226 }
3227
3228 /**
3229 * @}
3230 */
3231
3232 #if defined(USE_FULL_LL_DRIVER)
3233 /** @defgroup RCC_LL_EF_Init De-initialization function
3234 * @{
3235 */
3236 ErrorStatus LL_RCC_DeInit(void);
3237 /**
3238 * @}
3239 */
3240
3241 /** @defgroup RCC_LL_EF_Get_Freq Get system and peripherals clocks frequency functions
3242 * @{
3243 */
3244 void LL_RCC_GetSystemClocksFreq(LL_RCC_ClocksTypeDef *RCC_Clocks);
3245 uint32_t LL_RCC_GetADCClockFreq(uint32_t ADCxSource);
3246 uint32_t LL_RCC_GetI2CClockFreq(uint32_t I2CxSource);
3247 uint32_t LL_RCC_GetLPTIMClockFreq(uint32_t LPTIMxSource);
3248 uint32_t LL_RCC_GetLPUARTClockFreq(uint32_t LPUARTxSource);
3249 uint32_t LL_RCC_GetRNGClockFreq(uint32_t RNGxSource);
3250 uint32_t LL_RCC_GetSAIClockFreq(uint32_t SAIxSource);
3251 uint32_t LL_RCC_GetSPIClockFreq(uint32_t SPIxSource);
3252 uint32_t LL_RCC_GetUSARTClockFreq(uint32_t USARTxSource);
3253 /**
3254 * @}
3255 */
3256
3257 #endif /* USE_FULL_LL_DRIVER */
3258
3259 /**
3260 * @}
3261 */
3262
3263 /**
3264 * @}
3265 */
3266
3267 #endif /* defined(RCC) */
3268
3269 /**
3270 * @}
3271 */
3272
3273 #ifdef __cplusplus
3274 }
3275 #endif
3276
3277 #endif /* STM32WBAxx_LL_RCC_H */
3278
3279