#define DCDC_ENABLE TRUE
#endif
#ifndef HAL_SLEEP
#define HAL_SLEEP TRUE
这里设置了true
主程序这样:
/********************************** (C) COPYRIGHT *******************************
* File Name : main.c
* Author : WCH
* Version : V1.0
* Date : 2020/08/06
* Description : 蓝牙键盘应用主函数及任务系统初始化
*********************************************************************************
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
* Attention: This software (modified or not) and binary are used for
* microcontroller manufactured by Nanjing Qinheng Microelectronics.
*******************************************************************************/
/******************************************************************************/
/* 头文件包含 */
#include "CONFIG.h"
#include "HAL.h"
#include "hiddev.h"
#include "hidkbd.h"
#include "MyBSP.h"
#include "CH58x_common.h"
/*********************************************************************
* GLOBAL TYPEDEFS
*/
__attribute__((aligned(4))) uint32_t MEM_BUF[BLE_MEMHEAP_SIZE / 4];
#if(defined(BLE_MAC)) && (BLE_MAC == TRUE)
const uint8_t MacAddr[6] = {0x84, 0xC2, 0xE4, 0x03, 0x02, 0x02};
#endif
/*********************************************************************
* @fn Main_CirculationTMOS
*
* @brief 主循环
*
* @return none
*/
__HIGH_CODE
__attribute__((noinline))
void Main_Circulation()
{
while(1)
{
TMOS_SystemProcess();
}
}
/*********************************************************************
* @fn main
*
* @brief 主函数
*
* @return none
*/
int main(void)
{
#if(defined(DCDC_ENABLE)) && (DCDC_ENABLE == TRUE)
PWR_DCDCCfg(ENABLE);
#endif
SetSysClock(CLK_SOURCE_PLL_60MHz);
#if(defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE)
GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
#endif
#ifdef DEBUG
GPIOA_SetBits(bTXD1);
GPIOA_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA);
UART1_DefInit();
#if 1
/* 配置唤醒源为 GPIO - PB22 */
GPIOB_ModeCfg(GPIO_Pin_22, GPIO_ModeIN_PU);
GPIOB_ITModeCfg(GPIO_Pin_22, GPIO_ITMode_FallEdge); // 下降沿唤醒
PFIC_EnableIRQ(GPIO_B_IRQn);
PWR_PeriphWakeUpCfg(ENABLE, RB_SLP_GPIO_WAKE, Long_Delay);
#endif
#if 1
PRINT("sleep mode sleep \n");
DelayMs(2);
// 注意当主频为80M时,Sleep睡眠唤醒中断不可调用flash内代码。
LowPower_Sleep(RB_PWR_RAM30K | RB_PWR_RAM2K); //只保留30+2K SRAM 供电
HSECFG_Current(HSE_RCur_100); // 降为额定电流(低功耗函数中提升了HSE偏置电流)
DelayMs(5);
PRINT("wake.. \n");
DelayMs(500);
#endif
#if 1
PRINT("shut down mode sleep \n");
DelayMs(2);
LowPower_Shutdown(0); //全部断电,唤醒后复位
/*
此模式唤醒后会执行复位,所以下面代码不会运行,
注意要确保系统睡下去再唤醒才是唤醒复位,否则有可能变成IDLE等级唤醒
*/
HSECFG_Current(HSE_RCur_100); // 降为额定电流(低功耗函数中提升了HSE偏置电流)
PRINT("wake.. \n");
DelayMs(500);
#endif
#endif
PRINT("%s\n", VER_LIB);
CH58X_BLEInit();
MyBsp_Init();
HAL_Init();
GAPRole_PeripheralInit();
HidDev_Init();
HidEmu_Init();
Main_Circulation();
}
void GPIOB_IRQHandler(void)
{
GPIOB_ClearITFlagBit(GPIO_Pin_8);
}
/******************************** endfile @ main ******************************/
那么它到底什么时候进入几乎断电 LowPower_Shutdown又什么时候会进入到睡眠呢,如果我想4分钟不动就进入睡眠应该修改哪儿呢。