creep 发表于 2015-6-3 22:38:23

【STM32F303开发】+ RTC闹钟中断唤醒STOP模式休眠

对于一些电池供电的设置功耗是比较敏感的,所以就避免不了采用MCU的休眠模式。M3/M4等芯片基本都会有3种休眠模式,本测试程序使用的是STOP模式,该模式进入休眠后唤醒SRAM和外设内容保存不变,采用外部中断唤醒,通过一个按键可实现某种意义上的开关机电路。

因为RTC的Alram也和外部中断线相连,所以可以用来唤醒STOP休眠。进入STOP休眠唤醒后系统时钟为内部8M时钟,需要根据需要重新配置系统时钟。程序唤醒后从先进入唤醒的外部中断,然后执行进入STOP休眠的下一条代码。如果要在唤醒中断中执行某种操作,比如我们这个DEMO输出串口数据,那么就要在唤醒的中断中恢复系统时钟。

唤醒后使用内部时钟


唤醒代码如下:
void SYSCLKConfig_STOP(void)
{
/* After wake-up from STOP reconfigure the system clock */
/* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON);

/* Wait till HSE is ready */
while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET)
{}

/* Enable PLL */
RCC_PLLCmd(ENABLE);

/* Wait till PLL is ready */
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{}

/* Select PLL as system clock source */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

/* Wait till PLL is used as system clock source */
while (RCC_GetSYSCLKSource() != 0x08)
{}
}在Alarm中断中恢复系统时钟:
void RTC_Alarm_IRQHandler(void)
{
if (RTC_GetITStatus(RTC_IT_ALRA) != RESET)
{
                //!!因为此时要使用串口发送数据,所以要在此处恢复系统时钟
                SYSCLKConfig_STOP();
                printf("\n\r-----RTC ALARMA 中断唤醒STOP休眠-----\n\r\n\r");
                RTC_GetTime(RTC_Format_BIN,&GetRTCTime);
                printf("\n\r-----唤醒Time: %02d:%02d:%02d-----\n\r\n\r",GetRTCTime.RTC_Hours,GetRTCTime.RTC_Minutes,GetRTCTime.RTC_Seconds);
    /* Clear the Alarm A Pending Bit */
    RTC_ClearITPendingBit(RTC_IT_ALRA);
   
    /* Clear EXTI line17 pending bit */
    EXTI_ClearITPendingBit(EXTI_Line17);   
}

}
Demo测试程序会每5秒唤醒一次STOP中断,然后再次进入STOP,串口会打印设置的唤醒时间和进入STOP提示及唤醒的时间。

需要注意的是进入STOP模式后就没法下载程序了,如果程序还在调试阶段的时候,进入STOP模式前尽量做些延时,要不然一上电就STOP模式,如果唤醒的程序有问题的话,那就有可能呵呵了。。。。。
这个DEMO进入STOP模式延时了2s了,如果下载时正好在STOP模式,按下开发板的复位键,2s可以下载更新程序。



lkl0305 发表于 2015-6-3 23:09:03

学习了:D

Paderboy 发表于 2015-6-3 23:18:57

多谢分享,学习了

semon12345 发表于 2015-6-4 08:18:33

谢谢分享               

星辰一方 发表于 2015-6-4 08:43:01

看来实用HAL库的还是比较少的,这个库资料太少是硬伤啊

creep 发表于 2015-6-4 08:57:30

星辰一方 发表于 2015-6-4 08:43
看来实用HAL库的还是比较少的,这个库资料太少是硬伤啊

之前一直使用标准库开发,所以也就不想马上转换到HAL上面了。
不过,随着ST对HAL的重视,估计以后应该是HAL的天下了。

stary666 发表于 2015-6-4 10:02:49

好东西,,,,,

baisse-355648 发表于 2016-5-30 12:23:56


多谢分享,学习了

jorry 发表于 2016-7-13 16:04:22

学习一下:)

YJ_BLADE 发表于 2016-8-12 08:58:43

学习一下   
页: [1] 2 3
查看完整版本: 【STM32F303开发】+ RTC闹钟中断唤醒STOP模式休眠