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