HAL库:GPIO唤醒模式 唤醒睡眠模式下的单片机
目录
HAL库:GPIO唤醒模式 唤醒睡眠模式下的单片机
注意事项:
初始化部分:
主函数测试部分
结果如图
HAL库:GPIO唤醒模式 唤醒睡眠模式下的单片机
注意事项:
- HAL库滴答定时器默认为打开状态,需要关闭后再进入睡眠,否则滴答会唤醒睡眠的单片机。在唤醒后可以再次打开
- 不明白单片机的低功耗模式,可以看我这篇博客STM32 PWR电源控制 与 低功耗模式 详解_stm32低功耗-CSDN博客
- 使用唤醒模式需要添加HAL_PWR.c的文件。
- 单片机进入睡眠模式的指令为HAL_PWR_EnterSLEEPMode(0,PWR_SLEEPENTRY_WFE) 第一个参数是为了移植所用。第二个参数是进入 事件唤醒模式。
初始化部分:
- 按键为低电平有效。所以为上拉电阻
- 唤醒模式配置为检测到下降沿 进入唤醒
//唤醒模式初始化
void KEY_Init_Event(void)
{__HAL_RCC_GPIOB_CLK_ENABLE(); //开启GPIOB时钟GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.Mode = GPIO_MODE_EVT_FALLING; //下降沿触发 唤醒 GPIO_InitStructure.Pin = GPIO_PIN_10;GPIO_InitStructure.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOB,&GPIO_InitStructure);//配置PB 10的模式
}
主函数测试部分
#include "stm32f1xx_hal.h"#include "rcc.h"
#include "led.h"
#include "key.h"/*函 数 名:设置PB10 时间模式 唤醒睡眠的stm32*参 数:*返 回 值:*注意事项:*/int main (void)
{HAL_Init();//初始化HAL库RccClock_Init();//配置时钟树72MLED_Init();//LED初始化KEY_Init_Event();while(1){//唤醒后闪灯HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_15);HAL_Delay(500);HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_15);HAL_Delay(500);HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_15);HAL_Delay(500);HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_15);HAL_SuspendTick(); //暂停滴答定时器HAL_PWR_EnterSLEEPMode(0,PWR_SLEEPENTRY_WFE); //进入睡眠模式HAL_ResumeTick(); //重启滴答定时器}}
结果如图
- 每次按下唤醒单片机,然后进入while循环 单片机进入睡眠。