用LowPowerReset就不会进入standby了
Low-power management reset
There are two ways to generate a low-power management reset:
1. Reset generated when entering Standby mode:
This type of reset is enabled by resetting nRST_STDBY bit in User Option Bytes. In this
case, whenever a Standby mode entry sequence is successfully executed, the device
is reset instead of entering Standby mode.
没有接后备电池,断电后数据当然无法保存。每次上电都要初始化RTC的。
首先说明一下,程序中每次进入standby前都会重新配置RTC;
可能是我没让你明白我的意思;
我的问题是,烧写完程序不断电,RTC_GetFlagStatus(RTC_FLAG_ALR)在standby被唤醒的时候能够正常读取到被SET,可以判断是通过这个flag判断出是被RTC alarm唤醒的。但是同样的程序,给系统完全断电后再上电,结果RTC_GetFlagStatus(RTC_FLAG_ALR)在standby被唤醒的时候一直读取到的是RESET,没法通过这个flag判断出是被RTC alarm唤醒的。
不知道我的疑问是否被你理解了?
所以,不接后备电池,断电后备份寄存器是空的,再一次初始化RTC了。
......
我在程序里面每次都会重新配置RTC,所以即使是断电在上电后(VBAT接的是VDD),也会重新配以一遍RTC,但是问题在于断电在上电后重新配置的RTC alarm虽然起作用,但是标志位不再有动作了,让我没法判断是不是被RTC Alarm唤醒了。
不知这样说是否清楚了?
另外我用的是F103CBU6
用LowPowerReset就不会进入standby了
Low-power management reset
There are two ways to generate a low-power management reset:
1. Reset generated when entering Standby mode:
This type of reset is enabled by resetting nRST_STDBY bit in User Option Bytes. In this
case, whenever a Standby mode entry sequence is successfully executed, the device
is reset instead of entering Standby mode.
wakeup pin唤醒的标志位在进入standby之前都清除掉了。
void Sys_Enter_Standby_WakeupPin_Enable(void)
{
/* Enable PWR and BKP clocks */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
/* Allow access to BKP Domain */
PWR_BackupAccessCmd(ENABLE);
RTC_ITConfig(RTC_IT_OW|RTC_IT_SEC,DISABLE);
RTC_ClearITPendingBit(RTC_IT_OW|RTC_IT_ALR|RTC_IT_SEC);
PWR_ClearFlag(PWR_FLAG_WU);
PWR_WakeUpPinCmd(ENABLE);
PWR_BackupAccessCmd(DISABLE);
PWR_EnterSTANDBYMode();
}
RTC_Configuration()开头一定要判断BKP_DR0是否是第一次写入值(假设是0x5050)
这个0X0505是第一次配置写入备份寄存器。你断电了就丢失了,还要重新配置的;
uint8_t RTC_Configuration(void)
if(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
RCC_LSEConfig(RCC_LSE_ON);
if(RTC_ReadBackupRegister(RTC_BKP_DR0)!=0x5050) //是否第一次配置?
{
RCC_LSEConfig(RCC_LSE_ON);//LSE 开启
楼主这个RTC例程如果不配置后备电池就没意义了。