一、低功耗停止模式
1、所有时钟都已经停止
2、进入方式:配置PWR_CR寄存器的PDDS+LPDS位+SLEEPDEEP位+WFI或WFE命令
3、唤醒方式:任意外部中断
4、关闭所有1.8v区域的时钟
5、HSI和HSE的振荡器关闭
6、开启或处于低功耗模式(依据电源控制寄存器的设定)
// 暂停滴答时钟,防止通过滴答时钟中断唤醒
HAL_SuspendTick();
//进入停止模式,设置电压调节器为低功耗模式,等待中断唤醒
HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON,PWR_STOPENTRY_WFI);
SYSCLKConfig_STOP();
// 被唤醒后,恢复滴答时钟
HAL_ResumeTick();
二、配置过程
1、配置RCC、SYS、USART1、时钟84MHz
2、添加按键PB8的外部中断模式,LED灯PF9、PF10输出模式
3、生成代码
三、代码编写
1、添加外部中断回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin==GPIO_PIN_10)
{
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_RESET);
}
}
2、在main中添加函数
// 使用绿灯指示,运行状态
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_RESET);
HAL_Delay(2000);
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_SET);
//进入睡眠降低功耗
HAL_Delay(2000);
//进入停止状态
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_RESET);
//暂停滴答时钟,防止通过滴答时钟中断唤醒
HAL_SuspendTick();
//使能PWR时钟
__HAL_RCC_PWR_CLK_ENABLE();
//清除唤醒标记
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
// 进入停止模式
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_SET);
// 刚从STOP模式唤醒时钟默认使用内部高速8M时钟,所以需要重新配置时钟
SystemClock_Config();
// 被唤醒后,恢复滴答时钟
HAL_ResumeTick();
// 获取重新配置后的时钟状态
SYSCLK_Frequency = HAL_RCC_GetSysClockFreq();
HCLK_Frequency = HAL_RCC_GetHCLKFreq();
PCLK1_Frequency = HAL_RCC_GetPCLK1Freq();
PCLK2_Frequency = HAL_RCC_GetPCLK2Freq();
SYSCLK_Source = __HAL_RCC_GET_SYSCLK_SOURCE();
// 重新配置时钟源后始终状态
HAL_Delay(2000);
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_SET);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)