NUCLEO-L053R8開發板上的STM32L053R8開發板。HAL_RCC_OscConfig時間太長(appx 170μS),從STOP喚醒時需要<50μS
我們有一個每200微秒左右從睡眠中「醒來」的系統,然後再進入少量工作(睡眠模式)。 理想情況下,我想在50μS以內從STOP喚醒。 HAL_RCC_OscConfig()
函數花費大約170μS,這使得這種努力毫無意義。
從我所看到的大部分時間都花費在PLL配置上,特別是跟隨PLL重新啓用(約98μS)的while循環(「等到PLL準備就緒」)。
/* Configure the main PLL clock source, multiplication and division factors. */
__HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource,
RCC_OscInitStruct->PLL.PLLMUL,
RCC_OscInitStruct->PLL.PLLDIV);
/* Enable the main PLL. */
__HAL_RCC_PLL_ENABLE();
/* Get timeout */
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
{
if((HAL_GetTick() - tickstart) > RCC_PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
}
是否有任何方法可以從STOP模式中喚醒並在50μS以下恢復到全速HSI? 什麼是從STOP喚醒時設置時鐘的最有效方法?
目前我使用在PWR_STOP例子是如下規定的方法:其構成的時鐘,幷包括在此HAL_RCC_OscConfig(&RCC_OscInitStruct)
長延遲
/* Enter Stop Mode */
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
/* Stop interrupt that woke us up */
int ret = HAL_LPTIM_TimeOut_Stop_IT(&LptimHandle);
SystemDisableWakeupCounter();
/* Configures system clock after wake-up from STOP: enable HSI, PLL and select
PLL as system clock source (HSI and PLL are disabled automatically in STOP mode) */
SystemClockConfig_STOP();
依次SystemClockConfig_STOP()
調用調用SystemClock_Config(
)。
非常感謝您提供任何援助。
你是什麼PLL的來源? –
PLLSource是RCC_PLLSOURCE_HSI – PsyUk