一、低功耗睡眠模式简介
1、简介
睡眠模式分为两种进入方式:①调用WFI命令。②调用WFE命令。
相同点:
睡眠模式:内核停止,所有外设包括M3核心的外设,如NVIC、系统时钟等仍在运行
对1.8v区域时钟的影响:内核时钟关,对其他时钟和ADC时钟无影响
对VDD区域时钟的影响:无
调压器:开
不同点:
睡眠模式1 进入方式:调用WFI命令 唤醒方式:任意中断
睡眠模式2 进入方式:调用WFE命令 唤醒方式:唤醒事件
2、命令解释:
WFI:等待中断唤醒
WFE:等待事件唤醒
3、使用到的代码
// 挂起(暂停)系统时钟中断
HAL_SuspendTick();
//进入睡眠模式, 任意中断唤醒
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
//恢复系统时钟中断
HAL_ResumeTick();
二、配置过程
1、配置RCC、SYS、USART1、时钟84MHz
2、添加WK_UP按键PA0的外部中断模式,LED灯PF9、PF10输出模式
3、生成代码
三、代码编写
1、在it.c中添加按键外部中断回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin==GPIO_PIN_0)
{
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,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_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_RESET);
// 暂停滴答时钟,防止通过滴答时钟中断唤醒
HAL_SuspendTick();
// 进入睡眠模式
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI);
// 按下按键,被唤醒后,恢复滴答时钟,灯亮,再灭掉
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_RESET);
HAL_ResumeTick();
HAL_Delay(2000);
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_SET);