STM32停机唤醒实验
STM32停机唤醒实验
STM32停机模式唤醒实验详解(基于HAL库)
实验原理
-
停机模式(Stop Mode)特性:
- 内核停止工作(CPU停止)
- 保留SRAM和寄存器内容
- 外设时钟停止(可通过配置保留特定外设)
- 唤醒后自动恢复时钟(HSE/PLL需重新配置)
- 功耗:约20μA(STM32F1系列)
-
唤醒方式:
- 外部中断(EXTI)
- RTC闹钟事件
- USB唤醒信号
- 以太网唤醒(特定型号)
硬件要求
- STM32开发板(以STM32F103C8T6为例)
- 按键(连接至PA0/WKUP引脚)
- LED指示灯(连接至PC13)
代码实现(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);
}
关键配置说明
-
唤醒引脚配置:
- 使用PA0(WKUP专用引脚)
- 无需配置EXTI中断
- 通过
HAL_PWR_EnableWakeUpPin()使能
-
停机模式配置:
PWR_LOWPOWERREGULATOR_ON:使用低功耗稳压器PWR_STOPENTRY_WFI:使用WFI指令进入
-
唤醒后必须操作:
SystemClock_Config(); // 重新配置主时钟
实验现象
- 上电后LED每秒闪烁1次
- 3秒后进入停机模式(LED停止闪烁)
- 按下PA0连接的按键唤醒系统
- LED恢复闪烁(唤醒时间约10μs)
功耗优化建议
- 进入前关闭ADC/DAC
- 禁用未使用的外设时钟
- 将未使用的IO设为模拟输入模式
- 使用
__HAL_RCC_AFIO_CLK_DISABLE()禁用AFIO时钟
注意事项:
- 唤醒后程序从
Enter_Stop_Mode()函数内继续执行- 唤醒后所有外设需重新初始化(除SRAM内容保留)
- 调试模式下无法进入停机模式(需断开调试器)
常见问题排查
| 现象 | 解决方法 |
|---|---|
| 无法唤醒 | 检查PA0是否配置为唤醒引脚 |
| 唤醒后死机 | 检查是否重新配置系统时钟 |
| 功耗偏高 | 检查未使用外设是否关闭 |
| 唤醒响应慢 | 检查PLL锁定时间配置 |
通过这个实验,您可以深入理解STM32低功耗模式的工作原理和唤醒机制,为电池供电设备开发奠定基础。
STM32L476如何确认停机模式多外部中断唤醒对应的引脚?
最近在用STM32L476,做一个中断唤醒触发计数的应用,遇到一个问题,如下: 1、初始化为4个外部中断下降沿唤醒,MCU外部上拉电阻,同时也使
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
关于STM32的待机唤醒功能
本文我们来学习下STM32的待机唤醒功能。要实现的功能是:系统运行时 D1 指示灯闪烁,5 秒后进入待机模式,D1 指示灯熄灭,同时串口 printf输出相关提示信息,可通过 K_UP 按键实现
2022-07-20 17:57:19
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- dtmb信号覆盖城市查询
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览