G32F031低功耗测试-WKUP唤醒STANDBY模式
STANDBY模式介绍STANDBY模式的进入内核寄存器的 SLEEPDEEP 位置 1PMU 模块中 PMU_LPCR 的 LPCFG 位置 1确认没有挂起的中断WFI或事件WFE确认没有发生 STANDBY 唤醒事件执行 WFI 或 WFE 指令立即进入 STANDBY 模式STANDBY模式进入后当配置为 STANDBY0 模式时所有外设均停止工作CORE 域掉电所有时钟关闭FLASH 掉电SRAM 掉电当配置为 STADNBY1 模式时IWDT 和 LPTMR 不受影响其余模块均停止工作CORE 域掉电HSI 时钟关闭LSI 时钟不受影响FLASH 掉电SRAM 掉电STANDBY模式唤醒当处于 STANDBY0 模式时仅通过 WKUP 引脚的上升/下降/双边沿唤醒当处于 STANDBY1 模式时可通过 WKUP 引脚IWDT 和 LPTMR 唤醒STANDBY模式唤醒后系统时钟自动切换为 HSI_SYS_CLK 时钟由于 HSIDIV 被复位所以频率固定为64MHz系统重新执行程序STANDBY模式功耗情况STANDBY模式测试程序pmu_standby.c复制#includepmu_standby.hvoidSetWkupPin_EnterStandbyMode(void){//PA7-WAKEUP0 PB2-WAKEUP1/* ÔÊÐí²Ù×÷PMU¼Ä´æÆ÷ */DDL_PMU_Unlock();/* ½øÈëSTANDBYºó£¬LSI¹Ø±Õ£¬LPTMRºÍIWDT±»¸´Î»ÇÒ²»¹¤×÷ */DDL_PMU_SetStandbyMode(DDL_PMU_STANDBY_MODE_LSI_OFF);/* Çå³ýWAKEUP PIN0»½ÐѱêÖ¾ */DDL_PMU_ClearFlag_WKUPF0();/* Çå³ýWAKEUP PIN1»½ÐѱêÖ¾ */DDL_PMU_ClearFlag_WKUPF1();/* WAKEUP PIN0¿ªÆôÉÏÀ */DDL_PMU_SetWakeUpStandbyPin0Pull(DDL_PMU_WAKEUP_PIN0_PULL_UP);/* WAKEUP PIN1¿ªÆôÉÏÀ */DDL_PMU_SetWakeUpStandbyPin1Pull(DDL_PMU_WAKEUP_PIN1_PULL_UP);/* WAKEUP PIN0»½ÐѼ«ÐÔϽµÑØ */DDL_PMU_SetWakeUpStandbyPin0Polarity(DDL_PMU_WAKEUP_PIN0_POLARITY_FALL_EDGE);/* WAKEUP PIN1»½ÐѼ«ÐÔϽµÑØ */DDL_PMU_SetWakeUpStandbyPin1Polarity(DDL_PMU_WAKEUP_PIN0_POLARITY_FALL_EDGE);/* WAKEUP PIN0»½ÐÑStandby */DDL_PMU_EnableWakeUpStandbyPin0();/* WAKEUP PIN1»½ÐÑStandby */DDL_PMU_EnableWakeUpStandbyPin1();/* ÅäÖôý»úģʽ */DDL_PMU_SetLPMMode(DDL_PMU_LPM_STANDBY);/* PMUÉÏËø£¬²»ÔÊÐí²Ù×÷PMU¼Ä´æÆ÷ */DDL_PMU_Lock();//½øÈë´ý»úģʽ/* ÉèÖÃCortexϵͳ¿ØÖƼĴæÆ÷µÄSLEEPDEEPλ */SET_BIT(SCB-SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));__WFI();/* ÖØÖÃCortexϵͳ¿ØÖƼĴæÆ÷ÖеÄSLEEPDEEPλ */CLEAR_BIT(SCB-SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));}pmu_standby.h复制#ifndef _PMU_STANDBY_H#define _PMU_STANDBY_H#includeg32f031_device_cfg.hvoidSetWkupPin_EnterStandbyMode(void);#endifmain.c复制#includemain.h#includedelay.h#includeled.h#includekey.h#includercc.h#includeusart_log.h#includepmu_standby.hDDL_RCC_ClocksTypeDef RCC_Clocks;intmain(void){HSI64_ConfigInit();SystickDelay_ConfigInit(64);LED_PB6_PB7_ConfigInit();KEY1_PA0_Init(BUTTON_MODE_EXTI);KEY2_PA1_Init(BUTTON_MODE_EXTI);USART_PA10_PA11_LOG_ConfigInit(115200);delay_ms(500);delay_ms(500);delay_ms(500);delay_ms(500);printf(Enter Standby Mode\r\n);SetWkupPin_EnterStandbyMode();//standby 1.8uA(PA7,PB2)while(1){LED1_Toggle();LED2_Toggle();delay_ms(500);}}STANDBY实际功耗测试情况STANDBY模式接线STANDBY模式进入前STANDBY模式进入后到此STANDBY模式测试结束和规格书描述的差不多只有1点几uA。---------------------作者heyanmei链接https://bbs.21ic.com/icview-3519203-1-1.html来源21ic.com此文章已获得原创/原创奖标签著作权归21ic所有任何人未经允许禁止转载。