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

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

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值