STM32的3种低功耗模式
STM32的3种低功耗模式:
- 睡眠模式:内核停止,外设如NVIC,系统时钟Systick仍运行。
- 停止模式:所有时钟都已停止;1.8V内核电源工作;PLL,HIS和HSERC振荡器功能禁止;寄存器和SRAM内容保留。
- 待机模式:1.8V内核电源关闭;只有备份寄存器和待机电路维持供电;寄存器和SRAM内容全部丢失;实现最低功耗。
STM32的3种低功耗唤醒方式:
STM32待机模式:
在待机模式下,所有的I/O引脚均处于高阻态,除了复位引脚、被使能的唤醒引脚和TAMPER引脚。待机模式下只有2uA的电流,停机模式下20uA的电流。
库函数进入待机模式:
1. 使能电源时钟。
2. 设置WK_UP引脚作为唤醒源。
3. 设置SLEEPDEEP位,设置PDDS位,执行WFI指令,进入待机模式。
程序源码:
#include "wkup.h"
#include "led.h"
#include "delay.h"void Sys_Standby(void)
{ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能电源时钟PWR_WakeUpPinCmd(ENABLE); //使能唤醒管脚功能PWR_EnterSTANDBYMode(); //进入待命(STANDBY)模式
}//系统进入待机模式
void Sys_Enter_Standby(void)
{ RCC_APB2PeriphResetCmd(0X01FC,DISABLE); //复位所有IO口Sys_Standby();
}//检测WKUP脚的信号
//返回值1:连续按下3s以上
// 0:错误的触发
u8 Check_WKUP(void)
{u8 t=0; //记录按下的时间LED0=0; //亮灯LED0 while(1){if(WKUP_KD){t++; //已经按下了 delay_ms(30);if(t>=100) //按下超过3秒钟{LED0=0; //点亮DS0 return 1; //按下3s以上了}}else { LED0=1;return 0; //按下不足3秒}}
} //中断,检测到PA0脚的一个上升沿.
//中断线0线上的中断检测
void EXTI0_IRQHandler(void)
{ EXTI_ClearITPendingBit(EXTI_Line0); // 清除LINE10上的中断标志位 if(Check_WKUP())//关机?{ Sys_Enter_Standby(); }
}
//PA0 WKUP唤醒初始化
void WKUP_Init(void)
{ GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure;EXTI_InitTypeDef EXTI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);//使能GPIOA和复用功能时钟GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0; //PA.0GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD;//上拉输入GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化IO//使用外部中断方式GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //中断线0连接GPIOA.0EXTI_InitStructure.EXTI_Line = EXTI_Line0; //设置按键所有的外部线路EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //设外外部中断模式:EXTI线路为中断请求EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure); // 初始化外部中断NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //使能按键所在的外部中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占优先级2级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //从优先级2级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器if(Check_WKUP()==0) Sys_Standby(); //没有按三秒,不是开机,进入待机模式
}
STM32的3种低功耗模式相关推荐
- stm32f103c6t6下的HAL库搭建三种低功耗模式及实战分析(stm32通用)
目录 三种低功耗模式介绍 睡眠模式(sleep mode) 停止模式(stop mode) 待机模式(standby mode) 总结 实战测试 个别电路原理图 功耗分析 ADC功耗大解决方案 ADC ...
- 32怎么通过一个按键实现不同工作模式_stm32几种低功耗模式的实现和差别
点击上方蓝字关注我哦- 01 前言 按功耗由高到低排列,STM32具有运行.睡眠.停止和待机四种工作模式.上电复位后 STM32 处于运行状态,当内核不需要继续运行,就可以选择进入后面的三种低功耗模式 ...
- STM32的三种Boot模式的差异
STM32的三种Boot模式的差异 一. STM32启动配置 二. 内置SRAM简介 三. 例程验证 3.1 硬件设置 3.2 创建工程调试版本 3.3 配置分散加载文件 3.5 配置中断向量表 3. ...
- STM32的三种Boot模式地址分配
STM32的三种Boot模式地址分配 一.STM32的三种Boot模式 1.主闪存存储器 2.系统存储器 3.内置SRAM 二.三种模式地址分配验证 主闪存存储器 系统存储器 三.汇编程序完成每间隔1 ...
- 浅谈STM32的三种Boot模式的差异以及用汇编语言设计一个LED灯程序
STM32的三种Boot模式的差异 1.三种方式的比较 用汇编程序完成LED的程序 1.三种方式的比较 所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值 ...
- stm32 3种低功耗模式
STM32 的低功耗模式有 3种: 1)睡眠模式(CM3内核停止,外设仍然运行) 2)停止模式(所有时钟都停止) 3)待机(standby)模式(1.8V内核电源关闭) 从待机模式唤醒后的代码执行等同 ...
- STM32的八种工作模式
一.模式介绍 STM32单片机具有高性能.低成本.低功耗的优点,与它打交道就必须先了解它的几种工作模式,它共有八种IO口模式,分别是:模拟输入.浮空输入.上拉输入.下拉输入.开漏输出.推挽输出.复用开 ...
- 浅谈STM32的三种Boot模式
文章目录 一.关于BOOT模式的介绍 二.实际例子进行分析 三.分析上电启动流程 四.小结 五.参考资料 一.关于BOOT模式的介绍 所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的 ...
- STM32的三种BOOT模式
文章目录 一.三种BOOT模式的对比 1.内部 FLASH 启动方式 2.内部 SRAM 启动方式 3.系统存储器启动方式 二.BOOT模式下代码运行后所在地址分析 1.从内部 FLASH 启动 2. ...
最新文章
- CMake编译工具与项目构建
- kangle web server源代码安装简明教程
- Markdown的一些常用的语法
- background 旋转_基于HTML5 Canvas 实现矢量工控风机叶轮旋转
- 【软考-软件设计师】CPU的功能与组成
- 22行满分代码:L1-054 福到了 (15分)
- spring vaadin_在Spring Boot中使用Vaadin的简介
- dubbo源码解析(一)
- 微信小程序中实现瀑布流布局和无限加载
- 推荐几篇开源论文,包含人脸、目标检测跟踪、分割、去噪、超分辨率等
- java dao层的泛型get方法_dao层的泛型实现(2种方法)
- Python笔记:变量的作用域
- 差分pid模块_基于数字PID切换控制的Buck变换器研究
- aliplayer隐藏工具条
- itext pdf 基本使用实战
- android多图拼接长图并合理显示
- 大数据之Kafka介绍
- [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
- 大数据运维学习成长路线
- 思科—计算机网络课程设计—第一章路由概念测试