在线时间2 小时
UID3170049
ST金币15
蝴蝶豆0
注册时间2016-4-7
该用户从未签到
新手上路
- 最后登录
- 2019-1-23
|
///////////////////////////////////////////////////////////
在Standby模式休眠后,等RTC时间到后会复位一次。但进入STOP1模式时,RTC无法唤醒系统
////////////////////////////////////////////////////////////
void RCT_Init(void) {
/* Enable RTC APB clock */
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_RTC);
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
LL_PWR_EnableBkUpAccess();
/* Enable LSE only if disabled.*/
if (LL_RCC_LSE_IsReady() == 0) {
LL_RCC_ForceBackupDomainReset();
LL_RCC_ReleaseBackupDomainReset();
LL_RCC_LSE_Enable();
while (LL_RCC_LSE_IsReady() != 1) {
}
LL_RCC_SetRTCClockSource(LL_RCC_RTC_CLKSOURCE_LSE);
}
/* Peripheral clock enable */
LL_RCC_EnableRTC();
/////////////////////////////////////////////////
/* ######## ENABLE WUT #################################################*/
/* Disable RTC registers write protection */
LL_RTC_DisableWriteProtection(RTC);
/* Set prescaler according to source clock */
LL_RTC_SetAsynchPrescaler(RTC, RTC_ASYNCH_PREDIV);
LL_RTC_SetSynchPrescaler(RTC, RTC_SYNCH_PREDIV);
/* Disable wake up timer to modify it */
LL_RTC_WAKEUP_Disable(RTC);
/* Wait until it is allow to modify wake up reload value */
while (LL_RTC_IsActiveFlag_WUTW(RTC) != 1) {
}
/* Setting the Wakeup time to RTC_WUT_TIME s
If LL_RTC_WAKEUPCLOCK_CKSPRE is selected, the frequency is 1Hz,
this allows to get a wakeup time equal to RTC_WUT_TIME s
if the counter is RTC_WUT_TIME */
LL_RTC_WAKEUP_SetAutoReload(RTC, 1);
LL_RTC_WAKEUP_SetClock(RTC, LL_RTC_WAKEUPCLOCK_CKSPRE);
/* Enable RTC registers write protection */
LL_RTC_EnableWriteProtection(RTC);
/* Disable RTC registers write protection */
LL_RTC_DisableWriteProtection(RTC); //禁用RTC寄存器写入保护
/* Enable wake up counter and wake up interrupt */
/* Note: Periodic wakeup interrupt should be enabled to exit the device
from low-power modes.*/
LL_RTC_EnableIT_WUT(RTC); //启用唤醒计数器和唤醒中断(没看见这个中断入口函数)
LL_RTC_WAKEUP_Enable(RTC); //唤醒使能
/* Enable RTC registers write protection */
LL_RTC_EnableWriteProtection(RTC);
/* Reset Internal Wake up flag */
LL_RTC_ClearFlag_WUT(RTC);
/* ######## ENTER IN STANDBY MODE ######################################*/
/////////////////////////////////////////////////
}
void EnterStandbyMode(void) {
/* Set Standby mode */
LL_PWR_SetPowerMode(LL_PWR_MODE_STANDBY);
/* Set SLEEPDEEP bit of Cortex System Control Register */
LL_LPM_EnableDeepSleep();
/* This option is used to ensure that store operations are completed */
/* Request Wait For Interrupt */
__WFI();
}
void EnterSTOP1Mode(void) {
/* Set STOP1 mode */
LL_PWR_SetPowerMode(LL_PWR_MODE_STOP1);
/* Set SLEEPDEEP bit of Cortex System Control Register */
LL_LPM_EnableDeepSleep();
/* This option is used to ensure that store operations are completed */
/* Request Wait For Interrupt */
__WFI();
}
|
|