你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
æä»¶
举报
查看全部评分
zhao.zhao 发表于 2017-4-30 15:29 停止模式下,闹钟唤醒,要在中断唤醒后,再次初始化系统时钟的。
长不大的小孩 发表于 2017-5-18 16:20 簽到簽到啦!!!!
评分
查看全部评分
int RTC_Init_User(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
BKP_DeInit();
//使能后备寄存器访问
PWR_BackupAccessCmd(ENABLE);
RCC_LSICmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == 0) {};
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
RCC_RTCCLKCmd(ENABLE);
RTC_WaitForLastTask();
RTC_WaitForSynchro();
RTC_SetPrescaler(4000);
RTC_WaitForLastTask();
RTC_SetCounter(0);
RTC_WaitForLastTask();
RTC_SetAlarm(RTC_GetCounter()+2); //设置闹钟时间 默认初始化为0.5秒钟后闹钟事件
RTC_WaitForLastTask();
RTC_ITConfig(RTC_IT_ALR, ENABLE);
RTC_WaitForLastTask();
// PWR_Cfg_User();
//闹钟中断接到第17线外部中断
EXTI_ClearITPendingBit(EXTI_Line17);
EXTI_InitStructure.EXTI_Line = EXTI_Line17;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = RTCAlarm_IRQn;//闹钟唤醒
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
return 0;
}
int RTC_Cfg_User(uint8_t Alarm)
{
RTC_SetAlarm(RTC_GetCounter()+Alarm); //设置闹钟时间
RTC_WaitForLastTask();
return 0;
}
void RTCAlarm_IRQHandler()
{
uint32_t iTemp=0;
RTC_WaitForSynchro();
if (RTC_GetITStatus(RTC_IT_ALR) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line17);
RTC_WaitForLastTask();
RTC_ClearITPendingBit(RTC_IT_ALR);
RTC_WaitForLastTask();
if(PWR_GetFlagStatus(PWR_FLAG_WU) != RESET)
{
PWR_ClearFlag(PWR_FLAG_WU); // 清除唤醒标志
RTC_WaitForLastTask();
}
GPIO_ToggleBits(GPIO_Pin_13,GPIOC);
RTC_SetCounter(0);
RTC_WaitForLastTask();
iTemp=RTC_GetCounter();
RTC_SetAlarm((uint32_t)(iTemp+2)); //设置闹钟时间 默认初始化为0.5秒钟后闹钟事件
RTC_WaitForLastTask();
RTC_ClearITPendingBit(RTC_IT_ALR);
RTC_WaitForLastTask();
}
}
正解,需要初始化始终。
这里不签到……请出门左转