如题,本人在测试STOP模式下闹钟唤醒,发现唤醒间隙不一致,如图所示: æä»¶ 在非低功耗模式下,则可以获得等宽的脉冲,希望得到大神解惑。 file:///D:\Personal\Documents\Tencent Files\406178052\Image\C2C\C3967C544EC568420CF45759007E7027.jpg
评分
查看全部评分
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();
}
}
正解,需要初始化始终。
这里不签到……请出门左转