20 #if defined(USE_FULL_LL_DRIVER)
24 #ifdef USE_FULL_ASSERT
27 #define assert_param(expr) ((void)0U)
46 #if defined(RCC_PLLI2S_SUPPORT)
47 #define IS_LL_RCC_I2S_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_I2S2_CLKSOURCE) \
48 || ((__VALUE__) == LL_RCC_I2S3_CLKSOURCE))
51 #if defined(USB) || defined(USB_OTG_FS)
52 #define IS_LL_RCC_USB_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_USB_CLKSOURCE))
55 #define IS_LL_RCC_ADC_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_ADC_CLKSOURCE))
64 uint32_t RCC_GetSystemClockFreq(
void);
65 uint32_t RCC_GetHCLKClockFreq(uint32_t SYSCLK_Frequency);
66 uint32_t RCC_GetPCLK1ClockFreq(uint32_t HCLK_Frequency);
67 uint32_t RCC_GetPCLK2ClockFreq(uint32_t HCLK_Frequency);
68 uint32_t RCC_PLL_GetFreqDomain_SYS(
void);
69 #if defined(RCC_PLLI2S_SUPPORT)
70 uint32_t RCC_PLLI2S_GetFreqDomain_I2S(
void);
72 #if defined(RCC_PLL2_SUPPORT)
73 uint32_t RCC_PLL2_GetFreqClockFreq(
void);
109 while (LL_RCC_HSI_IsReady() != 1U)
113 LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSI);
116 while (LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSI)
123 while (LL_RCC_PLL_IsReady() != 0U)
127 LL_RCC_WriteReg(CFGR, 0x00000000U);
132 #if defined(RCC_CR_PLL2ON)
137 #if defined(RCC_CR_PLL3ON)
143 LL_RCC_HSI_SetCalibTrimming(0x10U);
145 #if defined(RCC_CFGR2_PREDIV1)
147 LL_RCC_WriteReg(CFGR2, 0x00000000U);
151 LL_RCC_WriteReg(CIR, 0x00000000U);
154 LL_RCC_ClearResetFlags();
190 void LL_RCC_GetSystemClocksFreq(LL_RCC_ClocksTypeDef *RCC_Clocks)
193 RCC_Clocks->SYSCLK_Frequency = RCC_GetSystemClockFreq();
196 RCC_Clocks->HCLK_Frequency = RCC_GetHCLKClockFreq(RCC_Clocks->SYSCLK_Frequency);
199 RCC_Clocks->PCLK1_Frequency = RCC_GetPCLK1ClockFreq(RCC_Clocks->HCLK_Frequency);
202 RCC_Clocks->PCLK2_Frequency = RCC_GetPCLK2ClockFreq(RCC_Clocks->HCLK_Frequency);
205 #if defined(RCC_CFGR2_I2S2SRC)
213 uint32_t LL_RCC_GetI2SClockFreq(uint32_t I2SxSource)
215 uint32_t i2s_frequency = LL_RCC_PERIPH_FREQUENCY_NO;
221 switch (LL_RCC_GetI2SClockSource(I2SxSource))
223 case LL_RCC_I2S2_CLKSOURCE_SYSCLK:
224 case LL_RCC_I2S3_CLKSOURCE_SYSCLK:
225 i2s_frequency = RCC_GetSystemClockFreq();
228 case LL_RCC_I2S2_CLKSOURCE_PLLI2S_VCO:
229 case LL_RCC_I2S3_CLKSOURCE_PLLI2S_VCO:
231 i2s_frequency = RCC_PLLI2S_GetFreqDomain_I2S() * 2U;
235 return i2s_frequency;
239 #if defined(USB) || defined(USB_OTG_FS)
247 uint32_t LL_RCC_GetUSBClockFreq(uint32_t USBxSource)
249 uint32_t usb_frequency = LL_RCC_PERIPH_FREQUENCY_NO;
255 switch (LL_RCC_GetUSBClockSource(USBxSource))
257 #if defined(RCC_CFGR_USBPRE)
258 case LL_RCC_USB_CLKSOURCE_PLL:
259 if (LL_RCC_PLL_IsReady())
261 usb_frequency = RCC_PLL_GetFreqDomain_SYS();
265 case LL_RCC_USB_CLKSOURCE_PLL_DIV_1_5:
267 if (LL_RCC_PLL_IsReady())
269 usb_frequency = (RCC_PLL_GetFreqDomain_SYS() * 3U) / 2U;
273 #if defined(RCC_CFGR_OTGFSPRE)
277 case LL_RCC_USB_CLKSOURCE_PLL_DIV_2:
278 if (LL_RCC_PLL_IsReady())
280 usb_frequency = RCC_PLL_GetFreqDomain_SYS();
286 case LL_RCC_USB_CLKSOURCE_PLL_DIV_3:
288 if (LL_RCC_PLL_IsReady())
290 usb_frequency = (RCC_PLL_GetFreqDomain_SYS() * 2U) / 3U;
296 return usb_frequency;
306 uint32_t LL_RCC_GetADCClockFreq(uint32_t ADCxSource)
308 uint32_t adc_prescaler = 0U;
309 uint32_t adc_frequency = 0U;
315 adc_prescaler = LL_RCC_GetADCClockSource(ADCxSource);
318 adc_frequency = RCC_GetPCLK2ClockFreq(RCC_GetHCLKClockFreq(RCC_GetSystemClockFreq()))
319 / (((adc_prescaler >>
POSITION_VAL(ADCxSource)) + 1U) * 2U);
321 return adc_frequency;
340 uint32_t RCC_GetSystemClockFreq(
void)
342 uint32_t frequency = 0U;
345 switch (LL_RCC_GetSysClkSource())
347 case LL_RCC_SYS_CLKSOURCE_STATUS_HSI:
351 case LL_RCC_SYS_CLKSOURCE_STATUS_HSE:
355 case LL_RCC_SYS_CLKSOURCE_STATUS_PLL:
356 frequency = RCC_PLL_GetFreqDomain_SYS();
372 uint32_t RCC_GetHCLKClockFreq(uint32_t SYSCLK_Frequency)
375 return __LL_RCC_CALC_HCLK_FREQ(SYSCLK_Frequency, LL_RCC_GetAHBPrescaler());
383 uint32_t RCC_GetPCLK1ClockFreq(uint32_t HCLK_Frequency)
386 return __LL_RCC_CALC_PCLK1_FREQ(HCLK_Frequency, LL_RCC_GetAPB1Prescaler());
394 uint32_t RCC_GetPCLK2ClockFreq(uint32_t HCLK_Frequency)
397 return __LL_RCC_CALC_PCLK2_FREQ(HCLK_Frequency, LL_RCC_GetAPB2Prescaler());
404 uint32_t RCC_PLL_GetFreqDomain_SYS(
void)
406 uint32_t pllinputfreq = 0U, pllsource = 0U;
411 pllsource = LL_RCC_PLL_GetMainSource();
415 case LL_RCC_PLLSOURCE_HSI_DIV_2:
419 case LL_RCC_PLLSOURCE_HSE:
420 pllinputfreq =
HSE_VALUE / (LL_RCC_PLL_GetPrediv() + 1U);
423 #if defined(RCC_PLL2_SUPPORT)
424 case LL_RCC_PLLSOURCE_PLL2:
425 pllinputfreq = RCC_PLL2_GetFreqClockFreq() / (LL_RCC_PLL_GetPrediv() + 1U);
433 return __LL_RCC_CALC_PLLCLK_FREQ(pllinputfreq, LL_RCC_PLL_GetMultiplicator());
436 #if defined(RCC_PLL2_SUPPORT)
441 uint32_t RCC_PLL2_GetFreqClockFreq(
void)
443 return __LL_RCC_CALC_PLL2CLK_FREQ(
HSE_VALUE, LL_RCC_PLL2_GetMultiplicator(), LL_RCC_HSE_GetPrediv2());
447 #if defined(RCC_PLLI2S_SUPPORT)
452 uint32_t RCC_PLLI2S_GetFreqDomain_I2S(
void)
454 return __LL_RCC_CALC_PLLI2SCLK_FREQ(
HSE_VALUE, LL_RCC_PLLI2S_GetMultiplicator(), LL_RCC_HSE_GetPrediv2());