Files
CHJ/user/MCU/lhl_lowpower.c

172 lines
6.6 KiB
C
Raw Normal View History

2026-03-20 21:16:58 +08:00
#include "../main/SystemInclude.h"
2026-03-20 21:19:53 +08:00
/**------------------------------------------------------------------------
* @brief ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô˺<EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
* @param mode: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡֵ<EFBFBD><EFBFBD>
* - PWR_MODE_SLEEP: ˯<EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD>ֹͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>
* - PWR_MODE_DEEP_SLEEP_1: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ֹͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ͹<EFBFBD><EFBFBD><EFBFBD>LDO<EFBFBD><EFBFBD>
* - PWR_MODE_DEEP_SLEEP_2: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ֹͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ͹<EFBFBD><EFBFBD><EFBFBD>LDO<EFBFBD><EFBFBD>
* - PWR_MODE_SNOOZE: ADCС˯ģʽ<EFBFBD><EFBFBD>ADC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* - PWR_MODE_SHUTDOWN: <EFBFBD>ض<EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @note <EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><EFBFBD><EFBFBD> LHL_PWR_SetPowerMode <EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>Դģʽ<EFBFBD><EFBFBD>
* Ȼ<EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD> WFI ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD>ָ<EFBFBD>ʱ<EFBFBD>ӣ<EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ExitLowPowerModeRecoverySysState() <EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD>Ѻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @example EnterLowPowerModeWFI(PWR_MODE_DEEP_SLEEP_2);
**/
2026-03-20 21:19:04 +08:00
void EnterLowPowerModeWFI(PWR_POWERMODE_t mode)
{
delay_ms(800);
LHL_PWR_SetPowerMode(mode);
2026-03-20 21:19:53 +08:00
LHL_PWR_EnterSleep();/*<2A>Դ<EFBFBD> Restore Clocks */
// <20><><EFBFBD>Ѻ<EFBFBD><D1BA>Ӵ˴<D3B4><CBB4><EFBFBD><EFBFBD><EFBFBD> <20><> <20>Զ<EFBFBD><D4B6>ָ<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD> ֪ͨ<CDA8><D6AA>ģ<EFBFBD><C4A3><EFBFBD>ѻ<EFBFBD><D1BB><EFBFBD>
ExitLowPowerModeRecoverySysState();
2026-03-20 21:16:58 +08:00
}
2026-03-20 21:19:53 +08:00
/*=============================================================================*/
__LPM_STA_TypeDef lpmState;
/**------------------------------------------------------------------------
* @brief <EFBFBD>͹<EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
* @note <EFBFBD>ж<EFBFBD> lpmState.mcuModeSleeping <EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̡<EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GPIO0.1 Ϊ<EFBFBD>ⲿ<EFBFBD>жϻ<EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><EFBFBD>ѣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>
* SetupLowPowertoWakeupByHandwareTrigger() <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> lpmState.lpm_mode ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> EnterLowPowerModeWFI<EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD> WFI <EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ˺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @example lpmState.lpm_mode = PWR_MODE_DEEP_SLEEP_2;
* lpmState.mcuModeSleeping = 1;
* LowPowerModeProcess();
**/
2026-03-20 21:19:04 +08:00
void LowPowerModeProcess(void)
{
2026-03-20 21:19:53 +08:00
if (lpmState.mcuModeSleeping==0) return ; //<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><CDB9><EFBFBD>
2026-03-20 21:19:04 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><CDB9><EFBFBD>
2026-03-20 21:19:53 +08:00
lpmState.mcuModeSleeping = 0 ;
/*ʹ<><CAB9> UART Rx<52><78><EFBFBD><EFBFBD> <20>ⲿ<EFBFBD>жϻ<D0B6><CFBB><EFBFBD>---------------------------------------------- */
GPIO_EXTI_Init(GPIO0,GPIO_PIN_1,EXTI_LINE_1,EXTI0_1_IRQn);//Ĭ<>Ͻ<EFBFBD>GPIO0.1<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
SetupLowPowertoWakeupByHandwareTrigger();//˯<><CBAF>ǰ<EFBFBD><C7B0><EFBFBD>á<EFBFBD><C3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ѣ<EFBFBD>ʹ<EFBFBD><CAB9>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD>жϿ<D0B6><CFBF>Դ<EFBFBD><D4B4><EFBFBD>
switch(lpmState.lpm_mode)
{
case PWR_MODE_DEEP_SLEEP_2 : EnterLowPowerModeWFI(PWR_MODE_DEEP_SLEEP_2); break ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
case PWR_MODE_SNOOZE : EnterLowPowerModeWFI(PWR_MODE_SNOOZE); break ; //ADCС˯ģʽ
case PWR_MODE_DEEP_SLEEP_1 : EnterLowPowerModeWFI(PWR_MODE_DEEP_SLEEP_1); break ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
case PWR_MODE_SLEEP : EnterLowPowerModeWFI(PWR_MODE_SLEEP); break ; //<2F><>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>
case PWR_MODE_SHUTDOWN : EnterLowPowerModeWFI(PWR_MODE_SHUTDOWN); break ; //<2F>ض<EFBFBD>ģʽ
default : EnterLowPowerModeWFI(PWR_MODE_SLEEP); break ;
}
}
// /**------------------------------------------------------------------------
// * @brief <20><><EFBFBD><EFBFBD>SNOOZEģʽDMA<4D><41><EFBFBD><EFBFBD>Դ
// * @param ch: 0=ʹ<><CAB9>ADC0<43><30>DMAͨ<41><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1=ʹ<><CAB9>ADC1<43><31>DMAͨ<41><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// * @note <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: SNOOZE_SRC_EXIT [2]
// * 0: ʹ<>ð<EFBFBD><C3B0><EFBFBD>ADC0<43><30>DMAͨ<41><CDA8><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>core<72><65>Դ
// * 1: ʹ<>ð<EFBFBD><C3B0><EFBFBD>ADC1<43><31>DMAͨ<41><CDA8><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>core<72><65>Դ
//**/
//void ADC_Set_SNOOZE_DMA_Wakeup(ADC_ID_t ADCx )
//{
// uint32_t reg_val = pADC->DMA_MODE;
//
//// LHL_ADC_DMACmd(ADCx, ENABLE); //dma_adc <20><>ʼ<EFBFBD><CABC><EFBFBD>Ѿ<EFBFBD>ʹ<EFBFBD><CAB9>
// reg_val &= ~ADC_SUBSYS_USER_DMA_MODE_SNOOZE_EXIT_SRC_Msk; // <20><>bit2
// reg_val |= (((uint32_t)ADCx - 1)<< ADC_SUBSYS_USER_DMA_MODE_SNOOZE_EXIT_SRC_Pos);
// pADC->DMA_MODE = reg_val;
//}
/**------------------------------------------------------------------------
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>
* @note <EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>
* Ĭ<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD>
* - LPTIM2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD> ADC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> XLINK<EFBFBD><EFBFBD>
* - RTC <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ 1 <EFBFBD><EFBFBD><EFBFBD>󴥷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> XLINK <EFBFBD><EFBFBD> ADC <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* - ADC <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ΪӲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>ģʽ
* - ʹ<EFBFBD><EFBFBD> ADC <EFBFBD><EFBFBD> EXTI <EFBFBD>ߣ<EFBFBD>EXTI_LINE_12<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
* @example <EFBFBD>ޣ<EFBFBD><EFBFBD><EFBFBD>ϵͳ<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
**/
__weak void SetupLowPowertoWakeupByHandwareTrigger(void)
{
/*ADC<44><43><EFBFBD><EFBFBD>-----SNOOZEģʽ<C4A3><CABD>Ч================================================*/
/* 1. LPTIM <20><><EFBFBD><EFBFBD> */
StartLPTimer2(32768); //<2F><><EFBFBD><EFBFBD>LPTimer<65><72><EFBFBD><EFBFBD>adcת<63><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 4s 16384 65535 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʱ<D2AA><EFBFBD>Ƚ<EFBFBD><C8BD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״δ<D7B4><CEB4><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
// /* 2. <20><><EFBFBD><EFBFBD>XLINK<4E><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LPTIM<49><4D>ADCӲ<43><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
// XLINK_LPTIM_To_ADC_Trigger(LPTIM2, ADC_0);
// /* 3. <20><><EFBFBD><EFBFBD> LPTIM2<4D><32>ΪADCӲ<43><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ*/
// MODIFY_REG(pPWR->CR, PWR_CR_ADC_MSYS_TSEL_Msk, (3U << PWR_CR_ADC_MSYS_TSEL_Pos));
2026-03-20 21:16:58 +08:00
2026-03-20 21:19:53 +08:00
/* 1. RTC<54><43><EFBFBD><EFBFBD> */
StartRTC_AlarmAfterSeconds(1);//<2F><><EFBFBD><EFBFBD> N <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LHL_RTC_ITConfig(RTC_IT_ALRIE, DISABLE);//<2F><><EFBFBD><EFBFBD>RTC<54><43><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> <20><>ʹ<EFBFBD>ܻ<EFBFBD><DCBB>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD> EXTI_LINE_9 <20><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
// 2. <20><><EFBFBD><EFBFBD> RTC ALARM<52><4D>ΪADCӲ<43><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
MODIFY_REG(pPWR->CR, PWR_CR_ADC_MSYS_TSEL_Msk, (0U << PWR_CR_ADC_MSYS_TSEL_Pos));
/* 3. <20><><EFBFBD><EFBFBD>XLINK<4E><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RTC ALARM<52><4D>ADCӲ<43><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
XLINK_RTC_ALARM_To_ADC_Trigger(ADC_0);
2026-03-20 21:16:58 +08:00
2026-03-20 21:19:53 +08:00
/* 4. ADC <20><><EFBFBD><EFBFBD> <20><>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA> */
ADC_REF_Init(REF_INTERNAL_2P5V, REF_INTERNAL_2P5V);
ADC_Init_For_LowerPower(ADC_0, ADC_SPS_5, GAIN32, ADC0_AIN0, ADC0_AIN1);
/* 5. <20><><EFBFBD>û<EFBFBD><C3BB><EFBFBD>Դ */
// LPTIM_EXTI_Init(LPTIM2);//<2F><>LPTimer2<72><32>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>Դ EXTI_LINE_11
ADC_EXTI_Init();//<2F><>ADC<44><43>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>Դ EXTI_LINE_12
2026-03-20 21:19:04 +08:00
}
2026-03-20 21:19:53 +08:00
/**------------------------------------------------------------------------
* @brief <EFBFBD>˳<EFBFBD><EFBFBD>͹<EFBFBD><EFBFBD>ĺ<EFBFBD><EFBFBD><EFBFBD>ϵͳ<EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>
* @note <EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>Զ<EFBFBD><EFBFBD>ƻ<EFBFBD><EFBFBD>Ѻ<EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Ĭ<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>
* - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> EXTI <EFBFBD>жϱ<EFBFBD>־λ
* - <EFBFBD>ָ<EFBFBD> UART <EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>³<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA <EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD>
* - <EFBFBD><EFBFBD>ȡһ<EFBFBD><EFBFBD> ADC ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD> ADC ֵ
* - Ĭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><EFBFBD>Խ<EFBFBD><EFBFBD><EFBFBD> SNOOZE ģʽ<EFBFBD><EFBFBD>lpmState <EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
* @example <EFBFBD>ޣ<EFBFBD><EFBFBD><EFBFBD> EnterLowPowerModeWFI <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
**/
__weak void ExitLowPowerModeRecoverySysState(void)
{
lpmState.mcuModeSleeping = 0 ;//<2F><><EFBFBD><EFBFBD>mcu<63><75><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB>λ
static u16 wakeupcount = 0 ,wakeupsource;
wakeupcount++ ;
wakeupsource = pEXTI->PR ;//<2F>жϻ<D0B6><CFBB><EFBFBD>Դ<EFBFBD><D4B4>־ pEXTI->EMR //<2F>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>־λ
pEXTI->PR = 0xFFFF;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>־λ
/* <20><><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD><EFBFBD><EFBFBD> */
//1. UART----------------------------------------------------
NVIC_DisableIRQ(EXTI0_1_IRQn); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>uart rx<72><78><EFBFBD>ⲿ<EFBFBD>ж<EFBFBD>
MainUartInit(baudRateVaule[baudRate]);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ûش<C3BB><D8B4>ڹ<EFBFBD><DAB9><EFBFBD>
StartDMAForRxdMainUartData();//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>DMA<4D><41><EFBFBD><EFBFBD>
// TEST_PIN_TOGGLE();
//2. ADC----------------------------------------------------
//<2F>ж<EFBFBD><D0B6><EFBFBD>ֵ<EFBFBD><D6B5>----
u16 adc_buffer = ADC_ReadData(ADC_0);//ֱ<>Ӷ<EFBFBD>ȡ<EFBFBD><C8A1>ʹ<EFBFBD><CAB9><EFBFBD>ж<EFBFBD>
// if(adc_buffer > 42768 ) lpmState.mcuModeSleeping = 0 ;//<2F>˳<EFBFBD>˯<EFBFBD><CBAF>
lpmState.lpm_mode = PWR_MODE_SNOOZE ;
lpmState.mcuModeSleeping = 1 ;//Ĭ<><C4AC><EFBFBD>ٴ<EFBFBD>˯<EFBFBD><CBAF>
printf(" \n ---<2D><><EFBFBD>Ѵ<EFBFBD><D1B4><EFBFBD> = %d ; <20><><EFBFBD><EFBFBD>Դ = %d <20><>ǰADCֵ = %d \n" ,wakeupcount , wakeupsource ,adc_buffer);
}