当前位置: 首页 > news >正文

STM32 低功耗-待机模式

STM32 待机模式


文章目录

  • STM32 待机模式
  • 第1章 低功耗模式简介
  • 第2章 待机模式简介
    • 2.1 进入待机模式
    • 2.1 退出待机模式
  • 第3章 待机模式代码部分
  • 总结


第1章 低功耗模式简介

在 STM32 的正常工作中,具有四种工作模式:运行、睡眠、停止和待机模式

在系统或电源复位以后,微控制器处于运行状态,当CPU不需继续运行时,可以利用多种低功耗模式来节省功耗。这些低功耗模式电源消耗不同、唤醒时间不同和唤醒源不同。
例如等待某个外部事件时,用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等条件,所以需要根据自身的需要选定一个最佳的低功耗模式。

STM32F1有三种低功耗模式:
1、睡眠模式(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行)。
2、停止模式(所有的时钟都已停止)。
3、待机模式(1.8V电源关闭)。

各种低功耗模式的对比如下表:

在这里插入图片描述

说明:
WFI和WFE都是系统指令,WFI是表示中断,WFE表示事件。

第2章 待机模式简介

待机模式下的输入/输出端口状态:
在待机模式下,所有的I/O引脚处于高阻态,除了以下的引脚:
1、复位引脚(始终有效)。
2、当被设置为防侵入或校准输出时的TAMPER引脚。
3、被使能的唤醒引脚。

待机模式可实现系统的最低功耗。该模式是在Cortex M3深睡眠模式时关闭电压调节器。整个1.8V供电区域被断电。PLL、HSI和HSE振荡器也被断电。SRAM和寄存器内容丢失,只有备份的寄存器和待机电路维持供电。

2.1 进入待机模式

可以通过设置独立的控制位,选择以下待机模式的功能:
1、 独立看门狗(IWDG):可通过写入看门狗的键寄存器或硬件选择来启动IWDG。一旦启动了独立看门狗,除了系统复位,它不能再被停止。
2、 实时时钟(RTC):通过备用区域控制寄存器(RCC_BDCR)的RTCEN位来设置。
3、 内部RC振荡器(LSI RC):通过控制/状态寄存器(RCC_CSR)的LSION位来设置。
4、 外部32.768kHz振荡器(LSE):通过备用区域控制寄存器(RCC_BDCR)的LSEON位设置。

2.1 退出待机模式

当一个外部复位(NRST引脚)、IWDG复位、WKUP引脚上的上升沿或RTC闹钟事件的上升沿发生时,微控制器从待机模式退出。

从待机唤醒后,除了电源控制/状态寄存器(PWR_CSR),所有寄存器被复位。
从待机模式唤醒后的代码执行等同于复位后的执行(采样启动模式引脚、读取复位向量等)。电源控制/状态寄存器(PWR_CSR)将会指示内核由待机状态退出。

如何进入和退出待机模式,细节参考如下表:
在这里插入图片描述

第3章 待机模式代码部分

示例代码如下:

void EXTI0_IRQHandler(void)
{delay_ms(20);                      /* 延时消抖 */if(EXTI_GetFlagStatus(EXTI_Line0) == SET){printf("进入待机模式\r\n"); if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 1)//PA0引脚触发高电平{RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);PWR_WakeUpPinCmd(ENABLE);//使能WKUP引脚的唤醒功能PWR_EnterSTANDBYMode();//进入待机模式}}EXTI_ClearITPendingBit(EXTI_Line0);/* 清除LINE0上的中断标志位 */
}

中断引脚唤醒代码部分(略)
和前面退出睡眠模式的代码一样,可以移步到睡眠模式文章参考即可。


总结

1、待机模式可实现系统的最低功耗,在睡眠模式和停止模式基础上更加节省能耗。

2、在调试模式默认情况下,如果在进行调试微处理器时,使微处理器进入停止或待机模式,将失去调试连接。所以需要退出这些低功耗模式后才可以进行程序调试和下载,否则是无法进行连接的。

3、可以利用待机模式达到最低功耗这一特性来实现降低一些产品的功耗,按键按下唤醒工作,再按下时就进入待机,避免不使用系统时的能量损耗,类似于现在的手机开关机等。

特别提醒:
以上的几篇文章都没有做寄存器的介绍,若需要了解,可以到芯片(中文)参考手册进行查阅学习。

睡眠模式文章

停止模式文章

http://www.lryc.cn/news/112831.html

相关文章:

  • 极海APM32F003F6P6烧写问题解决记录
  • 【大数据】Flink 详解(一):基础篇
  • ChatGPT 作为 Python 编程助手
  • 饿了么输入框限制只能输入数字,并且保留小数
  • kylin-Desktop gsettings 获取或设置系统配置
  • setmap使用
  • Python3 网络爬虫开发实战
  • docker: CMD和ENTRYPOINT的区别
  • DC电源模块对于定制的要求主要有这几点
  • Kubernetes高可用集群二进制部署(六)Kubernetes集群节点添加
  • 网关 GateWay 的使用详解、路由、过滤器、跨域配置
  • vsocde里面远程连接服务器报could not esatablish connection xxxx
  • Hi3798MV200 恩兔N2 NS-1 (二): HiNAS海纳思使用和修改
  • 无涯教程-Perl - foreach 语句函数
  • easyWechat 5.x 复写代码 获取企业微信授权用户敏感信息
  • 医疗器械研发中的可用性工程实践(一)
  • LNMP搭建
  • 软件测试分类总结
  • 模糊PID(三角隶属度函数模糊化CODESYS ST代码)
  • 探索人工智能 | 计算机视觉 让计算机打开新灵之窗
  • 7.物联网操作系统互斥信号量
  • Vue - Element el-form 表单对象多层嵌套校验
  • elementUI全屏loading的使用(白屏的解决方案)
  • flutter开发实战-flutter_spinkit实现多种风格进度指示器
  • 检测文本是否由AI生成,GPT、文心一言等均能被检测
  • 【3D机甲】捏造型功能
  • 设计模式之五:单例模式
  • MATLAB的设置路径
  • Hyperledger Fabric 使用 CouchDB 和复杂智能合约开发
  • 这应该是最全的,Fiddler手机App抓包详解,看完还不会来找我...