Files
CHJ/user/MCU/lhl_lowpower.c
2026-03-20 21:19:04 +08:00

69 lines
2.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "../main/SystemInclude.h"
void EXTI_PWR_Wakeup_irq_callback(void)
{
mcuModeSleeping = 0 ;//唤醒mcu并将标志位复位
//NVIC_DisableIRQ(EXTI4_7_IRQn);
//printf("deepsleep out");
}
static void SetupWakeupSources(PWR_WakeupWay_TypeDef wakeupWay)
{
if(wakeupWay == PWR_Wakeup_None) return ;
if(wakeupWay & PWR_Wakeup_RTC)
{
}
if(wakeupWay & PWR_Wakeup_EXTI)
{
GPIO_EXTI_Init(GPIO1,GPIO_PIN_7,EXTI_LINE_7,EXTI4_7_IRQn);//设置一个外部exti中断等待进入中断然后中断清除标志位
Exti_register_irq_callback(EXTI_LINE_7,EXTI_PWR_Wakeup_irq_callback);
}
if(wakeupWay & PWR_Wakeup_LPTIM1)
{
}
if(wakeupWay & PWR_Wakeup_LPTIM2)
{
}
if(wakeupWay & PWR_Wakeup_IWDG)
{
}
}
/**
* 执行休眠之前,调用此函数选择具体的休眠模式
* PWR_POWERMODE_t: 5种休眠模式
* PWR_MODE_SLEEP 睡眠模式(Cortex"-M0+内核停止,所有外设包括 Cortex"-M0+核心的外设,如 NVIC、系统时钟(SysTick)等仍在运行)
* PWR_MODE_DEEP_SLEEP_1 深度休眠1(除了 32K LSI 和 LSE外所有的时钟都已停止。不启用 low power LDO)
* PWR_MODE_DEEP_SLEEP_2 深度休眠2(除了 32K LSI 和 LSE外所有的时钟都已停止。启用 low power LDO)
* PWR_MODE_SNOOZE ADC小睡模式(ADC 系统独立工作)
* PWR_MODE_SHUTDOWN 关断模式(HPLDO 和 LPLDO 均关闭,数字域全部掉电)
***/
void EnterLowPowerModeWFI(PWR_POWERMODE_t mode)
{
delay_ms(800);
// SetupWakeupSources(PWR_Wakeup_EXTI);// PWR_Wakeup_RTC|PWR_Wakeup_EXTI //使用外部中断源唤醒,使用前必须确定该中断可以触发
LHL_PWR_SetPowerMode(mode);
LHL_PWR_EnterSleep();
}
volatile u32 mcuModeSleeping;
//PWR_POWERMODE_t LowPowerMode = PWR_MODE_DEEP_SLEEP_1 ;
void LowPowerModeProcess(void)
{
// if (mcuModeSleeping==0) return ;
//进入低功耗
mcuModeSleeping = 0 ;
// printf("deepsleep in");
EnterLowPowerModeWFI(PWR_MODE_DEEP_SLEEP_1);
// EnterLowPowerModeWFI(PWR_MODE_DEEP_SLEEP_2);
// EnterLowPowerModeWFI(PWR_MODE_SNOOZE);
// EnterLowPowerModeWFI(PWR_MODE_SHUTDOWN);
// EnterLowPowerModeWFI(LowPowerMode);
}