登录/注册

STM32停机唤醒实验

STM32停机唤醒实验

更多

STM32停机模式唤醒实验详解(基于HAL库)

实验原理

  1. 停机模式(Stop Mode)特性

    • 内核停止工作(CPU停止)
    • 保留SRAM和寄存器内容
    • 外设时钟停止(可通过配置保留特定外设)
    • 唤醒后自动恢复时钟(HSE/PLL需重新配置)
    • 功耗:约20μA(STM32F1系列)
  2. 唤醒方式

    • 外部中断(EXTI)
    • RTC闹钟事件
    • USB唤醒信号
    • 以太网唤醒(特定型号)

硬件要求

代码实现(HAL库)

#include "stm32f1xx_hal.h"

// 函数声明
void SystemClock_Config(void);
static void GPIO_Init(void);
void Enter_Stop_Mode(void);

int main(void) {
  HAL_Init();
  SystemClock_Config();
  GPIO_Init();

  while (1) {
    HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);  // LED闪烁
    HAL_Delay(1000);

    // 3秒后进入停机模式
    HAL_Delay(3000);
    Enter_Stop_Mode();
  }
}

// 进入停机模式函数
void Enter_Stop_Mode(void) {
  __HAL_RCC_PWR_CLK_ENABLE();  // 使能PWR时钟

  // 配置唤醒引脚(PWR_CR_EWUP)
  HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);  // PA0

  // 设置电压调节器进入低功耗模式
  HAL_PWREx_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

  // 唤醒后执行这里 ↓↓↓
  SystemClock_Config();  // 必须重新配置时钟
}

// 系统时钟配置(唤醒后需重新初始化)
void SystemClock_Config(void) {
  RCC_OscInitTypeDef osc = {0};
  RCC_ClkInitTypeDef clk = {0};

  osc.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  osc.HSEState = RCC_HSE_ON;
  osc.PLL.PLLState = RCC_PLL_ON;
  osc.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  osc.PLL.PLLMUL = RCC_PLL_MUL9;
  HAL_RCC_OscConfig(&osc);

  clk.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK
                | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
  clk.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  clk.AHBCLKDivider = RCC_SYSCLK_DIV1;
  clk.APB1CLKDivider = RCC_HCLK_DIV2;
  clk.APB2CLKDivider = RCC_HCLK_DIV1;
  HAL_RCC_ClockConfig(&clk, FLASH_LATENCY_2);
}

// GPIO初始化
static void GPIO_Init(void) {
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  // 使能GPIO时钟
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOC_CLK_ENABLE();

  // 配置WAKEUP引脚(PA0)
  GPIO_InitStruct.Pin = GPIO_PIN_0;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  // 配置LED引脚(PC13)
  GPIO_InitStruct.Pin = GPIO_PIN_13;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}

关键配置说明

  1. 唤醒引脚配置

    • 使用PA0(WKUP专用引脚)
    • 无需配置EXTI中断
    • 通过HAL_PWR_EnableWakeUpPin()使能
  2. 停机模式配置

    • PWR_LOWPOWERREGULATOR_ON:使用低功耗稳压器
    • PWR_STOPENTRY_WFI:使用WFI指令进入
  3. 唤醒后必须操作

    SystemClock_Config(); // 重新配置主时钟

实验现象

  1. 上电后LED每秒闪烁1次
  2. 3秒后进入停机模式(LED停止闪烁)
  3. 按下PA0连接的按键唤醒系统
  4. LED恢复闪烁(唤醒时间约10μs)

功耗优化建议

  1. 进入前关闭ADC/DAC
  2. 禁用未使用的外设时钟
  3. 将未使用的IO设为模拟输入模式
  4. 使用__HAL_RCC_AFIO_CLK_DISABLE()禁用AFIO时钟

注意事项

  1. 唤醒后程序从Enter_Stop_Mode()函数内继续执行
  2. 唤醒后所有外设需重新初始化(除SRAM内容保留)
  3. 调试模式下无法进入停机模式(需断开调试器)

常见问题排查

现象 解决方法
无法唤醒 检查PA0是否配置为唤醒引脚
唤醒后死机 检查是否重新配置系统时钟
功耗偏高 检查未使用外设是否关闭
唤醒响应慢 检查PLL锁定时间配置

通过这个实验,您可以深入理解STM32低功耗模式的工作原理和唤醒机制,为电池供电设备开发奠定基础。

STM8可以设置类似停机模式下闹铃唤醒吗?

请问STM8可以设置类似停机模式下闹铃唤醒吗,比如每天8点钟从停机模式唤醒

2024-05-08 07:09:37

STM32L476如何确认停机模式多外部中断唤醒对应的引脚?

最近在用STM32L476,做一个中断唤醒触发计数的应用,遇到一个问题,如下: 1、初始化为4个外部中断下降沿唤醒,MCU外部上拉电阻,同时也使

2024-04-11 06:08:19

STM32实例-待机唤醒实验

STM32实例-待机唤醒实验

2023-10-26 15:48:00

基于STM32单片机待机唤醒实验使用库文件设计

基于STM32单片机待机唤醒实验使用库文件设计源代码

资料下载 木头1233 2023-04-26 14:45:07

STM32F030低功耗之停机模式的进入和唤醒

本人使用的是STM32F030F4P6进行从机低功耗的设计。设计需求是和主机进行状态同步,主机超时不从串口给回馈(主机关机了)从机进入停机模式等待串口来数据进行

资料下载 佚名 2021-12-31 19:07:44

STM32 低功耗停机模式(STOP)管脚事件(EVENT)唤醒实现及优化

STM32 低功耗停止模式(STOP)管脚事件唤醒实现及优化1. 介绍STM32具有多种低功耗模式,当前以

资料下载 佚名 2021-12-07 16:21:09

STM32 低功耗停机模式(STOP)管脚中断(INTERRUPT)唤醒实现及优化

STM32 低功耗停止模式(STOP)管脚中断唤醒1. 介绍STM32具有多种低功耗模式,当前以

资料下载 佚名 2021-12-07 16:21:08

STM32CubeMX低功耗模式——待机模式(standby)RTC唤醒

STM32CubeMX低功耗模式——待机模式(standby)RTC唤醒使用CubeMX生成工程代码处理实验结果总结在ST的单片机中,一般低功耗

资料下载 王磊 2021-12-04 16:36:08

浅析stm32l431低功耗停机唤醒的方法

。以下导入到msh,可以进入停机状态,不是待机。停机可以任意中断唤醒,所以tick就唤

2022-08-19 15:02:03

关于STM32的待机唤醒功能

本文我们来学习下STM32的待机唤醒功能。要实现的功能是:系统运行时 D1 指示灯闪烁,5 秒后进入待机模式,D1 指示灯熄灭,同时串口 printf输出相关提示信息,可通过 K_UP 按键实现

2022-07-20 17:57:19

怎么实现STM32H7的低功耗串口FIFO驱动和停机唤醒

怎么实现STM32H7的低功耗串口FIFO驱动和停机唤醒?

2021-11-29 07:30:27

如何对STM32单片机的待机模式进行唤醒实验

STM32单片机有哪几种低功耗模式呢?如何对STM32单片机的待机模式进行唤醒实验

2021-11-25 06:37:05

STM32的待机模式和停机模式研究

出处:stm32待机模式和停机模式这两天研究了STM32的低功耗知识,低功耗里主要研究的是

2021-08-18 06:28:49

STM32CubeMX之RTC闹钟唤醒停机模式基本知识介绍

STM32CubeMX(stm32L151C8T6) 之RTC闹钟唤醒停机

2021-08-18 06:01:27

STM32的待机唤醒实验分析

STM32的待机唤醒实验分析(基于原子哥程序)  

2021-02-02 07:09:03
7天热门专题 换一换
相关标签