在学习江科大的PWR章节时,发现当调用 PWR_EnterSTANDBYMode() 函数进入待机模式后,STM32F03在没有触发唤醒条件时立即自动唤醒。查看了库函数后发现是标准库版本不同的问题。
江科大使用的是V3.5.0,PWR_EnterSTANDBYMode() 函数如下:
void PWR_EnterSTANDBYMode(void)
{
/* Clear Wake-up flag */
PWR->CR |= PWR_CR_CWUF;
/* Select STANDBY mode */
PWR->CR |= PWR_CR_PDDS;
/* Set SLEEPDEEP bit of Cortex System Control Register */
SCB->SCR |= SCB_SCR_SLEEPDEEP;
/* This option is used to ensure that store operations are completed */
#if defined ( __CC_ARM )
__force_stores();
#endif
/* Request Wait For Interrupt */
__WFI();
}
而我使用的是V3.6.2:
void PWR_EnterSTANDBYMode(void)
{
/* Select STANDBY mode */
PWR->CR |= PWR_CR_PDDS;
/* Set SLEEPDEEP bit of Cortex System Control Register */
SCB->SCR |= SCB_SCR_SLEEPDEEP;
/* This option is used to ensure that store operations are completed */
#if defined ( __CC_ARM )
__force_stores();
#endif
/* Request Wait For Interrupt */
__WFI();
}
可以看到,新的库函数没有清除 wake-up 标志位,手动清除即可😎
PWR->CR |= PWR_CR_CWUF;