STM32L151进入停止模式,引脚PB5和PC13初始化及唤醒,HAL库代码
时间: 2024-02-20 19:01:22 浏览: 89
STM32L151,HAL库,ADC多通道使用DMA中断传输,解决ADC通道错乱问题。OLED显示,STM32 stop低功耗模式。
以下是通过HAL库实现STM32L151进入停止模式,引脚PB5和PC13初始化及唤醒的完整代码:
```c
#include "stm32l1xx_hal.h"
int main(void)
{
//初始化HAL库
HAL_Init();
//开启时钟
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
//配置PB5和PC13为输入模式
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_13;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
//设置PB5和PC13为唤醒引脚
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN2);
//进入停止模式
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
//从停止模式唤醒
if(__HAL_PWR_GET_FLAG(PWR_FLAG_WU) != RESET)
{
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
//处理唤醒后的操作
}
while(1)
{
//主循环
}
}
```
在代码中,我们首先对GPIOB和GPIOC时钟进行开启,然后通过 `GPIO_InitTypeDef` 结构体设置PB5和PC13为输入模式,并开启下拉电阻。接着使用 `HAL_PWR_EnableWakeUpPin()` 函数设置PB5和PC13为唤醒引脚。在进入停止模式前,需要设置低功耗稳压器(`PWR_LOWPOWERREGULATOR_ON`),并使用 `HAL_PWR_EnterSTOPMode()` 函数进入停止模式。最后,通过判断唤醒标志位是否被置位,来确定是否从停止模式唤醒,并在唤醒后进行相关操作。
需要注意的是,为了使唤醒引脚正常工作,还需要在初始化时将PB5和PC13设置为输入模式。
阅读全文