微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32之RTC闹钟唤醒停机模式

STM32之RTC闹钟唤醒停机模式

时间: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;我才刚认识到他就是传递中断向量地址的。

上一篇:Stm32时钟分析
下一篇:ARM与FPGA区别

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top