在 NUCLEO-L053R8 板上开发 STM32L053R8。
我们有一个系统,它每 200 μS 左右从睡眠中“唤醒”,做少量工作然后返回睡眠(停止模式)。理想情况下,我希望在 50 μS 内从 STOP 唤醒。该HAL_RCC_OscConfig()
函数大约需要 170 μS,这使得这项工作毫无意义。
据我所知,大部分时间都花在了 PLL 配置上,特别是在重新启用 PLL 之后的 while 循环(“等待 PLL 准备就绪”)(大约 98 μS)。
/* 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;
}
}
有什么方法可以在 50 μS 以下从 STOP 模式唤醒并恢复到全速 HSI?从 STOP 唤醒时设置时钟的最有效方法是什么?
目前我使用 PWR_STOP 示例中规定的方法,如下所示:
/* 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(
) 来配置时钟并在HAL_RCC_OscConfig(&RCC_OscInitStruct)
.
非常感谢您提供的任何帮助。