stm32cubemx hal学习记录:PWR 低功耗睡眠模式

一、低功耗睡眠模式简介

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);
	}
}

stm32cubemx hal学习记录:PWR 低功耗睡眠模式_第1张图片

 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);

你可能感兴趣的:(stm32,stm32,单片机,学习)