void GPIO_ALL_init(void)
{
GPIO_Config_T gpioConfig;
/** Enable the GPIO Clock */
//F030R8没有GPIOE
RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOA|RCM_AHB_PERIPH_GPIOB|RCM_AHB_PERIPH_GPIOC|RCM_AHB_PERIPH_GPIOD|RCM_AHB_PERIPH_GPIOF);
/** Configure the GPIO_LED pin */
gpioConfig.pin = GPIO_PIN_ALL;
gpioConfig.mode = GPIO_MODE_AN;
gpioConfig.speed = GPIO_SPEED_50MHz;
gpioConfig.pupd = GPIO_PUPD_NO;
GPIO_Config(GPIOA, &gpioConfig);
GPIO_Config(GPIOB, &gpioConfig);
GPIO_Config(GPIOC, &gpioConfig);
GPIO_Config(GPIOD, &gpioConfig);
// GPIO_Config(GPIOE, &gpioConfig);
GPIO_Config(GPIOF, &gpioConfig);
RCM_DisableAHBPeriphClock(RCM_AHB_PERIPH_GPIOA|RCM_AHB_PERIPH_GPIOB|RCM_AHB_PERIPH_GPIOC|RCM_AHB_PERIPH_GPIOD|RCM_AHB_PERIPH_GPIOF);
}
|
可以看到这里有三条外设时钟总线开关:AHB、APB1、APB2
|
//关闭外设时钟
RCM->AHBCLKEN = 0;
RCM->APBCLKEN1 = 0;
RCM->APBCLKEN2 = 0;
|
/* 低功耗程序 */
//系统进入睡眠模式
void Sys_Enter_Sleep(void)
{
RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_PMU);//使能PMU时钟
PMU_ClearStatusFlag(PMU_FLAG_WUPF);//清除唤醒标志
PMU_EnterSleepMode(PMU_SLEEPENTRY_WFI);
}
//系统进入停止模式——PMU_REGULATOR_ON
void Sys_Enter_Stop_on_Mode(void)
{
RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_PMU);//使能PMU时钟
PMU_ClearStatusFlag(PMU_FLAG_WUPF);//清除唤醒标志
PMU_EnterSTOPMode(PMU_REGULATOR_ON,PMU_STOPENTRY_WFI);
}
//系统进入停止模式——PMU_REGULATOR_LowPower
void Sys_Enter_Stop_Lowpower_Mode(void)
{
RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_PMU);//使能PMU时钟
PMU_ClearStatusFlag(PMU_FLAG_WUPF);//清除唤醒标志
PMU_EnterSTOPMode(PMU_REGULATOR_LowPower,PMU_STOPENTRY_WFI);
}
//系统进入待机模式
void Sys_Enter_Standby(void)
{
RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_PMU);//使能PMU时钟
PMU_ClearStatusFlag(PMU_FLAG_STDBYF);//清除唤醒标志
PMU_EnterSTANDBYMode();
}
|
程序情况:
测试情况:(这颗不代表所有的芯片,只是看下它大概的配置效果)
可以看到运行模式>睡眠模式>停止(on)>停止(LP)>待机模式
|
点进库函数,看看这里的参数:有WFI和WFE两种方式
|