stm32cubemx hal学习记录:PWR 低功耗停止模式

本文详细介绍了如何在嵌入式系统中实现低功耗停止模式,包括配置PWR寄存器、唤醒方式和时钟管理。还展示了配置RCC、SYS及外设的过程,以及编写外部中断回调函数和进入停止模式的代码示例。

一、低功耗停止模式

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值