#申请原创# 本次测试使用的APM32F103VC_MINI板子,该款芯片支持睡眠、停止和待机三种低功耗模式。下面以 StandBy 模式也就是待机模式为例进行组件的使用分析,唤醒方式采用 RTC闹钟中断的方式进行唤醒。
APM32F103 待机模式介绍: APM32F103待机模式的各种特性如下所示。在待机模式下除了关闭所有的时钟,还把 1.2V 区域的电源区也完全关闭了,也就是说,从待机模式唤醒后,由于没有之前代码的运行备份,相当于对芯片复位,重新检测 boot 条件,从头开始执行程序。唤醒方式有WKUP 引脚的上升 沿、RTC 闹钟事件、NRST 引脚上的外部复位,IWDT复位,下面来看下RTC闹钟事件是如何唤醒的。
实验设计: MCU启动后让LED2闪烁,然后延时4s后时钟闹钟唤醒时间,发生唤醒时间后唤醒MCU并点亮LED3。
1、相关时钟的初始化,以及LED的初始化。 - int i =0;
- RCM_EnableAPB1PeriphClock((RCM_APB1_PERIPH_T)(RCM_APB1_PERIPH_PMU | RCM_APB1_PERIPH_BAKR));
- APM_MINI_LEDInit(LED2);
- APM_MINI_LEDInit(LED3);
- APM_MINI_LEDOff(LED2);
- APM_MINI_LEDOff(LED3);
- SysTick_Init(); //LED2闪烁
- void SysTick_Handler(void)
- {
- APM_MINI_LEDToggle(LED2);
- }
2、RTC初始化 - PMU_EnableBackupAccess();
- RTC_Init();
3、 通过SB**判断是上电复位还是RTC闹钟事件,如果是中STAND_BY唤醒则点亮LED3
- void RTC_Init(void)
- {
-
- if(PMU_ReadStatusFlag(PMU_FLAG_SB) == SET) //从standby模式唤醒
- {
- APM_MINI_LEDOn(LED3);
- PMU_ClearStatusFlag(PMU_FLAG_SB);
- RTC_WaitForSynchro();
- }
- else //上电复位
- {
- BAKPR_Reset();
- RCM_ConfigLSE(RCM_LSE_OPEN);
- while(RCM_ReadStatusFlag(RCM_FLAG_LSERDY) == RESET);
- RCM_ConfigRTCCLK(RCM_RTCCLK_LSE);
- RCM_EnableRTCCLK();
- RTC_WaitForSynchro();
- RTC_ConfigPrescaler(32767);
- RTC_WaitForLastTask();
- }
- }
4、延时4s,然后进入STAND_BY模式
- for(i=0;i<=0x1ffffff;i++); //延时4s
- RTC_ConfigAlarm(RTC_ReadCounter()+ 3);
- RTC_WaitForLastTask();
- PMU_EnterSTANDBYMode();
有兴趣的小伙伴,也来测试一下吧~
|