新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > STM32之RTC闹钟唤醒停机模式

STM32之RTC闹钟唤醒停机模式

作者: 时间:2016-11-28 来源:网络 收藏
费了九牛二虎之力,终于搞出来这个RTC闹钟唤醒停机模式了,发现有以下几点:
1,停机模式下秒中断不能用;
2,每次闹钟中断后,要重新赋值,否则不会再进中断;
3,网上很多关于闹钟叫醒休眠模式的例程,后来发现,使能的都是秒中断,不是闹钟中断,根本不行;
4,发现闹钟中断使能后,如果使能了秒中断,则秒中断标志会置位:
void RTCAlarm_IRQHandler()//RTC_IRQHandler(void)
{
feed_dog();
if(RTC_GetITStatus(RTC_IT_SEC)!= RESET)
{
// g_bRTCAlarm = 1;
feed_dog();
RTC_ClearITPendingBit(RTC_IT_SEC);
RTC_WaitForLastTask();
}
if(RTC_GetITStatus(RTC_IT_ALR) != RESET)
{
g_bRTCAlarm = 1;
EXTI_ClearITPendingBit(EXTI_Line17);
if(PWR_GetFlagStatus(PWR_FLAG_WU) != RESET)
{
PWR_ClearFlag(PWR_FLAG_WU);
}
RTC_WaitForLastTask();
RTC_ClearITPendingBit(RTC_IT_ALR);
RTC_WaitForLastTask();
}
}
//void RTC_IRQHandler()//RTC_IRQHandler(void)
//{
// if(RTC_GetITStatus(RTC_IT_SEC) != RESET)
// {
//
//// g_bRTCAlarm = 1;
// feed_dog();
//
// RTC_ClearITPendingBit(RTC_IT_SEC);
//
// RTC_WaitForLastTask();
// }
//}
如果打开下面函数:
// NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
// NVIC_Init(&NVIC_InitStructure);
则秒中断就会进来;
还有,通过上面这个NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;我才刚认识到他就是传递中断向量地址的。


评论


技术专区

关闭