1 /**
2 ******************************************************************************
3 * @file stm32l1xx_ll_rcc.h
4 * @author MCD Application Team
5 * @brief Header file of RCC LL module.
6 ******************************************************************************
7 * @attention
8 *
9 * Copyright (c) 2017 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 __STM32L1xx_LL_RCC_H
20 #define __STM32L1xx_LL_RCC_H
21
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25
26 /* Includes ------------------------------------------------------------------*/
27 #include "stm32l1xx.h"
28
29 /** @addtogroup STM32L1xx_LL_Driver
30 * @{
31 */
32
33 #if defined(RCC)
34
35 /** @defgroup RCC_LL RCC
36 * @{
37 */
38
39 /* Private types -------------------------------------------------------------*/
40 /* Private variables ---------------------------------------------------------*/
41 /* Private constants ---------------------------------------------------------*/
42 /* Private macros ------------------------------------------------------------*/
43 /* Exported types ------------------------------------------------------------*/
44 #if defined(USE_FULL_LL_DRIVER)
45 /** @defgroup RCC_LL_Exported_Types RCC Exported Types
46 * @{
47 */
48
49 /** @defgroup LL_ES_CLOCK_FREQ Clocks Frequency Structure
50 * @{
51 */
52
53 /**
54 * @brief RCC Clocks Frequency Structure
55 */
56 typedef struct
57 {
58 uint32_t SYSCLK_Frequency; /*!< SYSCLK clock frequency */
59 uint32_t HCLK_Frequency; /*!< HCLK clock frequency */
60 uint32_t PCLK1_Frequency; /*!< PCLK1 clock frequency */
61 uint32_t PCLK2_Frequency; /*!< PCLK2 clock frequency */
62 } LL_RCC_ClocksTypeDef;
63
64 /**
65 * @}
66 */
67
68 /**
69 * @}
70 */
71 #endif /* USE_FULL_LL_DRIVER */
72
73 /* Exported constants --------------------------------------------------------*/
74 /** @defgroup RCC_LL_Exported_Constants RCC Exported Constants
75 * @{
76 */
77
78 /** @defgroup RCC_LL_EC_OSC_VALUES Oscillator Values adaptation
79 * @brief Defines used to adapt values of different oscillators
80 * @note These values could be modified in the user environment according to
81 * HW set-up.
82 * @{
83 */
84 #if !defined (HSE_VALUE)
85 #define HSE_VALUE 8000000U /*!< Value of the HSE oscillator in Hz */
86 #endif /* HSE_VALUE */
87
88 #if !defined (HSI_VALUE)
89 #define HSI_VALUE 16000000U /*!< Value of the HSI oscillator in Hz */
90 #endif /* HSI_VALUE */
91
92 #if !defined (LSE_VALUE)
93 #define LSE_VALUE 32768U /*!< Value of the LSE oscillator in Hz */
94 #endif /* LSE_VALUE */
95
96 #if !defined (LSI_VALUE)
97 #define LSI_VALUE 37000U /*!< Value of the LSI oscillator in Hz */
98 #endif /* LSI_VALUE */
99 /**
100 * @}
101 */
102
103 /** @defgroup RCC_LL_EC_CLEAR_FLAG Clear Flags Defines
104 * @brief Flags defines which can be used with LL_RCC_WriteReg function
105 * @{
106 */
107 #define LL_RCC_CIR_LSIRDYC RCC_CIR_LSIRDYC /*!< LSI Ready Interrupt Clear */
108 #define LL_RCC_CIR_LSERDYC RCC_CIR_LSERDYC /*!< LSE Ready Interrupt Clear */
109 #define LL_RCC_CIR_HSIRDYC RCC_CIR_HSIRDYC /*!< HSI Ready Interrupt Clear */
110 #define LL_RCC_CIR_HSERDYC RCC_CIR_HSERDYC /*!< HSE Ready Interrupt Clear */
111 #define LL_RCC_CIR_PLLRDYC RCC_CIR_PLLRDYC /*!< PLL Ready Interrupt Clear */
112 #define LL_RCC_CIR_MSIRDYC RCC_CIR_MSIRDYC /*!< MSI Ready Interrupt Clear */
113 #if defined(RCC_LSECSS_SUPPORT)
114 #define LL_RCC_CIR_LSECSSC RCC_CIR_LSECSSC /*!< LSE Clock Security System Interrupt Clear */
115 #endif /* RCC_LSECSS_SUPPORT */
116 #define LL_RCC_CIR_CSSC RCC_CIR_CSSC /*!< Clock Security System Interrupt Clear */
117 /**
118 * @}
119 */
120
121 /** @defgroup RCC_LL_EC_GET_FLAG Get Flags Defines
122 * @brief Flags defines which can be used with LL_RCC_ReadReg function
123 * @{
124 */
125 #define LL_RCC_CIR_LSIRDYF RCC_CIR_LSIRDYF /*!< LSI Ready Interrupt flag */
126 #define LL_RCC_CIR_LSERDYF RCC_CIR_LSERDYF /*!< LSE Ready Interrupt flag */
127 #define LL_RCC_CIR_HSIRDYF RCC_CIR_HSIRDYF /*!< HSI Ready Interrupt flag */
128 #define LL_RCC_CIR_HSERDYF RCC_CIR_HSERDYF /*!< HSE Ready Interrupt flag */
129 #define LL_RCC_CIR_PLLRDYF RCC_CIR_PLLRDYF /*!< PLL Ready Interrupt flag */
130 #define LL_RCC_CIR_MSIRDYF RCC_CIR_MSIRDYF /*!< MSI Ready Interrupt flag */
131 #if defined(RCC_LSECSS_SUPPORT)
132 #define LL_RCC_CIR_LSECSSF RCC_CIR_LSECSSF /*!< LSE Clock Security System Interrupt flag */
133 #endif /* RCC_LSECSS_SUPPORT */
134 #define LL_RCC_CIR_CSSF RCC_CIR_CSSF /*!< Clock Security System Interrupt flag */
135 #define LL_RCC_CSR_OBLRSTF RCC_CSR_OBLRSTF /*!< OBL reset flag */
136 #define LL_RCC_CSR_PINRSTF RCC_CSR_PINRSTF /*!< PIN reset flag */
137 #define LL_RCC_CSR_PORRSTF RCC_CSR_PORRSTF /*!< POR/PDR reset flag */
138 #define LL_RCC_CSR_SFTRSTF RCC_CSR_SFTRSTF /*!< Software Reset flag */
139 #define LL_RCC_CSR_IWDGRSTF RCC_CSR_IWDGRSTF /*!< Independent Watchdog reset flag */
140 #define LL_RCC_CSR_WWDGRSTF RCC_CSR_WWDGRSTF /*!< Window watchdog reset flag */
141 #define LL_RCC_CSR_LPWRRSTF RCC_CSR_LPWRRSTF /*!< Low-Power reset flag */
142 /**
143 * @}
144 */
145
146 /** @defgroup RCC_LL_EC_IT IT Defines
147 * @brief IT defines which can be used with LL_RCC_ReadReg and LL_RCC_WriteReg functions
148 * @{
149 */
150 #define LL_RCC_CIR_LSIRDYIE RCC_CIR_LSIRDYIE /*!< LSI Ready Interrupt Enable */
151 #define LL_RCC_CIR_LSERDYIE RCC_CIR_LSERDYIE /*!< LSE Ready Interrupt Enable */
152 #define LL_RCC_CIR_HSIRDYIE RCC_CIR_HSIRDYIE /*!< HSI Ready Interrupt Enable */
153 #define LL_RCC_CIR_HSERDYIE RCC_CIR_HSERDYIE /*!< HSE Ready Interrupt Enable */
154 #define LL_RCC_CIR_PLLRDYIE RCC_CIR_PLLRDYIE /*!< PLL Ready Interrupt Enable */
155 #define LL_RCC_CIR_MSIRDYIE RCC_CIR_MSIRDYIE /*!< MSI Ready Interrupt Enable */
156 #if defined(RCC_LSECSS_SUPPORT)
157 #define LL_RCC_CIR_LSECSSIE RCC_CIR_LSECSSIE /*!< LSE CSS Interrupt Enable */
158 #endif /* RCC_LSECSS_SUPPORT */
159 /**
160 * @}
161 */
162
163 /** @defgroup RCC_LL_EC_RTC_HSE_DIV RTC HSE Prescaler
164 * @{
165 */
166 #define LL_RCC_RTC_HSE_DIV_2 0x00000000U /*!< HSE is divided by 2 for RTC clock */
167 #define LL_RCC_RTC_HSE_DIV_4 RCC_CR_RTCPRE_0 /*!< HSE is divided by 4 for RTC clock */
168 #define LL_RCC_RTC_HSE_DIV_8 RCC_CR_RTCPRE_1 /*!< HSE is divided by 8 for RTC clock */
169 #define LL_RCC_RTC_HSE_DIV_16 RCC_CR_RTCPRE /*!< HSE is divided by 16 for RTC clock */
170 /**
171 * @}
172 */
173
174 /** @defgroup RCC_LL_EC_MSIRANGE MSI clock ranges
175 * @{
176 */
177 #define LL_RCC_MSIRANGE_0 RCC_ICSCR_MSIRANGE_0 /*!< MSI = 65.536 KHz */
178 #define LL_RCC_MSIRANGE_1 RCC_ICSCR_MSIRANGE_1 /*!< MSI = 131.072 KHz*/
179 #define LL_RCC_MSIRANGE_2 RCC_ICSCR_MSIRANGE_2 /*!< MSI = 262.144 KHz */
180 #define LL_RCC_MSIRANGE_3 RCC_ICSCR_MSIRANGE_3 /*!< MSI = 524.288 KHz */
181 #define LL_RCC_MSIRANGE_4 RCC_ICSCR_MSIRANGE_4 /*!< MSI = 1.048 MHz */
182 #define LL_RCC_MSIRANGE_5 RCC_ICSCR_MSIRANGE_5 /*!< MSI = 2.097 MHz */
183 #define LL_RCC_MSIRANGE_6 RCC_ICSCR_MSIRANGE_6 /*!< MSI = 4.194 MHz */
184 /**
185 * @}
186 */
187
188 /** @defgroup RCC_LL_EC_SYS_CLKSOURCE System clock switch
189 * @{
190 */
191 #define LL_RCC_SYS_CLKSOURCE_MSI RCC_CFGR_SW_MSI /*!< MSI selection as system clock */
192 #define LL_RCC_SYS_CLKSOURCE_HSI RCC_CFGR_SW_HSI /*!< HSI selection as system clock */
193 #define LL_RCC_SYS_CLKSOURCE_HSE RCC_CFGR_SW_HSE /*!< HSE selection as system clock */
194 #define LL_RCC_SYS_CLKSOURCE_PLL RCC_CFGR_SW_PLL /*!< PLL selection as system clock */
195 /**
196 * @}
197 */
198
199 /** @defgroup RCC_LL_EC_SYS_CLKSOURCE_STATUS System clock switch status
200 * @{
201 */
202 #define LL_RCC_SYS_CLKSOURCE_STATUS_MSI RCC_CFGR_SWS_MSI /*!< MSI used as system clock */
203 #define LL_RCC_SYS_CLKSOURCE_STATUS_HSI RCC_CFGR_SWS_HSI /*!< HSI used as system clock */
204 #define LL_RCC_SYS_CLKSOURCE_STATUS_HSE RCC_CFGR_SWS_HSE /*!< HSE used as system clock */
205 #define LL_RCC_SYS_CLKSOURCE_STATUS_PLL RCC_CFGR_SWS_PLL /*!< PLL used as system clock */
206 /**
207 * @}
208 */
209
210 /** @defgroup RCC_LL_EC_SYSCLK_DIV AHB prescaler
211 * @{
212 */
213 #define LL_RCC_SYSCLK_DIV_1 RCC_CFGR_HPRE_DIV1 /*!< SYSCLK not divided */
214 #define LL_RCC_SYSCLK_DIV_2 RCC_CFGR_HPRE_DIV2 /*!< SYSCLK divided by 2 */
215 #define LL_RCC_SYSCLK_DIV_4 RCC_CFGR_HPRE_DIV4 /*!< SYSCLK divided by 4 */
216 #define LL_RCC_SYSCLK_DIV_8 RCC_CFGR_HPRE_DIV8 /*!< SYSCLK divided by 8 */
217 #define LL_RCC_SYSCLK_DIV_16 RCC_CFGR_HPRE_DIV16 /*!< SYSCLK divided by 16 */
218 #define LL_RCC_SYSCLK_DIV_64 RCC_CFGR_HPRE_DIV64 /*!< SYSCLK divided by 64 */
219 #define LL_RCC_SYSCLK_DIV_128 RCC_CFGR_HPRE_DIV128 /*!< SYSCLK divided by 128 */
220 #define LL_RCC_SYSCLK_DIV_256 RCC_CFGR_HPRE_DIV256 /*!< SYSCLK divided by 256 */
221 #define LL_RCC_SYSCLK_DIV_512 RCC_CFGR_HPRE_DIV512 /*!< SYSCLK divided by 512 */
222 /**
223 * @}
224 */
225
226 /** @defgroup RCC_LL_EC_APB1_DIV APB low-speed prescaler (APB1)
227 * @{
228 */
229 #define LL_RCC_APB1_DIV_1 RCC_CFGR_PPRE1_DIV1 /*!< HCLK not divided */
230 #define LL_RCC_APB1_DIV_2 RCC_CFGR_PPRE1_DIV2 /*!< HCLK divided by 2 */
231 #define LL_RCC_APB1_DIV_4 RCC_CFGR_PPRE1_DIV4 /*!< HCLK divided by 4 */
232 #define LL_RCC_APB1_DIV_8 RCC_CFGR_PPRE1_DIV8 /*!< HCLK divided by 8 */
233 #define LL_RCC_APB1_DIV_16 RCC_CFGR_PPRE1_DIV16 /*!< HCLK divided by 16 */
234 /**
235 * @}
236 */
237
238 /** @defgroup RCC_LL_EC_APB2_DIV APB high-speed prescaler (APB2)
239 * @{
240 */
241 #define LL_RCC_APB2_DIV_1 RCC_CFGR_PPRE2_DIV1 /*!< HCLK not divided */
242 #define LL_RCC_APB2_DIV_2 RCC_CFGR_PPRE2_DIV2 /*!< HCLK divided by 2 */
243 #define LL_RCC_APB2_DIV_4 RCC_CFGR_PPRE2_DIV4 /*!< HCLK divided by 4 */
244 #define LL_RCC_APB2_DIV_8 RCC_CFGR_PPRE2_DIV8 /*!< HCLK divided by 8 */
245 #define LL_RCC_APB2_DIV_16 RCC_CFGR_PPRE2_DIV16 /*!< HCLK divided by 16 */
246 /**
247 * @}
248 */
249
250 /** @defgroup RCC_LL_EC_MCO1SOURCE MCO1 SOURCE selection
251 * @{
252 */
253 #define LL_RCC_MCO1SOURCE_NOCLOCK RCC_CFGR_MCOSEL_NOCLOCK /*!< MCO output disabled, no clock on MCO */
254 #define LL_RCC_MCO1SOURCE_SYSCLK RCC_CFGR_MCOSEL_SYSCLK /*!< SYSCLK selection as MCO source */
255 #define LL_RCC_MCO1SOURCE_HSI RCC_CFGR_MCOSEL_HSI /*!< HSI selection as MCO source */
256 #define LL_RCC_MCO1SOURCE_MSI RCC_CFGR_MCOSEL_MSI /*!< MSI selection as MCO source */
257 #define LL_RCC_MCO1SOURCE_HSE RCC_CFGR_MCOSEL_HSE /*!< HSE selection as MCO source */
258 #define LL_RCC_MCO1SOURCE_LSI RCC_CFGR_MCOSEL_LSI /*!< LSI selection as MCO source */
259 #define LL_RCC_MCO1SOURCE_LSE RCC_CFGR_MCOSEL_LSE /*!< LSE selection as MCO source */
260 #define LL_RCC_MCO1SOURCE_PLLCLK RCC_CFGR_MCOSEL_PLL /*!< PLLCLK selection as MCO source */
261 /**
262 * @}
263 */
264
265 /** @defgroup RCC_LL_EC_MCO1_DIV MCO1 prescaler
266 * @{
267 */
268 #define LL_RCC_MCO1_DIV_1 RCC_CFGR_MCOPRE_DIV1 /*!< MCO Clock divided by 1 */
269 #define LL_RCC_MCO1_DIV_2 RCC_CFGR_MCOPRE_DIV2 /*!< MCO Clock divided by 2 */
270 #define LL_RCC_MCO1_DIV_4 RCC_CFGR_MCOPRE_DIV4 /*!< MCO Clock divided by 4 */
271 #define LL_RCC_MCO1_DIV_8 RCC_CFGR_MCOPRE_DIV8 /*!< MCO Clock divided by 8 */
272 #define LL_RCC_MCO1_DIV_16 RCC_CFGR_MCOPRE_DIV16 /*!< MCO Clock divided by 16 */
273 /**
274 * @}
275 */
276 #if defined(USE_FULL_LL_DRIVER)
277 /** @defgroup RCC_LL_EC_PERIPH_FREQUENCY Peripheral clock frequency
278 * @{
279 */
280 #define LL_RCC_PERIPH_FREQUENCY_NO 0x00000000U /*!< No clock enabled for the peripheral */
281 #define LL_RCC_PERIPH_FREQUENCY_NA 0xFFFFFFFFU /*!< Frequency cannot be provided as external clock */
282 /**
283 * @}
284 */
285 #endif /* USE_FULL_LL_DRIVER */
286
287
288
289 /** @defgroup RCC_LL_EC_RTC_CLKSOURCE RTC clock source selection
290 * @{
291 */
292 #define LL_RCC_RTC_CLKSOURCE_NONE 0x00000000U /*!< No clock used as RTC clock */
293 #define LL_RCC_RTC_CLKSOURCE_LSE RCC_CSR_RTCSEL_LSE /*!< LSE oscillator clock used as RTC clock */
294 #define LL_RCC_RTC_CLKSOURCE_LSI RCC_CSR_RTCSEL_LSI /*!< LSI oscillator clock used as RTC clock */
295 #define LL_RCC_RTC_CLKSOURCE_HSE RCC_CSR_RTCSEL_HSE /*!< HSE oscillator clock divided by a programmable prescaler
296 (selection through @ref LL_RCC_SetRTC_HSEPrescaler function ) */
297 /**
298 * @}
299 */
300
301 /** @defgroup RCC_LL_EC_PLL_MUL PLL Multiplicator factor
302 * @{
303 */
304 #define LL_RCC_PLL_MUL_3 RCC_CFGR_PLLMUL3 /*!< PLL input clock * 3 */
305 #define LL_RCC_PLL_MUL_4 RCC_CFGR_PLLMUL4 /*!< PLL input clock * 4 */
306 #define LL_RCC_PLL_MUL_6 RCC_CFGR_PLLMUL6 /*!< PLL input clock * 6 */
307 #define LL_RCC_PLL_MUL_8 RCC_CFGR_PLLMUL8 /*!< PLL input clock * 8 */
308 #define LL_RCC_PLL_MUL_12 RCC_CFGR_PLLMUL12 /*!< PLL input clock * 12 */
309 #define LL_RCC_PLL_MUL_16 RCC_CFGR_PLLMUL16 /*!< PLL input clock * 16 */
310 #define LL_RCC_PLL_MUL_24 RCC_CFGR_PLLMUL24 /*!< PLL input clock * 24 */
311 #define LL_RCC_PLL_MUL_32 RCC_CFGR_PLLMUL32 /*!< PLL input clock * 32 */
312 #define LL_RCC_PLL_MUL_48 RCC_CFGR_PLLMUL48 /*!< PLL input clock * 48 */
313 /**
314 * @}
315 */
316
317 /** @defgroup RCC_LL_EC_PLL_DIV PLL division factor
318 * @{
319 */
320 #define LL_RCC_PLL_DIV_2 RCC_CFGR_PLLDIV2 /*!< PLL clock output = PLLVCO / 2 */
321 #define LL_RCC_PLL_DIV_3 RCC_CFGR_PLLDIV3 /*!< PLL clock output = PLLVCO / 3 */
322 #define LL_RCC_PLL_DIV_4 RCC_CFGR_PLLDIV4 /*!< PLL clock output = PLLVCO / 4 */
323 /**
324 * @}
325 */
326
327 /** @defgroup RCC_LL_EC_PLLSOURCE PLL SOURCE
328 * @{
329 */
330 #define LL_RCC_PLLSOURCE_HSI RCC_CFGR_PLLSRC_HSI /*!< HSI clock selected as PLL entry clock source */
331 #define LL_RCC_PLLSOURCE_HSE RCC_CFGR_PLLSRC_HSE /*!< HSE clock selected as PLL entry clock source */
332 /**
333 * @}
334 */
335
336 /**
337 * @}
338 */
339
340 /* Exported macro ------------------------------------------------------------*/
341 /** @defgroup RCC_LL_Exported_Macros RCC Exported Macros
342 * @{
343 */
344
345 /** @defgroup RCC_LL_EM_WRITE_READ Common Write and read registers Macros
346 * @{
347 */
348
349 /**
350 * @brief Write a value in RCC register
351 * @param __REG__ Register to be written
352 * @param __VALUE__ Value to be written in the register
353 * @retval None
354 */
355 #define LL_RCC_WriteReg(__REG__, __VALUE__) WRITE_REG(RCC->__REG__, (__VALUE__))
356
357 /**
358 * @brief Read a value in RCC register
359 * @param __REG__ Register to be read
360 * @retval Register value
361 */
362 #define LL_RCC_ReadReg(__REG__) READ_REG(RCC->__REG__)
363 /**
364 * @}
365 */
366
367 /** @defgroup RCC_LL_EM_CALC_FREQ Calculate frequencies
368 * @{
369 */
370
371 /**
372 * @brief Helper macro to calculate the PLLCLK frequency
373 * @note ex: @ref __LL_RCC_CALC_PLLCLK_FREQ (HSE_VALUE,
374 * @ref LL_RCC_PLL_GetMultiplicator (),
375 * @ref LL_RCC_PLL_GetDivider ());
376 * @param __INPUTFREQ__ PLL Input frequency (based on MSI/HSE/HSI)
377 * @param __PLLMUL__ This parameter can be one of the following values:
378 * @arg @ref LL_RCC_PLL_MUL_3
379 * @arg @ref LL_RCC_PLL_MUL_4
380 * @arg @ref LL_RCC_PLL_MUL_6
381 * @arg @ref LL_RCC_PLL_MUL_8
382 * @arg @ref LL_RCC_PLL_MUL_12
383 * @arg @ref LL_RCC_PLL_MUL_16
384 * @arg @ref LL_RCC_PLL_MUL_24
385 * @arg @ref LL_RCC_PLL_MUL_32
386 * @arg @ref LL_RCC_PLL_MUL_48
387 * @param __PLLDIV__ This parameter can be one of the following values:
388 * @arg @ref LL_RCC_PLL_DIV_2
389 * @arg @ref LL_RCC_PLL_DIV_3
390 * @arg @ref LL_RCC_PLL_DIV_4
391 * @retval PLL clock frequency (in Hz)
392 */
393 #define __LL_RCC_CALC_PLLCLK_FREQ(__INPUTFREQ__, __PLLMUL__, __PLLDIV__) ((__INPUTFREQ__) * (PLLMulTable[(__PLLMUL__) >> RCC_CFGR_PLLMUL_Pos]) / (((__PLLDIV__) >> RCC_CFGR_PLLDIV_Pos)+1U))
394
395 /**
396 * @brief Helper macro to calculate the HCLK frequency
397 * @note: __AHBPRESCALER__ be retrieved by @ref LL_RCC_GetAHBPrescaler
398 * ex: __LL_RCC_CALC_HCLK_FREQ(LL_RCC_GetAHBPrescaler())
399 * @param __SYSCLKFREQ__ SYSCLK frequency (based on MSI/HSE/HSI/PLLCLK)
400 * @param __AHBPRESCALER__ This parameter can be one of the following values:
401 * @arg @ref LL_RCC_SYSCLK_DIV_1
402 * @arg @ref LL_RCC_SYSCLK_DIV_2
403 * @arg @ref LL_RCC_SYSCLK_DIV_4
404 * @arg @ref LL_RCC_SYSCLK_DIV_8
405 * @arg @ref LL_RCC_SYSCLK_DIV_16
406 * @arg @ref LL_RCC_SYSCLK_DIV_64
407 * @arg @ref LL_RCC_SYSCLK_DIV_128
408 * @arg @ref LL_RCC_SYSCLK_DIV_256
409 * @arg @ref LL_RCC_SYSCLK_DIV_512
410 * @retval HCLK clock frequency (in Hz)
411 */
412 #define __LL_RCC_CALC_HCLK_FREQ(__SYSCLKFREQ__, __AHBPRESCALER__) ((__SYSCLKFREQ__) >> AHBPrescTable[((__AHBPRESCALER__) & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos])
413
414 /**
415 * @brief Helper macro to calculate the PCLK1 frequency (ABP1)
416 * @note: __APB1PRESCALER__ be retrieved by @ref LL_RCC_GetAPB1Prescaler
417 * ex: __LL_RCC_CALC_PCLK1_FREQ(LL_RCC_GetAPB1Prescaler())
418 * @param __HCLKFREQ__ HCLK frequency
419 * @param __APB1PRESCALER__ This parameter can be one of the following values:
420 * @arg @ref LL_RCC_APB1_DIV_1
421 * @arg @ref LL_RCC_APB1_DIV_2
422 * @arg @ref LL_RCC_APB1_DIV_4
423 * @arg @ref LL_RCC_APB1_DIV_8
424 * @arg @ref LL_RCC_APB1_DIV_16
425 * @retval PCLK1 clock frequency (in Hz)
426 */
427 #define __LL_RCC_CALC_PCLK1_FREQ(__HCLKFREQ__, __APB1PRESCALER__) ((__HCLKFREQ__) >> APBPrescTable[(__APB1PRESCALER__) >> RCC_CFGR_PPRE1_Pos])
428
429 /**
430 * @brief Helper macro to calculate the PCLK2 frequency (ABP2)
431 * @note: __APB2PRESCALER__ be retrieved by @ref LL_RCC_GetAPB2Prescaler
432 * ex: __LL_RCC_CALC_PCLK2_FREQ(LL_RCC_GetAPB2Prescaler())
433 * @param __HCLKFREQ__ HCLK frequency
434 * @param __APB2PRESCALER__ This parameter can be one of the following values:
435 * @arg @ref LL_RCC_APB2_DIV_1
436 * @arg @ref LL_RCC_APB2_DIV_2
437 * @arg @ref LL_RCC_APB2_DIV_4
438 * @arg @ref LL_RCC_APB2_DIV_8
439 * @arg @ref LL_RCC_APB2_DIV_16
440 * @retval PCLK2 clock frequency (in Hz)
441 */
442 #define __LL_RCC_CALC_PCLK2_FREQ(__HCLKFREQ__, __APB2PRESCALER__) ((__HCLKFREQ__) >> APBPrescTable[(__APB2PRESCALER__) >> RCC_CFGR_PPRE2_Pos])
443
444 /**
445 * @brief Helper macro to calculate the MSI frequency (in Hz)
446 * @note: __MSIRANGE__can be retrieved by @ref LL_RCC_MSI_GetRange
447 * ex: __LL_RCC_CALC_MSI_FREQ(LL_RCC_MSI_GetRange())
448 * @param __MSIRANGE__ This parameter can be one of the following values:
449 * @arg @ref LL_RCC_MSIRANGE_0
450 * @arg @ref LL_RCC_MSIRANGE_1
451 * @arg @ref LL_RCC_MSIRANGE_2
452 * @arg @ref LL_RCC_MSIRANGE_3
453 * @arg @ref LL_RCC_MSIRANGE_4
454 * @arg @ref LL_RCC_MSIRANGE_5
455 * @arg @ref LL_RCC_MSIRANGE_6
456 * @retval MSI clock frequency (in Hz)
457 */
458 #define __LL_RCC_CALC_MSI_FREQ(__MSIRANGE__) ((32768U * ( 1UL << (((__MSIRANGE__) >> RCC_ICSCR_MSIRANGE_Pos) + 1U))))
459
460 /**
461 * @}
462 */
463
464 /**
465 * @}
466 */
467
468 /* Exported functions --------------------------------------------------------*/
469 /** @defgroup RCC_LL_Exported_Functions RCC Exported Functions
470 * @{
471 */
472
473 /** @defgroup RCC_LL_EF_HSE HSE
474 * @{
475 */
476
477 /**
478 * @brief Enable the Clock Security System.
479 * @rmtoll CR CSSON LL_RCC_HSE_EnableCSS
480 * @retval None
481 */
LL_RCC_HSE_EnableCSS(void)482 __STATIC_INLINE void LL_RCC_HSE_EnableCSS(void)
483 {
484 SET_BIT(RCC->CR, RCC_CR_CSSON);
485 }
486
487 /**
488 * @brief Disable the Clock Security System.
489 * @note Cannot be disabled in HSE is ready (only by hardware)
490 * @rmtoll CR CSSON LL_RCC_HSE_DisableCSS
491 * @retval None
492 */
LL_RCC_HSE_DisableCSS(void)493 __STATIC_INLINE void LL_RCC_HSE_DisableCSS(void)
494 {
495 CLEAR_BIT(RCC->CR, RCC_CR_CSSON);
496 }
497
498 /**
499 * @brief Enable HSE external oscillator (HSE Bypass)
500 * @rmtoll CR HSEBYP LL_RCC_HSE_EnableBypass
501 * @retval None
502 */
LL_RCC_HSE_EnableBypass(void)503 __STATIC_INLINE void LL_RCC_HSE_EnableBypass(void)
504 {
505 SET_BIT(RCC->CR, RCC_CR_HSEBYP);
506 }
507
508 /**
509 * @brief Disable HSE external oscillator (HSE Bypass)
510 * @rmtoll CR HSEBYP LL_RCC_HSE_DisableBypass
511 * @retval None
512 */
LL_RCC_HSE_DisableBypass(void)513 __STATIC_INLINE void LL_RCC_HSE_DisableBypass(void)
514 {
515 CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);
516 }
517
518 /**
519 * @brief Enable HSE crystal oscillator (HSE ON)
520 * @rmtoll CR HSEON LL_RCC_HSE_Enable
521 * @retval None
522 */
LL_RCC_HSE_Enable(void)523 __STATIC_INLINE void LL_RCC_HSE_Enable(void)
524 {
525 SET_BIT(RCC->CR, RCC_CR_HSEON);
526 }
527
528 /**
529 * @brief Disable HSE crystal oscillator (HSE ON)
530 * @rmtoll CR HSEON LL_RCC_HSE_Disable
531 * @retval None
532 */
LL_RCC_HSE_Disable(void)533 __STATIC_INLINE void LL_RCC_HSE_Disable(void)
534 {
535 CLEAR_BIT(RCC->CR, RCC_CR_HSEON);
536 }
537
538 /**
539 * @brief Check if HSE oscillator Ready
540 * @rmtoll CR HSERDY LL_RCC_HSE_IsReady
541 * @retval State of bit (1 or 0).
542 */
LL_RCC_HSE_IsReady(void)543 __STATIC_INLINE uint32_t LL_RCC_HSE_IsReady(void)
544 {
545 return ((READ_BIT(RCC->CR, RCC_CR_HSERDY) == RCC_CR_HSERDY) ? 1UL : 0UL);
546 }
547
548 /**
549 * @brief Configure the RTC prescaler (divider)
550 * @rmtoll CR RTCPRE LL_RCC_SetRTC_HSEPrescaler
551 * @param Div This parameter can be one of the following values:
552 * @arg @ref LL_RCC_RTC_HSE_DIV_2
553 * @arg @ref LL_RCC_RTC_HSE_DIV_4
554 * @arg @ref LL_RCC_RTC_HSE_DIV_8
555 * @arg @ref LL_RCC_RTC_HSE_DIV_16
556 * @retval None
557 */
LL_RCC_SetRTC_HSEPrescaler(uint32_t Div)558 __STATIC_INLINE void LL_RCC_SetRTC_HSEPrescaler(uint32_t Div)
559 {
560 MODIFY_REG(RCC->CR, RCC_CR_RTCPRE, Div);
561 }
562
563 /**
564 * @brief Get the RTC divider (prescaler)
565 * @rmtoll CR RTCPRE LL_RCC_GetRTC_HSEPrescaler
566 * @retval Returned value can be one of the following values:
567 * @arg @ref LL_RCC_RTC_HSE_DIV_2
568 * @arg @ref LL_RCC_RTC_HSE_DIV_4
569 * @arg @ref LL_RCC_RTC_HSE_DIV_8
570 * @arg @ref LL_RCC_RTC_HSE_DIV_16
571 */
LL_RCC_GetRTC_HSEPrescaler(void)572 __STATIC_INLINE uint32_t LL_RCC_GetRTC_HSEPrescaler(void)
573 {
574 return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_RTCPRE));
575 }
576
577 /**
578 * @}
579 */
580
581 /** @defgroup RCC_LL_EF_HSI HSI
582 * @{
583 */
584
585 /**
586 * @brief Enable HSI oscillator
587 * @rmtoll CR HSION LL_RCC_HSI_Enable
588 * @retval None
589 */
LL_RCC_HSI_Enable(void)590 __STATIC_INLINE void LL_RCC_HSI_Enable(void)
591 {
592 SET_BIT(RCC->CR, RCC_CR_HSION);
593 }
594
595 /**
596 * @brief Disable HSI oscillator
597 * @rmtoll CR HSION LL_RCC_HSI_Disable
598 * @retval None
599 */
LL_RCC_HSI_Disable(void)600 __STATIC_INLINE void LL_RCC_HSI_Disable(void)
601 {
602 CLEAR_BIT(RCC->CR, RCC_CR_HSION);
603 }
604
605 /**
606 * @brief Check if HSI clock is ready
607 * @rmtoll CR HSIRDY LL_RCC_HSI_IsReady
608 * @retval State of bit (1 or 0).
609 */
LL_RCC_HSI_IsReady(void)610 __STATIC_INLINE uint32_t LL_RCC_HSI_IsReady(void)
611 {
612 return ((READ_BIT(RCC->CR, RCC_CR_HSIRDY) == RCC_CR_HSIRDY) ? 1UL : 0UL);
613 }
614
615 /**
616 * @brief Get HSI Calibration value
617 * @note When HSITRIM is written, HSICAL is updated with the sum of
618 * HSITRIM and the factory trim value
619 * @rmtoll ICSCR HSICAL LL_RCC_HSI_GetCalibration
620 * @retval Between Min_Data = 0x00 and Max_Data = 0xFF
621 */
LL_RCC_HSI_GetCalibration(void)622 __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibration(void)
623 {
624 return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_HSICAL) >> RCC_ICSCR_HSICAL_Pos);
625 }
626
627 /**
628 * @brief Set HSI Calibration trimming
629 * @note user-programmable trimming value that is added to the HSICAL
630 * @note Default value is 16, which, when added to the HSICAL value,
631 * should trim the HSI to 16 MHz +/- 1 %
632 * @rmtoll ICSCR HSITRIM LL_RCC_HSI_SetCalibTrimming
633 * @param Value between Min_Data = 0x00 and Max_Data = 0x1F
634 * @retval None
635 */
LL_RCC_HSI_SetCalibTrimming(uint32_t Value)636 __STATIC_INLINE void LL_RCC_HSI_SetCalibTrimming(uint32_t Value)
637 {
638 MODIFY_REG(RCC->ICSCR, RCC_ICSCR_HSITRIM, Value << RCC_ICSCR_HSITRIM_Pos);
639 }
640
641 /**
642 * @brief Get HSI Calibration trimming
643 * @rmtoll ICSCR HSITRIM LL_RCC_HSI_GetCalibTrimming
644 * @retval Between Min_Data = 0x00 and Max_Data = 0x1F
645 */
LL_RCC_HSI_GetCalibTrimming(void)646 __STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibTrimming(void)
647 {
648 return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_HSITRIM) >> RCC_ICSCR_HSITRIM_Pos);
649 }
650
651 /**
652 * @}
653 */
654
655 /** @defgroup RCC_LL_EF_LSE LSE
656 * @{
657 */
658
659 /**
660 * @brief Enable Low Speed External (LSE) crystal.
661 * @rmtoll CSR LSEON LL_RCC_LSE_Enable
662 * @retval None
663 */
LL_RCC_LSE_Enable(void)664 __STATIC_INLINE void LL_RCC_LSE_Enable(void)
665 {
666 SET_BIT(RCC->CSR, RCC_CSR_LSEON);
667 }
668
669 /**
670 * @brief Disable Low Speed External (LSE) crystal.
671 * @rmtoll CSR LSEON LL_RCC_LSE_Disable
672 * @retval None
673 */
LL_RCC_LSE_Disable(void)674 __STATIC_INLINE void LL_RCC_LSE_Disable(void)
675 {
676 CLEAR_BIT(RCC->CSR, RCC_CSR_LSEON);
677 }
678
679 /**
680 * @brief Enable external clock source (LSE bypass).
681 * @rmtoll CSR LSEBYP LL_RCC_LSE_EnableBypass
682 * @retval None
683 */
LL_RCC_LSE_EnableBypass(void)684 __STATIC_INLINE void LL_RCC_LSE_EnableBypass(void)
685 {
686 SET_BIT(RCC->CSR, RCC_CSR_LSEBYP);
687 }
688
689 /**
690 * @brief Disable external clock source (LSE bypass).
691 * @rmtoll CSR LSEBYP LL_RCC_LSE_DisableBypass
692 * @retval None
693 */
LL_RCC_LSE_DisableBypass(void)694 __STATIC_INLINE void LL_RCC_LSE_DisableBypass(void)
695 {
696 CLEAR_BIT(RCC->CSR, RCC_CSR_LSEBYP);
697 }
698
699 #if defined(RCC_LSECSS_SUPPORT)
700 /**
701 * @brief Enable Clock security system on LSE.
702 * @rmtoll CSR LSECSSON LL_RCC_LSE_EnableCSS
703 * @retval None
704 */
LL_RCC_LSE_EnableCSS(void)705 __STATIC_INLINE void LL_RCC_LSE_EnableCSS(void)
706 {
707 SET_BIT(RCC->CSR, RCC_CSR_LSECSSON);
708 }
709
710 /**
711 * @brief Disable Clock security system on LSE.
712 * @note Clock security system can be disabled only after a LSE
713 * failure detection. In that case it MUST be disabled by software.
714 * @rmtoll CSR LSECSSON LL_RCC_LSE_DisableCSS
715 * @retval None
716 */
LL_RCC_LSE_DisableCSS(void)717 __STATIC_INLINE void LL_RCC_LSE_DisableCSS(void)
718 {
719 CLEAR_BIT(RCC->CSR, RCC_CSR_LSECSSON);
720 }
721
722 #endif /* RCC_LSECSS_SUPPORT */
723 /**
724 * @brief Check if LSE oscillator Ready
725 * @rmtoll CSR LSERDY LL_RCC_LSE_IsReady
726 * @retval State of bit (1 or 0).
727 */
LL_RCC_LSE_IsReady(void)728 __STATIC_INLINE uint32_t LL_RCC_LSE_IsReady(void)
729 {
730 return ((READ_BIT(RCC->CSR, RCC_CSR_LSERDY) == RCC_CSR_LSERDY) ? 1UL : 0UL);
731 }
732
733 #if defined(RCC_LSECSS_SUPPORT)
734 /**
735 * @brief Check if CSS on LSE failure Detection
736 * @rmtoll CSR LSECSSD LL_RCC_LSE_IsCSSDetected
737 * @retval State of bit (1 or 0).
738 */
LL_RCC_LSE_IsCSSDetected(void)739 __STATIC_INLINE uint32_t LL_RCC_LSE_IsCSSDetected(void)
740 {
741 return ((READ_BIT(RCC->CSR, RCC_CSR_LSECSSD) == RCC_CSR_LSECSSD) ? 1UL : 0UL);
742 }
743
744 #endif /* RCC_LSECSS_SUPPORT */
745 /**
746 * @}
747 */
748
749 /** @defgroup RCC_LL_EF_LSI LSI
750 * @{
751 */
752
753 /**
754 * @brief Enable LSI Oscillator
755 * @rmtoll CSR LSION LL_RCC_LSI_Enable
756 * @retval None
757 */
LL_RCC_LSI_Enable(void)758 __STATIC_INLINE void LL_RCC_LSI_Enable(void)
759 {
760 SET_BIT(RCC->CSR, RCC_CSR_LSION);
761 }
762
763 /**
764 * @brief Disable LSI Oscillator
765 * @rmtoll CSR LSION LL_RCC_LSI_Disable
766 * @retval None
767 */
LL_RCC_LSI_Disable(void)768 __STATIC_INLINE void LL_RCC_LSI_Disable(void)
769 {
770 CLEAR_BIT(RCC->CSR, RCC_CSR_LSION);
771 }
772
773 /**
774 * @brief Check if LSI is Ready
775 * @rmtoll CSR LSIRDY LL_RCC_LSI_IsReady
776 * @retval State of bit (1 or 0).
777 */
LL_RCC_LSI_IsReady(void)778 __STATIC_INLINE uint32_t LL_RCC_LSI_IsReady(void)
779 {
780 return ((READ_BIT(RCC->CSR, RCC_CSR_LSIRDY) == RCC_CSR_LSIRDY) ? 1UL : 0UL);
781 }
782
783 /**
784 * @}
785 */
786
787 /** @defgroup RCC_LL_EF_MSI MSI
788 * @{
789 */
790
791 /**
792 * @brief Enable MSI oscillator
793 * @rmtoll CR MSION LL_RCC_MSI_Enable
794 * @retval None
795 */
LL_RCC_MSI_Enable(void)796 __STATIC_INLINE void LL_RCC_MSI_Enable(void)
797 {
798 SET_BIT(RCC->CR, RCC_CR_MSION);
799 }
800
801 /**
802 * @brief Disable MSI oscillator
803 * @rmtoll CR MSION LL_RCC_MSI_Disable
804 * @retval None
805 */
LL_RCC_MSI_Disable(void)806 __STATIC_INLINE void LL_RCC_MSI_Disable(void)
807 {
808 CLEAR_BIT(RCC->CR, RCC_CR_MSION);
809 }
810
811 /**
812 * @brief Check if MSI oscillator Ready
813 * @rmtoll CR MSIRDY LL_RCC_MSI_IsReady
814 * @retval State of bit (1 or 0).
815 */
LL_RCC_MSI_IsReady(void)816 __STATIC_INLINE uint32_t LL_RCC_MSI_IsReady(void)
817 {
818 return ((READ_BIT(RCC->CR, RCC_CR_MSIRDY) == RCC_CR_MSIRDY) ? 1UL : 0UL);
819 }
820
821 /**
822 * @brief Configure the Internal Multi Speed oscillator (MSI) clock range in run mode.
823 * @rmtoll ICSCR MSIRANGE LL_RCC_MSI_SetRange
824 * @param Range This parameter can be one of the following values:
825 * @arg @ref LL_RCC_MSIRANGE_0
826 * @arg @ref LL_RCC_MSIRANGE_1
827 * @arg @ref LL_RCC_MSIRANGE_2
828 * @arg @ref LL_RCC_MSIRANGE_3
829 * @arg @ref LL_RCC_MSIRANGE_4
830 * @arg @ref LL_RCC_MSIRANGE_5
831 * @arg @ref LL_RCC_MSIRANGE_6
832 * @retval None
833 */
LL_RCC_MSI_SetRange(uint32_t Range)834 __STATIC_INLINE void LL_RCC_MSI_SetRange(uint32_t Range)
835 {
836 MODIFY_REG(RCC->ICSCR, RCC_ICSCR_MSIRANGE, Range);
837 }
838
839 /**
840 * @brief Get the Internal Multi Speed oscillator (MSI) clock range in run mode.
841 * @rmtoll ICSCR MSIRANGE LL_RCC_MSI_GetRange
842 * @retval Returned value can be one of the following values:
843 * @arg @ref LL_RCC_MSIRANGE_0
844 * @arg @ref LL_RCC_MSIRANGE_1
845 * @arg @ref LL_RCC_MSIRANGE_2
846 * @arg @ref LL_RCC_MSIRANGE_3
847 * @arg @ref LL_RCC_MSIRANGE_4
848 * @arg @ref LL_RCC_MSIRANGE_5
849 * @arg @ref LL_RCC_MSIRANGE_6
850 */
LL_RCC_MSI_GetRange(void)851 __STATIC_INLINE uint32_t LL_RCC_MSI_GetRange(void)
852 {
853 return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_MSIRANGE));
854 }
855
856 /**
857 * @brief Get MSI Calibration value
858 * @note When MSITRIM is written, MSICAL is updated with the sum of
859 * MSITRIM and the factory trim value
860 * @rmtoll ICSCR MSICAL LL_RCC_MSI_GetCalibration
861 * @retval Between Min_Data = 0x00 and Max_Data = 0xFF
862 */
LL_RCC_MSI_GetCalibration(void)863 __STATIC_INLINE uint32_t LL_RCC_MSI_GetCalibration(void)
864 {
865 return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_MSICAL) >> RCC_ICSCR_MSICAL_Pos);
866 }
867
868 /**
869 * @brief Set MSI Calibration trimming
870 * @note user-programmable trimming value that is added to the MSICAL
871 * @rmtoll ICSCR MSITRIM LL_RCC_MSI_SetCalibTrimming
872 * @param Value between Min_Data = 0x00 and Max_Data = 0xFF
873 * @retval None
874 */
LL_RCC_MSI_SetCalibTrimming(uint32_t Value)875 __STATIC_INLINE void LL_RCC_MSI_SetCalibTrimming(uint32_t Value)
876 {
877 MODIFY_REG(RCC->ICSCR, RCC_ICSCR_MSITRIM, Value << RCC_ICSCR_MSITRIM_Pos);
878 }
879
880 /**
881 * @brief Get MSI Calibration trimming
882 * @rmtoll ICSCR MSITRIM LL_RCC_MSI_GetCalibTrimming
883 * @retval Between Min_Data = 0x00 and Max_Data = 0xFF
884 */
LL_RCC_MSI_GetCalibTrimming(void)885 __STATIC_INLINE uint32_t LL_RCC_MSI_GetCalibTrimming(void)
886 {
887 return (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_MSITRIM) >> RCC_ICSCR_MSITRIM_Pos);
888 }
889
890 /**
891 * @}
892 */
893
894 /** @defgroup RCC_LL_EF_System System
895 * @{
896 */
897
898 /**
899 * @brief Configure the system clock source
900 * @rmtoll CFGR SW LL_RCC_SetSysClkSource
901 * @param Source This parameter can be one of the following values:
902 * @arg @ref LL_RCC_SYS_CLKSOURCE_MSI
903 * @arg @ref LL_RCC_SYS_CLKSOURCE_HSI
904 * @arg @ref LL_RCC_SYS_CLKSOURCE_HSE
905 * @arg @ref LL_RCC_SYS_CLKSOURCE_PLL
906 * @retval None
907 */
LL_RCC_SetSysClkSource(uint32_t Source)908 __STATIC_INLINE void LL_RCC_SetSysClkSource(uint32_t Source)
909 {
910 MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, Source);
911 }
912
913 /**
914 * @brief Get the system clock source
915 * @rmtoll CFGR SWS LL_RCC_GetSysClkSource
916 * @retval Returned value can be one of the following values:
917 * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_MSI
918 * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSI
919 * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSE
920 * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_PLL
921 */
LL_RCC_GetSysClkSource(void)922 __STATIC_INLINE uint32_t LL_RCC_GetSysClkSource(void)
923 {
924 return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS));
925 }
926
927 /**
928 * @brief Set AHB prescaler
929 * @rmtoll CFGR HPRE LL_RCC_SetAHBPrescaler
930 * @param Prescaler This parameter can be one of the following values:
931 * @arg @ref LL_RCC_SYSCLK_DIV_1
932 * @arg @ref LL_RCC_SYSCLK_DIV_2
933 * @arg @ref LL_RCC_SYSCLK_DIV_4
934 * @arg @ref LL_RCC_SYSCLK_DIV_8
935 * @arg @ref LL_RCC_SYSCLK_DIV_16
936 * @arg @ref LL_RCC_SYSCLK_DIV_64
937 * @arg @ref LL_RCC_SYSCLK_DIV_128
938 * @arg @ref LL_RCC_SYSCLK_DIV_256
939 * @arg @ref LL_RCC_SYSCLK_DIV_512
940 * @retval None
941 */
LL_RCC_SetAHBPrescaler(uint32_t Prescaler)942 __STATIC_INLINE void LL_RCC_SetAHBPrescaler(uint32_t Prescaler)
943 {
944 MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, Prescaler);
945 }
946
947 /**
948 * @brief Set APB1 prescaler
949 * @rmtoll CFGR PPRE1 LL_RCC_SetAPB1Prescaler
950 * @param Prescaler This parameter can be one of the following values:
951 * @arg @ref LL_RCC_APB1_DIV_1
952 * @arg @ref LL_RCC_APB1_DIV_2
953 * @arg @ref LL_RCC_APB1_DIV_4
954 * @arg @ref LL_RCC_APB1_DIV_8
955 * @arg @ref LL_RCC_APB1_DIV_16
956 * @retval None
957 */
LL_RCC_SetAPB1Prescaler(uint32_t Prescaler)958 __STATIC_INLINE void LL_RCC_SetAPB1Prescaler(uint32_t Prescaler)
959 {
960 MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, Prescaler);
961 }
962
963 /**
964 * @brief Set APB2 prescaler
965 * @rmtoll CFGR PPRE2 LL_RCC_SetAPB2Prescaler
966 * @param Prescaler This parameter can be one of the following values:
967 * @arg @ref LL_RCC_APB2_DIV_1
968 * @arg @ref LL_RCC_APB2_DIV_2
969 * @arg @ref LL_RCC_APB2_DIV_4
970 * @arg @ref LL_RCC_APB2_DIV_8
971 * @arg @ref LL_RCC_APB2_DIV_16
972 * @retval None
973 */
LL_RCC_SetAPB2Prescaler(uint32_t Prescaler)974 __STATIC_INLINE void LL_RCC_SetAPB2Prescaler(uint32_t Prescaler)
975 {
976 MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, Prescaler);
977 }
978
979 /**
980 * @brief Get AHB prescaler
981 * @rmtoll CFGR HPRE LL_RCC_GetAHBPrescaler
982 * @retval Returned value can be one of the following values:
983 * @arg @ref LL_RCC_SYSCLK_DIV_1
984 * @arg @ref LL_RCC_SYSCLK_DIV_2
985 * @arg @ref LL_RCC_SYSCLK_DIV_4
986 * @arg @ref LL_RCC_SYSCLK_DIV_8
987 * @arg @ref LL_RCC_SYSCLK_DIV_16
988 * @arg @ref LL_RCC_SYSCLK_DIV_64
989 * @arg @ref LL_RCC_SYSCLK_DIV_128
990 * @arg @ref LL_RCC_SYSCLK_DIV_256
991 * @arg @ref LL_RCC_SYSCLK_DIV_512
992 */
LL_RCC_GetAHBPrescaler(void)993 __STATIC_INLINE uint32_t LL_RCC_GetAHBPrescaler(void)
994 {
995 return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_HPRE));
996 }
997
998 /**
999 * @brief Get APB1 prescaler
1000 * @rmtoll CFGR PPRE1 LL_RCC_GetAPB1Prescaler
1001 * @retval Returned value can be one of the following values:
1002 * @arg @ref LL_RCC_APB1_DIV_1
1003 * @arg @ref LL_RCC_APB1_DIV_2
1004 * @arg @ref LL_RCC_APB1_DIV_4
1005 * @arg @ref LL_RCC_APB1_DIV_8
1006 * @arg @ref LL_RCC_APB1_DIV_16
1007 */
LL_RCC_GetAPB1Prescaler(void)1008 __STATIC_INLINE uint32_t LL_RCC_GetAPB1Prescaler(void)
1009 {
1010 return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE1));
1011 }
1012
1013 /**
1014 * @brief Get APB2 prescaler
1015 * @rmtoll CFGR PPRE2 LL_RCC_GetAPB2Prescaler
1016 * @retval Returned value can be one of the following values:
1017 * @arg @ref LL_RCC_APB2_DIV_1
1018 * @arg @ref LL_RCC_APB2_DIV_2
1019 * @arg @ref LL_RCC_APB2_DIV_4
1020 * @arg @ref LL_RCC_APB2_DIV_8
1021 * @arg @ref LL_RCC_APB2_DIV_16
1022 */
LL_RCC_GetAPB2Prescaler(void)1023 __STATIC_INLINE uint32_t LL_RCC_GetAPB2Prescaler(void)
1024 {
1025 return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE2));
1026 }
1027
1028 /**
1029 * @}
1030 */
1031
1032 /** @defgroup RCC_LL_EF_MCO MCO
1033 * @{
1034 */
1035
1036 /**
1037 * @brief Configure MCOx
1038 * @rmtoll CFGR MCOSEL LL_RCC_ConfigMCO\n
1039 * CFGR MCOPRE LL_RCC_ConfigMCO
1040 * @param MCOxSource This parameter can be one of the following values:
1041 * @arg @ref LL_RCC_MCO1SOURCE_NOCLOCK
1042 * @arg @ref LL_RCC_MCO1SOURCE_SYSCLK
1043 * @arg @ref LL_RCC_MCO1SOURCE_HSI
1044 * @arg @ref LL_RCC_MCO1SOURCE_MSI
1045 * @arg @ref LL_RCC_MCO1SOURCE_HSE
1046 * @arg @ref LL_RCC_MCO1SOURCE_PLLCLK
1047 * @arg @ref LL_RCC_MCO1SOURCE_LSI
1048 * @arg @ref LL_RCC_MCO1SOURCE_LSE
1049 * @param MCOxPrescaler This parameter can be one of the following values:
1050 * @arg @ref LL_RCC_MCO1_DIV_1
1051 * @arg @ref LL_RCC_MCO1_DIV_2
1052 * @arg @ref LL_RCC_MCO1_DIV_4
1053 * @arg @ref LL_RCC_MCO1_DIV_8
1054 * @arg @ref LL_RCC_MCO1_DIV_16
1055 * @retval None
1056 */
LL_RCC_ConfigMCO(uint32_t MCOxSource,uint32_t MCOxPrescaler)1057 __STATIC_INLINE void LL_RCC_ConfigMCO(uint32_t MCOxSource, uint32_t MCOxPrescaler)
1058 {
1059 MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL | RCC_CFGR_MCOPRE, MCOxSource | MCOxPrescaler);
1060 }
1061
1062 /**
1063 * @}
1064 */
1065
1066
1067
1068 /** @defgroup RCC_LL_EF_RTC RTC
1069 * @{
1070 */
1071
1072 /**
1073 * @brief Set RTC Clock Source
1074 * @note Once the RTC clock source has been selected, it cannot be changed any more unless
1075 * the Backup domain is reset, or unless a failure is detected on LSE (LSECSSD is
1076 * set). The RTCRST bit can be used to reset them.
1077 * @rmtoll CSR RTCSEL LL_RCC_SetRTCClockSource
1078 * @param Source This parameter can be one of the following values:
1079 * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
1080 * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
1081 * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
1082 * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE
1083 * @retval None
1084 */
LL_RCC_SetRTCClockSource(uint32_t Source)1085 __STATIC_INLINE void LL_RCC_SetRTCClockSource(uint32_t Source)
1086 {
1087 MODIFY_REG(RCC->CSR, RCC_CSR_RTCSEL, Source);
1088 }
1089
1090 /**
1091 * @brief Get RTC Clock Source
1092 * @rmtoll CSR RTCSEL LL_RCC_GetRTCClockSource
1093 * @retval Returned value can be one of the following values:
1094 * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE
1095 * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE
1096 * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI
1097 * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE
1098 */
LL_RCC_GetRTCClockSource(void)1099 __STATIC_INLINE uint32_t LL_RCC_GetRTCClockSource(void)
1100 {
1101 return (uint32_t)(READ_BIT(RCC->CSR, RCC_CSR_RTCSEL));
1102 }
1103
1104 /**
1105 * @brief Enable RTC
1106 * @rmtoll CSR RTCEN LL_RCC_EnableRTC
1107 * @retval None
1108 */
LL_RCC_EnableRTC(void)1109 __STATIC_INLINE void LL_RCC_EnableRTC(void)
1110 {
1111 SET_BIT(RCC->CSR, RCC_CSR_RTCEN);
1112 }
1113
1114 /**
1115 * @brief Disable RTC
1116 * @rmtoll CSR RTCEN LL_RCC_DisableRTC
1117 * @retval None
1118 */
LL_RCC_DisableRTC(void)1119 __STATIC_INLINE void LL_RCC_DisableRTC(void)
1120 {
1121 CLEAR_BIT(RCC->CSR, RCC_CSR_RTCEN);
1122 }
1123
1124 /**
1125 * @brief Check if RTC has been enabled or not
1126 * @rmtoll CSR RTCEN LL_RCC_IsEnabledRTC
1127 * @retval State of bit (1 or 0).
1128 */
LL_RCC_IsEnabledRTC(void)1129 __STATIC_INLINE uint32_t LL_RCC_IsEnabledRTC(void)
1130 {
1131 return ((READ_BIT(RCC->CSR, RCC_CSR_RTCEN) == RCC_CSR_RTCEN) ? 1UL : 0UL);
1132 }
1133
1134 /**
1135 * @brief Force the Backup domain reset
1136 * @rmtoll CSR RTCRST LL_RCC_ForceBackupDomainReset
1137 * @retval None
1138 */
LL_RCC_ForceBackupDomainReset(void)1139 __STATIC_INLINE void LL_RCC_ForceBackupDomainReset(void)
1140 {
1141 SET_BIT(RCC->CSR, RCC_CSR_RTCRST);
1142 }
1143
1144 /**
1145 * @brief Release the Backup domain reset
1146 * @rmtoll CSR RTCRST LL_RCC_ReleaseBackupDomainReset
1147 * @retval None
1148 */
LL_RCC_ReleaseBackupDomainReset(void)1149 __STATIC_INLINE void LL_RCC_ReleaseBackupDomainReset(void)
1150 {
1151 CLEAR_BIT(RCC->CSR, RCC_CSR_RTCRST);
1152 }
1153
1154 /**
1155 * @}
1156 */
1157
1158 /** @defgroup RCC_LL_EF_PLL PLL
1159 * @{
1160 */
1161
1162 /**
1163 * @brief Enable PLL
1164 * @rmtoll CR PLLON LL_RCC_PLL_Enable
1165 * @retval None
1166 */
LL_RCC_PLL_Enable(void)1167 __STATIC_INLINE void LL_RCC_PLL_Enable(void)
1168 {
1169 SET_BIT(RCC->CR, RCC_CR_PLLON);
1170 }
1171
1172 /**
1173 * @brief Disable PLL
1174 * @note Cannot be disabled if the PLL clock is used as the system clock
1175 * @rmtoll CR PLLON LL_RCC_PLL_Disable
1176 * @retval None
1177 */
LL_RCC_PLL_Disable(void)1178 __STATIC_INLINE void LL_RCC_PLL_Disable(void)
1179 {
1180 CLEAR_BIT(RCC->CR, RCC_CR_PLLON);
1181 }
1182
1183 /**
1184 * @brief Check if PLL Ready
1185 * @rmtoll CR PLLRDY LL_RCC_PLL_IsReady
1186 * @retval State of bit (1 or 0).
1187 */
LL_RCC_PLL_IsReady(void)1188 __STATIC_INLINE uint32_t LL_RCC_PLL_IsReady(void)
1189 {
1190 return ((READ_BIT(RCC->CR, RCC_CR_PLLRDY) == RCC_CR_PLLRDY) ? 1UL : 0UL);
1191 }
1192
1193 /**
1194 * @brief Configure PLL used for SYSCLK Domain
1195 * @rmtoll CFGR PLLSRC LL_RCC_PLL_ConfigDomain_SYS\n
1196 * CFGR PLLMUL LL_RCC_PLL_ConfigDomain_SYS\n
1197 * CFGR PLLDIV LL_RCC_PLL_ConfigDomain_SYS
1198 * @param Source This parameter can be one of the following values:
1199 * @arg @ref LL_RCC_PLLSOURCE_HSI
1200 * @arg @ref LL_RCC_PLLSOURCE_HSE
1201 * @param PLLMul This parameter can be one of the following values:
1202 * @arg @ref LL_RCC_PLL_MUL_3
1203 * @arg @ref LL_RCC_PLL_MUL_4
1204 * @arg @ref LL_RCC_PLL_MUL_6
1205 * @arg @ref LL_RCC_PLL_MUL_8
1206 * @arg @ref LL_RCC_PLL_MUL_12
1207 * @arg @ref LL_RCC_PLL_MUL_16
1208 * @arg @ref LL_RCC_PLL_MUL_24
1209 * @arg @ref LL_RCC_PLL_MUL_32
1210 * @arg @ref LL_RCC_PLL_MUL_48
1211 * @param PLLDiv This parameter can be one of the following values:
1212 * @arg @ref LL_RCC_PLL_DIV_2
1213 * @arg @ref LL_RCC_PLL_DIV_3
1214 * @arg @ref LL_RCC_PLL_DIV_4
1215 * @retval None
1216 */
LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source,uint32_t PLLMul,uint32_t PLLDiv)1217 __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLMul, uint32_t PLLDiv)
1218 {
1219 MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL | RCC_CFGR_PLLDIV, Source | PLLMul | PLLDiv);
1220 }
1221
1222 /**
1223 * @brief Configure PLL clock source
1224 * @rmtoll CFGR PLLSRC LL_RCC_PLL_SetMainSource
1225 * @param PLLSource This parameter can be one of the following values:
1226 * @arg @ref LL_RCC_PLLSOURCE_HSI
1227 * @arg @ref LL_RCC_PLLSOURCE_HSE
1228 * @retval None
1229 */
LL_RCC_PLL_SetMainSource(uint32_t PLLSource)1230 __STATIC_INLINE void LL_RCC_PLL_SetMainSource(uint32_t PLLSource)
1231 {
1232 MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLSRC, PLLSource);
1233 }
1234
1235 /**
1236 * @brief Get the oscillator used as PLL clock source.
1237 * @rmtoll CFGR PLLSRC LL_RCC_PLL_GetMainSource
1238 * @retval Returned value can be one of the following values:
1239 * @arg @ref LL_RCC_PLLSOURCE_HSI
1240 * @arg @ref LL_RCC_PLLSOURCE_HSE
1241 */
LL_RCC_PLL_GetMainSource(void)1242 __STATIC_INLINE uint32_t LL_RCC_PLL_GetMainSource(void)
1243 {
1244 return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC));
1245 }
1246
1247 /**
1248 * @brief Get PLL multiplication Factor
1249 * @rmtoll CFGR PLLMUL LL_RCC_PLL_GetMultiplicator
1250 * @retval Returned value can be one of the following values:
1251 * @arg @ref LL_RCC_PLL_MUL_3
1252 * @arg @ref LL_RCC_PLL_MUL_4
1253 * @arg @ref LL_RCC_PLL_MUL_6
1254 * @arg @ref LL_RCC_PLL_MUL_8
1255 * @arg @ref LL_RCC_PLL_MUL_12
1256 * @arg @ref LL_RCC_PLL_MUL_16
1257 * @arg @ref LL_RCC_PLL_MUL_24
1258 * @arg @ref LL_RCC_PLL_MUL_32
1259 * @arg @ref LL_RCC_PLL_MUL_48
1260 */
LL_RCC_PLL_GetMultiplicator(void)1261 __STATIC_INLINE uint32_t LL_RCC_PLL_GetMultiplicator(void)
1262 {
1263 return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLMUL));
1264 }
1265
1266 /**
1267 * @brief Get Division factor for the main PLL and other PLL
1268 * @rmtoll CFGR PLLDIV LL_RCC_PLL_GetDivider
1269 * @retval Returned value can be one of the following values:
1270 * @arg @ref LL_RCC_PLL_DIV_2
1271 * @arg @ref LL_RCC_PLL_DIV_3
1272 * @arg @ref LL_RCC_PLL_DIV_4
1273 */
LL_RCC_PLL_GetDivider(void)1274 __STATIC_INLINE uint32_t LL_RCC_PLL_GetDivider(void)
1275 {
1276 return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLDIV));
1277 }
1278
1279 /**
1280 * @}
1281 */
1282
1283 /** @defgroup RCC_LL_EF_FLAG_Management FLAG Management
1284 * @{
1285 */
1286
1287 /**
1288 * @brief Clear LSI ready interrupt flag
1289 * @rmtoll CIR LSIRDYC LL_RCC_ClearFlag_LSIRDY
1290 * @retval None
1291 */
LL_RCC_ClearFlag_LSIRDY(void)1292 __STATIC_INLINE void LL_RCC_ClearFlag_LSIRDY(void)
1293 {
1294 SET_BIT(RCC->CIR, RCC_CIR_LSIRDYC);
1295 }
1296
1297 /**
1298 * @brief Clear LSE ready interrupt flag
1299 * @rmtoll CIR LSERDYC LL_RCC_ClearFlag_LSERDY
1300 * @retval None
1301 */
LL_RCC_ClearFlag_LSERDY(void)1302 __STATIC_INLINE void LL_RCC_ClearFlag_LSERDY(void)
1303 {
1304 SET_BIT(RCC->CIR, RCC_CIR_LSERDYC);
1305 }
1306
1307 /**
1308 * @brief Clear MSI ready interrupt flag
1309 * @rmtoll CIR MSIRDYC LL_RCC_ClearFlag_MSIRDY
1310 * @retval None
1311 */
LL_RCC_ClearFlag_MSIRDY(void)1312 __STATIC_INLINE void LL_RCC_ClearFlag_MSIRDY(void)
1313 {
1314 SET_BIT(RCC->CIR, RCC_CIR_MSIRDYC);
1315 }
1316
1317 /**
1318 * @brief Clear HSI ready interrupt flag
1319 * @rmtoll CIR HSIRDYC LL_RCC_ClearFlag_HSIRDY
1320 * @retval None
1321 */
LL_RCC_ClearFlag_HSIRDY(void)1322 __STATIC_INLINE void LL_RCC_ClearFlag_HSIRDY(void)
1323 {
1324 SET_BIT(RCC->CIR, RCC_CIR_HSIRDYC);
1325 }
1326
1327 /**
1328 * @brief Clear HSE ready interrupt flag
1329 * @rmtoll CIR HSERDYC LL_RCC_ClearFlag_HSERDY
1330 * @retval None
1331 */
LL_RCC_ClearFlag_HSERDY(void)1332 __STATIC_INLINE void LL_RCC_ClearFlag_HSERDY(void)
1333 {
1334 SET_BIT(RCC->CIR, RCC_CIR_HSERDYC);
1335 }
1336
1337 /**
1338 * @brief Clear PLL ready interrupt flag
1339 * @rmtoll CIR PLLRDYC LL_RCC_ClearFlag_PLLRDY
1340 * @retval None
1341 */
LL_RCC_ClearFlag_PLLRDY(void)1342 __STATIC_INLINE void LL_RCC_ClearFlag_PLLRDY(void)
1343 {
1344 SET_BIT(RCC->CIR, RCC_CIR_PLLRDYC);
1345 }
1346
1347 /**
1348 * @brief Clear Clock security system interrupt flag
1349 * @rmtoll CIR CSSC LL_RCC_ClearFlag_HSECSS
1350 * @retval None
1351 */
LL_RCC_ClearFlag_HSECSS(void)1352 __STATIC_INLINE void LL_RCC_ClearFlag_HSECSS(void)
1353 {
1354 SET_BIT(RCC->CIR, RCC_CIR_CSSC);
1355 }
1356
1357 #if defined(RCC_LSECSS_SUPPORT)
1358 /**
1359 * @brief Clear LSE Clock security system interrupt flag
1360 * @rmtoll CIR LSECSSC LL_RCC_ClearFlag_LSECSS
1361 * @retval None
1362 */
LL_RCC_ClearFlag_LSECSS(void)1363 __STATIC_INLINE void LL_RCC_ClearFlag_LSECSS(void)
1364 {
1365 SET_BIT(RCC->CIR, RCC_CIR_LSECSSC);
1366 }
1367
1368 #endif /* RCC_LSECSS_SUPPORT */
1369 /**
1370 * @brief Check if LSI ready interrupt occurred or not
1371 * @rmtoll CIR LSIRDYF LL_RCC_IsActiveFlag_LSIRDY
1372 * @retval State of bit (1 or 0).
1373 */
LL_RCC_IsActiveFlag_LSIRDY(void)1374 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSIRDY(void)
1375 {
1376 return ((READ_BIT(RCC->CIR, RCC_CIR_LSIRDYF) == RCC_CIR_LSIRDYF) ? 1UL : 0UL);
1377 }
1378
1379 /**
1380 * @brief Check if LSE ready interrupt occurred or not
1381 * @rmtoll CIR LSERDYF LL_RCC_IsActiveFlag_LSERDY
1382 * @retval State of bit (1 or 0).
1383 */
LL_RCC_IsActiveFlag_LSERDY(void)1384 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSERDY(void)
1385 {
1386 return ((READ_BIT(RCC->CIR, RCC_CIR_LSERDYF) == RCC_CIR_LSERDYF) ? 1UL : 0UL);
1387 }
1388
1389 /**
1390 * @brief Check if MSI ready interrupt occurred or not
1391 * @rmtoll CIR MSIRDYF LL_RCC_IsActiveFlag_MSIRDY
1392 * @retval State of bit (1 or 0).
1393 */
LL_RCC_IsActiveFlag_MSIRDY(void)1394 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_MSIRDY(void)
1395 {
1396 return ((READ_BIT(RCC->CIR, RCC_CIR_MSIRDYF) == RCC_CIR_MSIRDYF) ? 1UL : 0UL);
1397 }
1398
1399 /**
1400 * @brief Check if HSI ready interrupt occurred or not
1401 * @rmtoll CIR HSIRDYF LL_RCC_IsActiveFlag_HSIRDY
1402 * @retval State of bit (1 or 0).
1403 */
LL_RCC_IsActiveFlag_HSIRDY(void)1404 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSIRDY(void)
1405 {
1406 return ((READ_BIT(RCC->CIR, RCC_CIR_HSIRDYF) == RCC_CIR_HSIRDYF) ? 1UL : 0UL);
1407 }
1408
1409 /**
1410 * @brief Check if HSE ready interrupt occurred or not
1411 * @rmtoll CIR HSERDYF LL_RCC_IsActiveFlag_HSERDY
1412 * @retval State of bit (1 or 0).
1413 */
LL_RCC_IsActiveFlag_HSERDY(void)1414 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSERDY(void)
1415 {
1416 return ((READ_BIT(RCC->CIR, RCC_CIR_HSERDYF) == RCC_CIR_HSERDYF) ? 1UL : 0UL);
1417 }
1418
1419 /**
1420 * @brief Check if PLL ready interrupt occurred or not
1421 * @rmtoll CIR PLLRDYF LL_RCC_IsActiveFlag_PLLRDY
1422 * @retval State of bit (1 or 0).
1423 */
LL_RCC_IsActiveFlag_PLLRDY(void)1424 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLRDY(void)
1425 {
1426 return ((READ_BIT(RCC->CIR, RCC_CIR_PLLRDYF) == RCC_CIR_PLLRDYF) ? 1UL : 0UL);
1427 }
1428
1429 /**
1430 * @brief Check if Clock security system interrupt occurred or not
1431 * @rmtoll CIR CSSF LL_RCC_IsActiveFlag_HSECSS
1432 * @retval State of bit (1 or 0).
1433 */
LL_RCC_IsActiveFlag_HSECSS(void)1434 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSECSS(void)
1435 {
1436 return ((READ_BIT(RCC->CIR, RCC_CIR_CSSF) == RCC_CIR_CSSF) ? 1UL : 0UL);
1437 }
1438
1439 #if defined(RCC_LSECSS_SUPPORT)
1440 /**
1441 * @brief Check if LSE Clock security system interrupt occurred or not
1442 * @rmtoll CIR LSECSSF LL_RCC_IsActiveFlag_LSECSS
1443 * @retval State of bit (1 or 0).
1444 */
LL_RCC_IsActiveFlag_LSECSS(void)1445 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSECSS(void)
1446 {
1447 return ((READ_BIT(RCC->CIR, RCC_CIR_LSECSSF) == RCC_CIR_LSECSSF) ? 1UL : 0UL);
1448 }
1449 #endif /* RCC_LSECSS_SUPPORT */
1450
1451 /**
1452 * @brief Check if RCC flag Independent Watchdog reset is set or not.
1453 * @rmtoll CSR IWDGRSTF LL_RCC_IsActiveFlag_IWDGRST
1454 * @retval State of bit (1 or 0).
1455 */
LL_RCC_IsActiveFlag_IWDGRST(void)1456 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_IWDGRST(void)
1457 {
1458 return ((READ_BIT(RCC->CSR, RCC_CSR_IWDGRSTF) == RCC_CSR_IWDGRSTF) ? 1UL : 0UL);
1459 }
1460
1461 /**
1462 * @brief Check if RCC flag Low Power reset is set or not.
1463 * @rmtoll CSR LPWRRSTF LL_RCC_IsActiveFlag_LPWRRST
1464 * @retval State of bit (1 or 0).
1465 */
LL_RCC_IsActiveFlag_LPWRRST(void)1466 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LPWRRST(void)
1467 {
1468 return ((READ_BIT(RCC->CSR, RCC_CSR_LPWRRSTF) == RCC_CSR_LPWRRSTF) ? 1UL : 0UL);
1469 }
1470
1471 /**
1472 * @brief Check if RCC flag is set or not.
1473 * @rmtoll CSR OBLRSTF LL_RCC_IsActiveFlag_OBLRST
1474 * @retval State of bit (1 or 0).
1475 */
LL_RCC_IsActiveFlag_OBLRST(void)1476 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_OBLRST(void)
1477 {
1478 return ((READ_BIT(RCC->CSR, RCC_CSR_OBLRSTF) == RCC_CSR_OBLRSTF) ? 1UL : 0UL);
1479 }
1480
1481 /**
1482 * @brief Check if RCC flag Pin reset is set or not.
1483 * @rmtoll CSR PINRSTF LL_RCC_IsActiveFlag_PINRST
1484 * @retval State of bit (1 or 0).
1485 */
LL_RCC_IsActiveFlag_PINRST(void)1486 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PINRST(void)
1487 {
1488 return ((READ_BIT(RCC->CSR, RCC_CSR_PINRSTF) == RCC_CSR_PINRSTF) ? 1UL : 0UL);
1489 }
1490
1491 /**
1492 * @brief Check if RCC flag POR/PDR reset is set or not.
1493 * @rmtoll CSR PORRSTF LL_RCC_IsActiveFlag_PORRST
1494 * @retval State of bit (1 or 0).
1495 */
LL_RCC_IsActiveFlag_PORRST(void)1496 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PORRST(void)
1497 {
1498 return ((READ_BIT(RCC->CSR, RCC_CSR_PORRSTF) == RCC_CSR_PORRSTF) ? 1UL : 0UL);
1499 }
1500
1501 /**
1502 * @brief Check if RCC flag Software reset is set or not.
1503 * @rmtoll CSR SFTRSTF LL_RCC_IsActiveFlag_SFTRST
1504 * @retval State of bit (1 or 0).
1505 */
LL_RCC_IsActiveFlag_SFTRST(void)1506 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_SFTRST(void)
1507 {
1508 return ((READ_BIT(RCC->CSR, RCC_CSR_SFTRSTF) == RCC_CSR_SFTRSTF) ? 1UL : 0UL);
1509 }
1510
1511 /**
1512 * @brief Check if RCC flag Window Watchdog reset is set or not.
1513 * @rmtoll CSR WWDGRSTF LL_RCC_IsActiveFlag_WWDGRST
1514 * @retval State of bit (1 or 0).
1515 */
LL_RCC_IsActiveFlag_WWDGRST(void)1516 __STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_WWDGRST(void)
1517 {
1518 return ((READ_BIT(RCC->CSR, RCC_CSR_WWDGRSTF) == RCC_CSR_WWDGRSTF) ? 1UL : 0UL);
1519 }
1520
1521 /**
1522 * @brief Set RMVF bit to clear the reset flags.
1523 * @rmtoll CSR RMVF LL_RCC_ClearResetFlags
1524 * @retval None
1525 */
LL_RCC_ClearResetFlags(void)1526 __STATIC_INLINE void LL_RCC_ClearResetFlags(void)
1527 {
1528 SET_BIT(RCC->CSR, RCC_CSR_RMVF);
1529 }
1530
1531 /**
1532 * @}
1533 */
1534
1535 /** @defgroup RCC_LL_EF_IT_Management IT Management
1536 * @{
1537 */
1538
1539 /**
1540 * @brief Enable LSI ready interrupt
1541 * @rmtoll CIR LSIRDYIE LL_RCC_EnableIT_LSIRDY
1542 * @retval None
1543 */
LL_RCC_EnableIT_LSIRDY(void)1544 __STATIC_INLINE void LL_RCC_EnableIT_LSIRDY(void)
1545 {
1546 SET_BIT(RCC->CIR, RCC_CIR_LSIRDYIE);
1547 }
1548
1549 /**
1550 * @brief Enable LSE ready interrupt
1551 * @rmtoll CIR LSERDYIE LL_RCC_EnableIT_LSERDY
1552 * @retval None
1553 */
LL_RCC_EnableIT_LSERDY(void)1554 __STATIC_INLINE void LL_RCC_EnableIT_LSERDY(void)
1555 {
1556 SET_BIT(RCC->CIR, RCC_CIR_LSERDYIE);
1557 }
1558
1559 /**
1560 * @brief Enable MSI ready interrupt
1561 * @rmtoll CIR MSIRDYIE LL_RCC_EnableIT_MSIRDY
1562 * @retval None
1563 */
LL_RCC_EnableIT_MSIRDY(void)1564 __STATIC_INLINE void LL_RCC_EnableIT_MSIRDY(void)
1565 {
1566 SET_BIT(RCC->CIR, RCC_CIR_MSIRDYIE);
1567 }
1568
1569 /**
1570 * @brief Enable HSI ready interrupt
1571 * @rmtoll CIR HSIRDYIE LL_RCC_EnableIT_HSIRDY
1572 * @retval None
1573 */
LL_RCC_EnableIT_HSIRDY(void)1574 __STATIC_INLINE void LL_RCC_EnableIT_HSIRDY(void)
1575 {
1576 SET_BIT(RCC->CIR, RCC_CIR_HSIRDYIE);
1577 }
1578
1579 /**
1580 * @brief Enable HSE ready interrupt
1581 * @rmtoll CIR HSERDYIE LL_RCC_EnableIT_HSERDY
1582 * @retval None
1583 */
LL_RCC_EnableIT_HSERDY(void)1584 __STATIC_INLINE void LL_RCC_EnableIT_HSERDY(void)
1585 {
1586 SET_BIT(RCC->CIR, RCC_CIR_HSERDYIE);
1587 }
1588
1589 /**
1590 * @brief Enable PLL ready interrupt
1591 * @rmtoll CIR PLLRDYIE LL_RCC_EnableIT_PLLRDY
1592 * @retval None
1593 */
LL_RCC_EnableIT_PLLRDY(void)1594 __STATIC_INLINE void LL_RCC_EnableIT_PLLRDY(void)
1595 {
1596 SET_BIT(RCC->CIR, RCC_CIR_PLLRDYIE);
1597 }
1598
1599 #if defined(RCC_LSECSS_SUPPORT)
1600 /**
1601 * @brief Enable LSE clock security system interrupt
1602 * @rmtoll CIR LSECSSIE LL_RCC_EnableIT_LSECSS
1603 * @retval None
1604 */
LL_RCC_EnableIT_LSECSS(void)1605 __STATIC_INLINE void LL_RCC_EnableIT_LSECSS(void)
1606 {
1607 SET_BIT(RCC->CIR, RCC_CIR_LSECSSIE);
1608 }
1609 #endif /* RCC_LSECSS_SUPPORT */
1610
1611 /**
1612 * @brief Disable LSI ready interrupt
1613 * @rmtoll CIR LSIRDYIE LL_RCC_DisableIT_LSIRDY
1614 * @retval None
1615 */
LL_RCC_DisableIT_LSIRDY(void)1616 __STATIC_INLINE void LL_RCC_DisableIT_LSIRDY(void)
1617 {
1618 CLEAR_BIT(RCC->CIR, RCC_CIR_LSIRDYIE);
1619 }
1620
1621 /**
1622 * @brief Disable LSE ready interrupt
1623 * @rmtoll CIR LSERDYIE LL_RCC_DisableIT_LSERDY
1624 * @retval None
1625 */
LL_RCC_DisableIT_LSERDY(void)1626 __STATIC_INLINE void LL_RCC_DisableIT_LSERDY(void)
1627 {
1628 CLEAR_BIT(RCC->CIR, RCC_CIR_LSERDYIE);
1629 }
1630
1631 /**
1632 * @brief Disable MSI ready interrupt
1633 * @rmtoll CIR MSIRDYIE LL_RCC_DisableIT_MSIRDY
1634 * @retval None
1635 */
LL_RCC_DisableIT_MSIRDY(void)1636 __STATIC_INLINE void LL_RCC_DisableIT_MSIRDY(void)
1637 {
1638 CLEAR_BIT(RCC->CIR, RCC_CIR_MSIRDYIE);
1639 }
1640
1641 /**
1642 * @brief Disable HSI ready interrupt
1643 * @rmtoll CIR HSIRDYIE LL_RCC_DisableIT_HSIRDY
1644 * @retval None
1645 */
LL_RCC_DisableIT_HSIRDY(void)1646 __STATIC_INLINE void LL_RCC_DisableIT_HSIRDY(void)
1647 {
1648 CLEAR_BIT(RCC->CIR, RCC_CIR_HSIRDYIE);
1649 }
1650
1651 /**
1652 * @brief Disable HSE ready interrupt
1653 * @rmtoll CIR HSERDYIE LL_RCC_DisableIT_HSERDY
1654 * @retval None
1655 */
LL_RCC_DisableIT_HSERDY(void)1656 __STATIC_INLINE void LL_RCC_DisableIT_HSERDY(void)
1657 {
1658 CLEAR_BIT(RCC->CIR, RCC_CIR_HSERDYIE);
1659 }
1660
1661 /**
1662 * @brief Disable PLL ready interrupt
1663 * @rmtoll CIR PLLRDYIE LL_RCC_DisableIT_PLLRDY
1664 * @retval None
1665 */
LL_RCC_DisableIT_PLLRDY(void)1666 __STATIC_INLINE void LL_RCC_DisableIT_PLLRDY(void)
1667 {
1668 CLEAR_BIT(RCC->CIR, RCC_CIR_PLLRDYIE);
1669 }
1670
1671 #if defined(RCC_LSECSS_SUPPORT)
1672 /**
1673 * @brief Disable LSE clock security system interrupt
1674 * @rmtoll CIR LSECSSIE LL_RCC_DisableIT_LSECSS
1675 * @retval None
1676 */
LL_RCC_DisableIT_LSECSS(void)1677 __STATIC_INLINE void LL_RCC_DisableIT_LSECSS(void)
1678 {
1679 CLEAR_BIT(RCC->CIR, RCC_CIR_LSECSSIE);
1680 }
1681 #endif /* RCC_LSECSS_SUPPORT */
1682
1683 /**
1684 * @brief Checks if LSI ready interrupt source is enabled or disabled.
1685 * @rmtoll CIR LSIRDYIE LL_RCC_IsEnabledIT_LSIRDY
1686 * @retval State of bit (1 or 0).
1687 */
LL_RCC_IsEnabledIT_LSIRDY(void)1688 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSIRDY(void)
1689 {
1690 return ((READ_BIT(RCC->CIR, RCC_CIR_LSIRDYIE) == RCC_CIR_LSIRDYIE) ? 1UL : 0UL);
1691 }
1692
1693 /**
1694 * @brief Checks if LSE ready interrupt source is enabled or disabled.
1695 * @rmtoll CIR LSERDYIE LL_RCC_IsEnabledIT_LSERDY
1696 * @retval State of bit (1 or 0).
1697 */
LL_RCC_IsEnabledIT_LSERDY(void)1698 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSERDY(void)
1699 {
1700 return ((READ_BIT(RCC->CIR, RCC_CIR_LSERDYIE) == RCC_CIR_LSERDYIE) ? 1UL : 0UL);
1701 }
1702
1703 /**
1704 * @brief Checks if MSI ready interrupt source is enabled or disabled.
1705 * @rmtoll CIR MSIRDYIE LL_RCC_IsEnabledIT_MSIRDY
1706 * @retval State of bit (1 or 0).
1707 */
LL_RCC_IsEnabledIT_MSIRDY(void)1708 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_MSIRDY(void)
1709 {
1710 return ((READ_BIT(RCC->CIR, RCC_CIR_MSIRDYIE) == RCC_CIR_MSIRDYIE) ? 1UL : 0UL);
1711 }
1712
1713 /**
1714 * @brief Checks if HSI ready interrupt source is enabled or disabled.
1715 * @rmtoll CIR HSIRDYIE LL_RCC_IsEnabledIT_HSIRDY
1716 * @retval State of bit (1 or 0).
1717 */
LL_RCC_IsEnabledIT_HSIRDY(void)1718 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSIRDY(void)
1719 {
1720 return ((READ_BIT(RCC->CIR, RCC_CIR_HSIRDYIE) == RCC_CIR_HSIRDYIE) ? 1UL : 0UL);
1721 }
1722
1723 /**
1724 * @brief Checks if HSE ready interrupt source is enabled or disabled.
1725 * @rmtoll CIR HSERDYIE LL_RCC_IsEnabledIT_HSERDY
1726 * @retval State of bit (1 or 0).
1727 */
LL_RCC_IsEnabledIT_HSERDY(void)1728 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSERDY(void)
1729 {
1730 return ((READ_BIT(RCC->CIR, RCC_CIR_HSERDYIE) == RCC_CIR_HSERDYIE) ? 1UL : 0UL);
1731 }
1732
1733 /**
1734 * @brief Checks if PLL ready interrupt source is enabled or disabled.
1735 * @rmtoll CIR PLLRDYIE LL_RCC_IsEnabledIT_PLLRDY
1736 * @retval State of bit (1 or 0).
1737 */
LL_RCC_IsEnabledIT_PLLRDY(void)1738 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLRDY(void)
1739 {
1740 return ((READ_BIT(RCC->CIR, RCC_CIR_PLLRDYIE) == RCC_CIR_PLLRDYIE) ? 1UL : 0UL);
1741 }
1742
1743 #if defined(RCC_LSECSS_SUPPORT)
1744 /**
1745 * @brief Checks if LSECSS interrupt source is enabled or disabled.
1746 * @rmtoll CIR LSECSSIE LL_RCC_IsEnabledIT_LSECSS
1747 * @retval State of bit (1 or 0).
1748 */
LL_RCC_IsEnabledIT_LSECSS(void)1749 __STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSECSS(void)
1750 {
1751 return ((READ_BIT(RCC->CIR, RCC_CIR_LSECSSIE) == RCC_CIR_LSECSSIE) ? 1UL : 0UL);
1752 }
1753 #endif /* RCC_LSECSS_SUPPORT */
1754
1755 /**
1756 * @}
1757 */
1758
1759 #if defined(USE_FULL_LL_DRIVER)
1760 /** @defgroup RCC_LL_EF_Init De-initialization function
1761 * @{
1762 */
1763 ErrorStatus LL_RCC_DeInit(void);
1764 /**
1765 * @}
1766 */
1767
1768 /** @defgroup RCC_LL_EF_Get_Freq Get system and peripherals clocks frequency functions
1769 * @{
1770 */
1771 void LL_RCC_GetSystemClocksFreq(LL_RCC_ClocksTypeDef *RCC_Clocks);
1772 /**
1773 * @}
1774 */
1775 #endif /* USE_FULL_LL_DRIVER */
1776
1777 /**
1778 * @}
1779 */
1780
1781 /**
1782 * @}
1783 */
1784
1785 #endif /* RCC */
1786
1787 /**
1788 * @}
1789 */
1790
1791 #ifdef __cplusplus
1792 }
1793 #endif
1794
1795 #endif /* __STM32L1xx_LL_RCC_H */
1796
1797