目录
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();//配置时钟树72M
LED_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循环 单片机进入睡眠。