IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32 低功耗睡眠模式(SLEEP)事件(EVENT)唤醒实现及优化 -> 正文阅读

[嵌入式]STM32 低功耗睡眠模式(SLEEP)事件(EVENT)唤醒实现及优化

STM32 低功耗睡眠模式(SLEEP)事件(EVENT)唤醒实现及优化

1. 介绍

STM32具有多种低功耗模式,当前以STM32L4系列的低功耗模式最为丰富,此处基于STM32L476和STM32CUBEIDE环境介绍睡眠模式(SLEEP)事件唤醒的实现(HAL库)。这里以管脚电平变化为事件源。SLEEP模式只是停止CPU和后续代码执行,唤醒(其实是continue的作用)后继续执行后面的代码,而不是重启之后从初始代码开始执行。

2. 低功耗模式

STM32L4的低功耗模式,包括传统的睡眠模式:
在这里插入图片描述
STM32L4系列各种低功耗模式的特性总结如下:
在这里插入图片描述

3. 管脚事件配置

SLEEP模式可以通过任一管脚中断(Interrupt)或事件(Event)的方式唤醒,这里介绍通用管脚事件唤醒的方式, 选择一个GPIO管脚进行配置,这里用PC13作为唤醒事件源。
设置PC13为GPIO_EXTI方式:
在这里插入图片描述
为PC13选择其中一种事件触发方式,包括上升沿触发,下降沿触发和电平变化触发(即上升沿下降沿都触发):
在这里插入图片描述
保存后生成代码:
在这里插入图片描述

4. SLEEP模式进入及事件唤醒

通过HAL库函数HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry)可进入SLEEP模式,库函数有两个参数,第一个参数Regulator可选PWR_MAINREGULATOR_ON或PWR_LOWPOWERREGULATOR_ON,分别对应主电源保持打开和低功耗部分的电源保持打开。第二个参数SLEEPEntry指定唤醒时的来源,有两个可选:PWR_SLEEPENTRY_WFI 和 PWR_SLEEPENTRY_WFE, 分别对应中断唤醒和事件唤醒,这里我们用PWR_SLEEPENTRY_WFE,即事件唤醒。

如果要进入SLEEP模式,实施下面代码:

HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFE);

HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON,PWR_SLEEPENTRY_WFE);

然后当PC13管脚上产生电平变化触发管脚事件,睡眠状态就会被唤醒,继续给CPU供应时钟,执行后面的代码。

5. SLEEP模式进入及事件唤醒的优化

在SLEEP进入函数参数为PWR_STOPENTRY_WFE时,并不只是事件可以唤醒,中断也可以唤醒,当设计中存在多种中断源,包括调试器中断和其它中断等,这些中断不是想用于唤醒SLEEP状态时,此时就需要增加必要的设计,实现:

  1. 当指定的事件产生时,唤醒SLEEP状态;
  2. 非指定的中断源产生中断时不能唤醒SLEEP状态。

实现方式为在进入SLEEP状态前,加入中断关闭代码,在事件唤醒SLEEP状态后,加入打开中断代码,从而在进入SLEEP状态后,只有指定的事件可以唤醒。

在进入SLEEP模式时,采用如下代码:

__disable_irq();
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFE);
__enable_irq();

或:

__disable_irq();
HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON,PWR_SLEEPENTRY_WFE);
__enable_irq();

如果进入SLEEP模式前,配置了多个EVENT,又只想其中的部分EVENT可以唤醒SLEEP模式,则在进入SLEEP前可以关闭不用于唤醒的EVENT,唤醒后再打开EVENT。此时用到**_DISABLE_EVENT()和**_ENABLE_EVENT()库函数,其中**是功能模块名。如:
在这里插入图片描述

通过以上优化,提高了SLEEP低功耗模式应用的可靠性,避免异常时间的唤醒。

–End–

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-14 14:14:35  更:2021-08-14 14:17:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:29:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码