历史上的今天
返回首页

历史上的今天

今天是:2024年09月10日(星期二)

正在发生

2018年09月10日 | STM32的3种低功耗模式

2018-09-10 来源:eefocus

  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();    //没有按三秒,不是开机,进入待机模式  

}


推荐阅读

史海拾趣

Excel-Display Corporation公司的发展小趣事

随着市场竞争的加剧,EDC意识到只有不断创新才能在行业中立于不败之地。因此,公司加大了对新技术、新产品的研发投入。

经过数年的努力,EDC成功研发出了一种新型的显示技术,该技术在色彩还原、对比度等方面都达到了行业领先水平。这一技术的推出,不仅让EDC的产品在市场上获得了更高的认可度,也引领了整个行业的发展潮流。

Ametherm公司的发展小趣事

品质是Ametherm公司的生命线。他们建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格把控。同时,公司还注重持续改进,通过引入先进的生产设备和技术手段,提高生产效率和产品质量。这些努力使得Ametherm的产品在市场上具有很高的竞争力。

DB Lectro Inc公司的发展小趣事

作为一家有社会责任感的企业,DB Lectro Inc始终关注绿色制造和可持续发展。公司在生产过程中采用了环保材料和节能技术,降低了对环境的影响。同时,公司还积极参与公益活动和慈善事业,为社会做出了积极贡献。这些举措不仅提升了公司的品牌形象和社会声誉,还为公司赢得了更多客户和合作伙伴的信任和支持。

Gumstix公司的发展小趣事
检查电路中是否有异物导致短路,清理异物并修复受损部分。
Falco Electronics公司的发展小趣事

随着公司的发展,Falco Electronics开始积极拓展市场。公司不仅在国内市场取得了显著成绩,还积极开拓国际市场。同时,Falco Electronics还与其他行业领军企业开展战略合作,共同开发新产品、拓展新市场。这些合作不仅为公司带来了更多的商机,也提升了公司在行业内的地位和影响力。

Emerging Display Technolgies公司的发展小趣事

某新兴显示技术公司,专注于柔性显示技术的研发。随着市场对可折叠、可卷曲电子设备需求的增加,该公司投入巨资研发新一代柔性屏幕。经过数年的努力,他们成功开发出了具有超高柔韧性、清晰度和耐用性的显示屏。这一技术的突破,不仅为智能手机、平板电脑等移动设备带来了全新的形态设计,也为可穿戴设备、车载显示等领域提供了更多可能性。

问答坊 | AI 解惑

BU 72435 ROHM热卖

本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 我们大量ROHM BU72435库存价格好,有需求请和我联系。 陈庭松 13138889236 …

查看全部问答>

有关无线技术的一些标准(一)

请想象一下,当您乔迁新居,要将电器的电源插头插进墙上插座里去,结果却发现根本不能匹配时是什么感受。应该感谢几十年之前设立的电气标准,发生这种事情的可能性已经很少了。其他还有一些标准也在为我们服务,比如我们可以跟与不同网络服务商打交 ...…

查看全部问答>

Windows CE中的命令提示行的和PC机上的XP中的有啥区别?

网上说:     Windows CE和Windows XP Embedded存在诸多本质区别。首先,Windows CE是一款全32位、Unicode操作系统,它不支持MS-DOS或Windows 3.x应用。         这里说的MS-DOS不就是台式机上的命令提示行中DOS ...…

查看全部问答>

wince ADC驱动请教。

我想实现在wince液晶上 显示采样信号波形。波形频率很低。 肯定要包括ADC驱动,和应用程序 第一个问题:我想要ADC每隔500ms采样一次,用中断来实现。这个500ms中断在驱动中如何实现? 第二个问题:应用程序获取AD结果可以使用流驱动接口,但是读 ...…

查看全部问答>

串口通讯中的DCB结构

串口通讯中的DCB结构 我看很多程序,它里面使用了BCD结构,但是BCD结果不是在winbase.h中定义的吗, 程序里面并没有#include \"winbase.h\",但是编译确实成功的,为什么? 我是学了VC现在学EVC,觉得有点困扰,EVC很多库函数都不一样了,怎么找 ...…

查看全部问答>

WINCE中文显示的问题

以下我做了不同平台的测试 第一个平台是Default language为中文(中国) 第二个平台是Default language为英语(英文) 第三个平台是Default language为英语(英文),并加入MUI多国语言的支持. 应用程序代码如下: char   cTest[]  & ...…

查看全部问答>

bootloader中的一些问题

小弟关于bootloader中有几个问题不清楚,麻烦兄弟们帮忙解释下, 1,其中涉及到内存映射,它的作用是什么? 2,cpu又是如何区分flash和ram的地址呢,难到有控制flash和ram地址的寄存器吗? 3,如果flash的os要加载到ram中执行,又是如何实现拷贝的呢,如 ...…

查看全部问答>

关于嵌入式系统开发的经验

各位同道中人,欢迎各位谈谈自己入门的经验以及推荐一些好的资料,作为LZ,先为大家献上一点啦! 现面有几个不错的网站 ,仅供参考 http://162.105.146.27/cgi-bin/ftp_search?BeginWith=208&FType=255&word=Linux http://linux.ubuntu.org. ...…

查看全部问答>

急求Lcd 中“-”的编码?

急求Lcd 中“-”的编码? 顺便问下Lcd中是怎样进行汉字编码的!…

查看全部问答>

大四学生请教:毕设被安排做lm3s9b92的以太网通讯功能

在下大四学生,之前在学校只接触过很浅的嵌入式知识,现在毕业设计被安排在一公司参加一个项目,要实现一块板子的以太网通讯功能,板子应该是arm cortex m3核心,lm3s9b92的型号,我要实现的功能是将温度、液位等数据通过以太网接口传给计算机,我 ...…

查看全部问答>