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

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值