24 #ifdef USE_FULL_ASSERT 25 #include "stm32_assert.h" 27 #define assert_param(expr) ((void)0U) 44 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 45 #define UTILS_MAX_FREQUENCY_SCALE1 120000000U 46 #define UTILS_MAX_FREQUENCY_SCALE2 26000000U 48 #define UTILS_MAX_FREQUENCY_SCALE1 80000000U 49 #define UTILS_MAX_FREQUENCY_SCALE2 26000000U 53 #define UTILS_PLLVCO_INPUT_MIN 4000000U 54 #define UTILS_PLLVCO_INPUT_MAX 16000000U 55 #define UTILS_PLLVCO_OUTPUT_MIN 64000000U 56 #define UTILS_PLLVCO_OUTPUT_MAX 344000000U 59 #define UTILS_HSE_FREQUENCY_MIN 4000000U 60 #define UTILS_HSE_FREQUENCY_MAX 48000000U 63 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 64 #define UTILS_SCALE1_LATENCY1_FREQ 20000000U 65 #define UTILS_SCALE1_LATENCY2_FREQ 40000000U 66 #define UTILS_SCALE1_LATENCY3_FREQ 60000000U 67 #define UTILS_SCALE1_LATENCY4_FREQ 80000000U 68 #define UTILS_SCALE1_LATENCY5_FREQ 100000000U 69 #define UTILS_SCALE2_LATENCY1_FREQ 8000000U 70 #define UTILS_SCALE2_LATENCY2_FREQ 16000000U 72 #define UTILS_SCALE1_LATENCY1_FREQ 16000000U 73 #define UTILS_SCALE1_LATENCY2_FREQ 32000000U 74 #define UTILS_SCALE1_LATENCY3_FREQ 48000000U 75 #define UTILS_SCALE1_LATENCY4_FREQ 64000000U 76 #define UTILS_SCALE2_LATENCY1_FREQ 6000000U 77 #define UTILS_SCALE2_LATENCY2_FREQ 12000000U 78 #define UTILS_SCALE2_LATENCY3_FREQ 18000000U 88 #define IS_LL_UTILS_SYSCLK_DIV(__VALUE__) (((__VALUE__) == LL_RCC_SYSCLK_DIV_1) \ 89 || ((__VALUE__) == LL_RCC_SYSCLK_DIV_2) \ 90 || ((__VALUE__) == LL_RCC_SYSCLK_DIV_4) \ 91 || ((__VALUE__) == LL_RCC_SYSCLK_DIV_8) \ 92 || ((__VALUE__) == LL_RCC_SYSCLK_DIV_16) \ 93 || ((__VALUE__) == LL_RCC_SYSCLK_DIV_64) \ 94 || ((__VALUE__) == LL_RCC_SYSCLK_DIV_128) \ 95 || ((__VALUE__) == LL_RCC_SYSCLK_DIV_256) \ 96 || ((__VALUE__) == LL_RCC_SYSCLK_DIV_512)) 98 #define IS_LL_UTILS_APB1_DIV(__VALUE__) (((__VALUE__) == LL_RCC_APB1_DIV_1) \ 99 || ((__VALUE__) == LL_RCC_APB1_DIV_2) \ 100 || ((__VALUE__) == LL_RCC_APB1_DIV_4) \ 101 || ((__VALUE__) == LL_RCC_APB1_DIV_8) \ 102 || ((__VALUE__) == LL_RCC_APB1_DIV_16)) 104 #define IS_LL_UTILS_APB2_DIV(__VALUE__) (((__VALUE__) == LL_RCC_APB2_DIV_1) \ 105 || ((__VALUE__) == LL_RCC_APB2_DIV_2) \ 106 || ((__VALUE__) == LL_RCC_APB2_DIV_4) \ 107 || ((__VALUE__) == LL_RCC_APB2_DIV_8) \ 108 || ((__VALUE__) == LL_RCC_APB2_DIV_16)) 110 #define IS_LL_UTILS_PLLM_VALUE(__VALUE__) (((__VALUE__) == LL_RCC_PLLM_DIV_1) \ 111 || ((__VALUE__) == LL_RCC_PLLM_DIV_2) \ 112 || ((__VALUE__) == LL_RCC_PLLM_DIV_3) \ 113 || ((__VALUE__) == LL_RCC_PLLM_DIV_4) \ 114 || ((__VALUE__) == LL_RCC_PLLM_DIV_5) \ 115 || ((__VALUE__) == LL_RCC_PLLM_DIV_6) \ 116 || ((__VALUE__) == LL_RCC_PLLM_DIV_7) \ 117 || ((__VALUE__) == LL_RCC_PLLM_DIV_8)) 119 #define IS_LL_UTILS_PLLN_VALUE(__VALUE__) ((8U <= (__VALUE__)) && ((__VALUE__) <= 86U)) 121 #define IS_LL_UTILS_PLLR_VALUE(__VALUE__) (((__VALUE__) == LL_RCC_PLLR_DIV_2) \ 122 || ((__VALUE__) == LL_RCC_PLLR_DIV_4) \ 123 || ((__VALUE__) == LL_RCC_PLLR_DIV_6) \ 124 || ((__VALUE__) == LL_RCC_PLLR_DIV_8)) 126 #define IS_LL_UTILS_PLLVCO_INPUT(__VALUE__) ((UTILS_PLLVCO_INPUT_MIN <= (__VALUE__)) && ((__VALUE__) <= UTILS_PLLVCO_INPUT_MAX)) 128 #define IS_LL_UTILS_PLLVCO_OUTPUT(__VALUE__) ((UTILS_PLLVCO_OUTPUT_MIN <= (__VALUE__)) && ((__VALUE__) <= UTILS_PLLVCO_OUTPUT_MAX)) 130 #define IS_LL_UTILS_PLL_FREQUENCY(__VALUE__) ((LL_PWR_GetRegulVoltageScaling() == LL_PWR_REGU_VOLTAGE_SCALE1) ? ((__VALUE__) <= UTILS_MAX_FREQUENCY_SCALE1) : \ 131 ((__VALUE__) <= UTILS_MAX_FREQUENCY_SCALE2)) 133 #define IS_LL_UTILS_HSE_BYPASS(__STATE__) (((__STATE__) == LL_UTILS_HSEBYPASS_ON) \ 134 || ((__STATE__) == LL_UTILS_HSEBYPASS_OFF)) 136 #define IS_LL_UTILS_HSE_FREQUENCY(__FREQUENCY__) (((__FREQUENCY__) >= UTILS_HSE_FREQUENCY_MIN) && ((__FREQUENCY__) <= UTILS_HSE_FREQUENCY_MAX)) 188 __IO uint32_t tmp = SysTick->CTRL;
189 uint32_t tmpDelay = Delay;
195 if(tmpDelay < LL_MAX_DELAY)
200 while (tmpDelay != 0U)
202 if((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) != 0U)
281 SystemCoreClock = HCLKFrequency;
303 ErrorStatus status = SUCCESS;
304 uint32_t pllfreq, msi_range;
305 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 318 case LL_RCC_MSIRANGE_0:
319 case LL_RCC_MSIRANGE_1:
320 case LL_RCC_MSIRANGE_2:
321 case LL_RCC_MSIRANGE_3:
322 case LL_RCC_MSIRANGE_4:
323 case LL_RCC_MSIRANGE_5:
328 case LL_RCC_MSIRANGE_6:
329 case LL_RCC_MSIRANGE_7:
330 case LL_RCC_MSIRANGE_8:
331 case LL_RCC_MSIRANGE_9:
332 case LL_RCC_MSIRANGE_10:
333 case LL_RCC_MSIRANGE_11:
343 case LL_RCC_MSISRANGE_4:
344 case LL_RCC_MSISRANGE_5:
349 case LL_RCC_MSISRANGE_7:
350 case LL_RCC_MSISRANGE_6:
361 UTILS_PLLInitStruct);
375 UTILS_PLLInitStruct->
PLLR);
377 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 379 if(pllfreq > 80000000U)
382 if(hpre == LL_RCC_SYSCLK_DIV_1)
391 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 393 if((status == SUCCESS) && (hpre != 0U))
431 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 453 UTILS_PLLInitStruct->
PLLR);
455 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 457 if(pllfreq > 80000000U)
460 if(hpre == LL_RCC_SYSCLK_DIV_1)
469 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 471 if((status == SUCCESS) && (hpre != 0U))
512 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 530 if(HSEBypass == LL_UTILS_HSEBYPASS_ON)
549 UTILS_PLLInitStruct->
PLLR);
551 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 553 if(pllfreq > 80000000U)
556 if(hpre == LL_RCC_SYSCLK_DIV_1)
565 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 567 if((status == SUCCESS) && (hpre != 0U))
604 ErrorStatus status = SUCCESS;
606 uint32_t latency = LL_FLASH_LATENCY_0;
609 if(HCLK_Frequency == 0U)
617 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 618 if(HCLK_Frequency > UTILS_SCALE1_LATENCY5_FREQ)
621 latency = LL_FLASH_LATENCY_5;
623 else if(HCLK_Frequency > UTILS_SCALE1_LATENCY4_FREQ)
626 latency = LL_FLASH_LATENCY_4;
628 else if(HCLK_Frequency > UTILS_SCALE1_LATENCY3_FREQ)
631 latency = LL_FLASH_LATENCY_3;
633 else if(HCLK_Frequency > UTILS_SCALE1_LATENCY2_FREQ)
636 latency = LL_FLASH_LATENCY_2;
640 if(HCLK_Frequency > UTILS_SCALE1_LATENCY1_FREQ)
643 latency = LL_FLASH_LATENCY_1;
648 if(HCLK_Frequency > UTILS_SCALE1_LATENCY4_FREQ)
651 latency = LL_FLASH_LATENCY_4;
653 else if(HCLK_Frequency > UTILS_SCALE1_LATENCY3_FREQ)
656 latency = LL_FLASH_LATENCY_3;
658 else if(HCLK_Frequency > UTILS_SCALE1_LATENCY2_FREQ)
661 latency = LL_FLASH_LATENCY_2;
665 if(HCLK_Frequency > UTILS_SCALE1_LATENCY1_FREQ)
668 latency = LL_FLASH_LATENCY_1;
676 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 677 if(HCLK_Frequency > UTILS_SCALE2_LATENCY2_FREQ)
680 latency = LL_FLASH_LATENCY_2;
684 if(HCLK_Frequency > UTILS_SCALE2_LATENCY1_FREQ)
687 latency = LL_FLASH_LATENCY_1;
692 if(HCLK_Frequency > UTILS_SCALE2_LATENCY3_FREQ)
695 latency = LL_FLASH_LATENCY_3;
697 else if(HCLK_Frequency > UTILS_SCALE2_LATENCY2_FREQ)
700 latency = LL_FLASH_LATENCY_2;
704 if(HCLK_Frequency > UTILS_SCALE2_LATENCY1_FREQ)
707 latency = LL_FLASH_LATENCY_1;
744 pllfreq = PLL_InputFrequency / (((UTILS_PLLInitStruct->
PLLM >> RCC_PLLCFGR_PLLM_Pos) + 1U));
748 pllfreq = pllfreq * (UTILS_PLLInitStruct->
PLLN & (RCC_PLLCFGR_PLLN >> RCC_PLLCFGR_PLLN_Pos));
752 pllfreq = pllfreq / (((UTILS_PLLInitStruct->
PLLR >> RCC_PLLCFGR_PLLR_Pos) + 1U) * 2U);
766 ErrorStatus status = SUCCESS;
775 #if defined(RCC_PLLSAI1_SUPPORT) 783 #if defined(RCC_PLLSAI2_SUPPORT) 807 ErrorStatus status = SUCCESS;
808 uint32_t hclk_frequency;
815 hclk_frequency = __LL_RCC_CALC_HCLK_FREQ(SYSCLK_Frequency, UTILS_ClkInitStruct->
AHBCLKDivider);
818 if(SystemCoreClock < hclk_frequency)
825 if(status == SUCCESS)
849 if(SystemCoreClock > hclk_frequency)
856 if(status == SUCCESS)
ErrorStatus LL_PLL_ConfigSystemClock_HSI(LL_UTILS_PLLInitTypeDef *UTILS_PLLInitStruct, LL_UTILS_ClkInitTypeDef *UTILS_ClkInitStruct)
This function configures system clock at maximum frequency with HSI as clock source of the PLL...
ErrorStatus LL_PLL_ConfigSystemClock_MSI(LL_UTILS_PLLInitTypeDef *UTILS_PLLInitStruct, LL_UTILS_ClkInitTypeDef *UTILS_ClkInitStruct)
This function configures system clock with MSI as clock source of the PLL.
__STATIC_INLINE void LL_RCC_PLL_Enable(void)
Enable PLL CR PLLON LL_RCC_PLL_Enable.
__STATIC_INLINE void LL_RCC_SetAPB2Prescaler(uint32_t Prescaler)
Set APB2 prescaler CFGR PPRE2 LL_RCC_SetAPB2Prescaler.
__STATIC_INLINE uint32_t LL_RCC_HSI_IsReady(void)
Check if HSI clock is ready CR HSIRDY LL_RCC_HSI_IsReady.
__STATIC_INLINE uint32_t LL_RCC_PLLSAI2_IsReady(void)
Check if PLLSAI2 Ready CR PLLSAI2RDY LL_RCC_PLLSAI2_IsReady.
__STATIC_INLINE void LL_RCC_HSE_Enable(void)
Enable HSE crystal oscillator (HSE ON) CR HSEON LL_RCC_HSE_Enable.
__STATIC_INLINE void LL_InitTick(uint32_t HCLKFrequency, uint32_t Ticks)
This function configures the Cortex-M SysTick source of the time base.
__STATIC_INLINE void LL_RCC_SetAHBPrescaler(uint32_t Prescaler)
Set AHB prescaler CFGR HPRE LL_RCC_SetAHBPrescaler.
Header file of RCC LL module.
__STATIC_INLINE uint32_t LL_PWR_GetRegulVoltageScaling(void)
Get the main internal regulator output voltage CR1 VOS LL_PWR_GetRegulVoltageScaling.
__STATIC_INLINE uint32_t LL_RCC_MSI_GetRangeAfterStandby(void)
Get MSI range used after standby CSR MSISRANGE LL_RCC_MSI_GetRangeAfterStandby.
__STATIC_INLINE uint32_t LL_RCC_GetSysClkSource(void)
Get the system clock source CFGR SWS LL_RCC_GetSysClkSource.
__STATIC_INLINE uint32_t LL_FLASH_GetLatency(void)
Get FLASH Latency FLASH_ACR LATENCY LL_FLASH_GetLatency.
UTILS PLL structure definition.
void LL_SetSystemCoreClock(uint32_t HCLKFrequency)
This function sets directly SystemCoreClock CMSIS variable.
__STATIC_INLINE void LL_RCC_HSE_DisableBypass(void)
Disable HSE external oscillator (HSE Bypass) CR HSEBYP LL_RCC_HSE_DisableBypass. ...
__STATIC_INLINE uint32_t LL_RCC_PLL_IsReady(void)
Check if PLL Ready CR PLLRDY LL_RCC_PLL_IsReady.
__STATIC_INLINE uint32_t LL_RCC_MSI_IsReady(void)
Check if MSI oscillator Ready CR MSIRDY LL_RCC_MSI_IsReady.
void LL_mDelay(uint32_t Delay)
This function provides accurate delay (in milliseconds) based on SysTick counter flag.
__STATIC_INLINE uint32_t LL_RCC_MSI_IsEnabledRangeSelect(void)
Check if MSI clock range is selected with MSIRANGE register CR MSIRGSEL LL_RCC_MSI_IsEnabledRangeSel...
__STATIC_INLINE void LL_RCC_HSE_EnableBypass(void)
Enable HSE external oscillator (HSE Bypass) CR HSEBYP LL_RCC_HSE_EnableBypass.
__STATIC_INLINE void LL_RCC_SetAPB1Prescaler(uint32_t Prescaler)
Set APB1 prescaler CFGR PPRE1 LL_RCC_SetAPB1Prescaler.
__STATIC_INLINE void LL_RCC_MSI_Enable(void)
Enable MSI oscillator CR MSION LL_RCC_MSI_Enable.
static ErrorStatus UTILS_SetFlashLatency(uint32_t HCLK_Frequency)
Update number of Flash wait states in line with new frequency and current voltage range...
__STATIC_INLINE void LL_RCC_PLL_EnableDomain_SYS(void)
Enable PLL output mapped on SYSCLK domain PLLCFGR PLLREN LL_RCC_PLL_EnableDomain_SYS.
__STATIC_INLINE void LL_RCC_HSI_Enable(void)
Enable HSI oscillator CR HSION LL_RCC_HSI_Enable.
static uint32_t UTILS_GetPLLOutputFrequency(uint32_t PLL_InputFrequency, LL_UTILS_PLLInitTypeDef *UTILS_PLLInitStruct)
Function to check that PLL can be modified.
UTILS System, AHB and APB buses clock configuration structure definition.
__STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR)
Configure PLL used for SYSCLK Domain.
Header file of SYSTEM LL module.
static ErrorStatus UTILS_PLL_IsBusy(void)
Function to check that PLL can be modified.
ErrorStatus LL_PLL_ConfigSystemClock_HSE(uint32_t HSEFrequency, uint32_t HSEBypass, LL_UTILS_PLLInitTypeDef *UTILS_PLLInitStruct, LL_UTILS_ClkInitTypeDef *UTILS_ClkInitStruct)
This function configures system clock with HSE as clock source of the PLL.
__STATIC_INLINE uint32_t LL_RCC_PLLSAI1_IsReady(void)
Check if PLLSAI1 Ready CR PLLSAI1RDY LL_RCC_PLLSAI1_IsReady.
__STATIC_INLINE uint32_t LL_RCC_HSE_IsReady(void)
Check if HSE oscillator Ready CR HSERDY LL_RCC_HSE_IsReady.
__STATIC_INLINE void LL_FLASH_SetLatency(uint32_t Latency)
Set FLASH Latency FLASH_ACR LATENCY LL_FLASH_SetLatency.
void LL_Init1msTick(uint32_t HCLKFrequency)
This function configures the Cortex-M SysTick source to have 1ms time base.
Header file of UTILS LL module.
__STATIC_INLINE void LL_RCC_SetSysClkSource(uint32_t Source)
Configure the system clock source CFGR SW LL_RCC_SetSysClkSource.
Header file of PWR LL module.
__STATIC_INLINE uint32_t LL_RCC_MSI_GetRange(void)
Get the Internal Multi Speed oscillator (MSI) clock range in run mode. CR MSIRANGE LL_RCC_MSI_GetRan...
static ErrorStatus UTILS_EnablePLLAndSwitchSystem(uint32_t SYSCLK_Frequency, LL_UTILS_ClkInitTypeDef *UTILS_ClkInitStruct)
Function to enable PLL and switch system clock to PLL.
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))