STM32的3种低功耗模式

发布者:Whisper123最新更新时间:2018-09-10 来源: eefocus关键字:STM32  低功耗模式 手机看文章 扫描二维码
随时随地手机看文章
  1. 睡眠模式:内核停止,外设如NVIC,系统时钟Systick仍运行。

  2. 停止模式:所有时钟都已停止;1.8V内核电源工作;PLL,HIS和HSERC振荡器功能禁止;寄存器和SRAM内容保留。

  3. 待机模式: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.0

    GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD;//上拉输入

    GPIO_Init(GPIOA, &GPIO_InitStructure);  //初始化IO

    //使用外部中断方式

    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //中断线0连接GPIOA.0

 

    EXTI_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  低功耗模式 引用地址:STM32的3种低功耗模式

上一篇:STM32L0低功耗设计6: STOP_RTC模式下的休眠时间
下一篇:STM32L031低功耗深度睡眠RTC唤醒注意事项

推荐阅读最新更新时间:2024-03-16 16:13

STM32 MDK 工程创建 图解步骤
好久没有使用MDK编写STM32的程序了,现在上手才发现自己都不太记得创建步骤了,于是再次翻阅书籍,一步一步记录一下-----参考了野火的例子! ---第一步---创建一个文件夹---在文件夹下建立如下文件夹--- ---1-1---其中CMSIS是用来存放库文件为我们自带的启动文件和一些CMSIS层文件。 ----1-1-1-----上面说的启动文件在startup文件夹中,其中包含了各种STM32芯片的启动文件,主要是按照flash大小来分的,后面工程设置再介绍。 ---1-2---其中FWlib是用来存放STM32库中inc与src两个文件夹---这两个文件夹不需要修改----inc中是所
[单片机]
<font color='red'>STM32</font> MDK 工程创建 图解步骤
调试STM32遇到Hardfault知识总结
在NVIC中有一个硬fault状态寄存器(HFSR),它指出产生硬fault的原因。如果不是由于取向量造成的,则硬fault服务例程必须检查其它的fault状态寄存器,以最终决定是谁上访的。 1、寄存器描述 首先查看硬故障寄存器,判别原因。 硬故障状态寄存器 硬fault状态寄存器(地址:0xE000_ED2C) 位段 名称 描述 31 DEBUGEVT 硬fault因调试事件而产生 30 FORCED 硬fault是总线fault,存储器管理fault或是用法fault上访的结果 29:2 1 VECTBL 硬fault是在取向时发生的 0 121页手册 各个fault
[单片机]
STM32的IO口如何配置
1.0 STM32的输入输出管脚有下面8种可能的配置:(4输入+2输出+2复用输出) 1)浮空输入_IN_FLOATING 2)带上拉输入_IPU 3)带下拉输入_IPD 4)模拟输入_AIN 5)开漏输出_OUT_OD 6)推挽输出_OUT_PP 7)复用功能的推挽输出_AF_PP 8)复用功能的开漏输出_AF_OD 1.1I/O口的输出模式下,有3种输出速度可选(2M,10M,50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。 1.1.1对于串口,假如最大波特率只需115.2K,那么用2M的
[单片机]
STM32标准库改为HAL库的程序实现
标准库占绝大多数,自己买的板子跟的资料也一般是标准库,HAL库很少,不过要是使用STM32CubeMx配置,那么就是使用的HAL库了,而参考资料是标准库的,就没有办法用。 注意: 1. 标准库与HAL库不兼容,不要想着直接拿来用了,比如标准库使用#include stm32f10x.h ,HAL库使用#include stm32f1xx_hal.h 要让标准库程序使用HAL库时也可以正常运行得到想要的结果,有以下几种方法: 一、 将标准库程序中的每个函数内的代码修改为使用HAL库且同样效果的代码, 比如标准库中配置GPIO的代码直接就可以用STM32CubeMx配置为相同效果 二、根据标准库程序整个程序运行的原理使用HAL库
[单片机]
Keil实现对意法半导体STM32互联系列的支持
Keil公司宣布其产品Keil MDK-ARM(微控制器开发套件)及RL-ARM(实时库)实现了对意法半导体STM32互联系列的支持。Keil公司同时推出了新的MCBSTEM32C评估板和开发套件。 STM32 互联系列基于ARM® Cortex™-M3处理器,具有全速USB OTG、两个CAN2.0B接口、10/100以太网(含对IEEE1588精密时间协议 (PTP)的硬件支持)。该产品同STM32家族的其他产品采用同样的外设,因此能够轻松实现项目移植,并有高达256KB的闪存和64KB的SRAM。 MDK-ARM 最新版本的的MDK-ARM支持所有的STM32产品,它包括配置文件、设备专有视图以
[单片机]
Keil实现对意法半导体<font color='red'>STM32</font>互联系列的支持
STM32 Cubemax(六) —— STM32利用定时器编码器模式处理带编码器直流电机
前言 电赛延期了,趁有时间再写点东西吧. 编码器电机配置较为繁琐,本文较长,耐心看下去,一定有收获. 本文适合已经对编码器有所了解的同学观看,如果对编码器原理还不太理解,可以看看CSDN中别人讲编码器的,个人觉得已经讲的十分清楚了,这里主要讲解怎么使用Cubemax去使用编码器 一、硬件准备 本次实验使用的是带增量式AB相霍尔编码器的直流减速电机 简单介绍一下这款电机,减速比为1:30,即输出轴转一圈,电机内部实际转30圈,霍尔编码器为13位编码器,即电机每转,对于编码器有2的13次方的增量.(简单的说,上面那个霍尔编码器检测的圆盘,转一圈,检测13个脉冲) 2.电机所使用的电机驱动为应该大家都十分熟悉的L2
[单片机]
<font color='red'>STM32</font> Cubemax(六) —— <font color='red'>STM32</font>利用定时器编码器<font color='red'>模式</font>处理带编码器直流电机
STM32技术文档里面的I / O Level FT具体含义
five volt tolerant 意思的兼容5V信号电压。按照技术手册上讲的话 容忍最高电压是VDD+4.0 = 3.3+4.0=7.3V
[单片机]
<font color='red'>STM32</font>技术文档里面的I / O Level FT具体含义
STM32 Flash 均衡保存算法
在实际应用中,经常需要在程序运行过程中保存或读取一些数据,这些数据在工作中经常会变化,而且掉电后也不能丢失,所以需要及时地进行存储,存储这些数据常用的存储器是 EEPROM。 STM32 虽然本身不带 EEPROM,但是它支持自编程技术,可以利用内部 FLASH 来模拟 EEPROM,这样不仅简化了设计,而且降低了成本。 FLASH 的擦写次数是有限的,一般是 10W 次, FLASH 单个存储单元bit只能从1变为0,而不能从0变成1。 想要变成1,只能 page 擦除,这里的 page 表示一个擦除单位,擦除过程就是把 page 所有的位都写1,这种硬件特性决定需要一种比较高效的写 flash 算法。 总不能一
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved