STM32进入低功耗模式以及唤醒(RTC+中断)

发布者:VelvetDreamer最新更新时间:2019-07-01 来源: eefocus关键字:STM32  低功耗模式  唤醒  RTC  中断 手机看文章 扫描二维码
随时随地手机看文章

    此文献给做单片机工作的同僚,希望大家在嵌入式硬件的道路上越走越远,第一篇,望大家多多指导,不喜勿喷!


     这里主要说一下,本人在调试STM32低功耗功能时遇到的问题以及解决思路与大家分享一下。


    在确认使用低功耗功能后,大家铁定会通过不同途径查找相关的资料,了解到什么是低功耗、低功耗有哪几种以及不同模式之间的区别,最后还有一些程序截取、说明,资料不少,但是能让人一目了然理解的不太多,尤其是刚接触这个功能的新手,或许是资历尚浅,编程以及检索资料能力还有待提高。


    再此,我抛砖引玉,发表一篇我的调试感受,我从  低功耗初体验、低功耗功能说明、低功耗总结三个方面进行说明。


首先,低功耗初体验。跟大家一样,查到STM32的低功耗有三个模式,分别是睡眠模式、停止模式以及待机模式(STM32开发指南——库函数版本321页)。


这里介绍的是停机模式,原因有以下亮点:功耗以及实用性。三个模式的功耗由高到低依次是睡眠、停机,最后是待机,既然待机功耗最低为什么选停机模式,这是由于待机模式与停机模式都可以RTC唤醒,但是停机模式可以通过任意管脚的外部中断唤醒,而待机模式只能通过NRST因脚伤的外部复位唤醒,局限性太大。


第二部分,低功耗功能说明

/*RTC设置*/

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);

PWR_WakeUpPinCmd(ENABLE);

PWR_BackupAccessCmd(ENABLE);

RTC_Configuration();

NVIC_Configuration();

//MCU进入停机模式

void MCU_EnterSTOPMode(void)

{

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);

/* Allow access to BKP Domain */

  PWR_BackupAccessCmd(ENABLE);

RTC_WaitForLastTask();

    RTC_ClearFlag(RTC_FLAG_SEC);

RTC_WaitForLastTask();

    while(RTC_GetFlagStatus(RTC_FLAG_SEC) == RESET);

    RTC_SetAlarm(RTC_GetCounter()+ Stop_Time);

    //Stop_Time这个是唤醒时间,单位是秒,即Stop_Time秒后启动RTC唤醒

    RTC_WaitForLastTask();

RTC_ClearFlag(RTC_FLAG_RSF);

RTC_WaitForLastTask();

RTCAlarm_IT_Enable();

RTC_WaitForLastTask();

EXTIX_Init();

EXIT_Configuration();     

    STOP_PeripthAndClk(); 

    

    EXTI->PR = 0x00; 

 

    /* Request to enter STOP mode with regulator in low power mode*/

    PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);

CLI();//ÆÁ±ÎËùÓÐÖжÏ

    System_timer_1ms = 0;

SYSCLKConfig_STOP(); 

START_PeripthAndClk(); 

SEI(); 

}

最后,低功耗总结


低功耗想要做到自己满意的效果,需要程序与硬件配合,根据外部电路将引脚置成上拉或者下拉,减小不必要的电流损失;还有就是将开启的外设关闭,如果忘了关闭可能会对结果有较大影响(尤其是又添加功能的时候,记得初始化的时候加上并调试成功可以使用时,记得在进入低功耗关掉)。第一次写,可能有好多说不明白的地方,附带一个工程,https://download.csdn.net/download/zsj2016o/10865786,大家一起交流学习,好好体会有惊喜。


关键字:STM32  低功耗模式  唤醒  RTC  中断 引用地址:STM32进入低功耗模式以及唤醒(RTC+中断)

上一篇:stm32 待机唤醒实验
下一篇:STM32中RTC唤醒停止模式

推荐阅读最新更新时间:2024-11-05 13:17

STM32的一些缩略词
缩写 外设/单元 ADC 数模转换器 BKP 备份寄存器 CAN 控制器局域网模块 DMA 直接内存存储控制器 EXTI 外部中断事件控制器 FLASH 闪存存储器 GPIO 通用输入输出 I2C 内部集成电路 IWDG 独立看门狗 NVIC 嵌套中断向量列表 PWR 电源/功耗控制 RCC 复位与时钟控制器 RTC 实时时钟 SPI 串行外设接口 SysTick 系统嘀嗒定时器 TIM 通用定时器 TIM1 高级控制定时器 U
[单片机]
基于STM32控制直流电机加减速正反转proteus仿真设计
本设计: 基于STM32控制直流电机加减速正反转proteus仿真设计(程序+仿真+设计报告+讲解视频) 仿真:proteus8.9 程序编译器:keil 5 编程语言:C语言 编号C0011 功能说明: 本设计由STM32F103、L298N电机驱动电路、按键电路组成。 1.通过按键可以控制电机,正转、反转、加速、减速、停止。 2.档位分4档,并且可以通过按键顺序正转、反转、加速、减速、停止。 3.档位可以代码自定义。 附赠相关论文,根据实物写的,与仿真功能基本一致。也有与仿真一致的设计报告。 仿真图(提供源文件): 源程序(提供源文件): 以下为部分程序: int main(void) { delay_init(
[单片机]
基于<font color='red'>STM32</font>控制直流电机加减速正反转proteus仿真设计
msp430f5529中断笔记
定义中断服务程序 #pragma vector=PORT1_VECTOR //P1口中断向量 __interrupt void Port_1(void) //声明中断服务程序,名为Port_1 { ... //中断服务程序 } 定时器中断应用例程 #include msp430.h void delay(unsigned int i) { volatile unsigned int j; for(;i 0;i--) for(j=0;j 2000;j++); // 延时 } int main(void) { volatile
[单片机]
stm32型号命名规则 stm32制作工艺多少nm
  stm32型号命名规则   STM32型号的命名规则相对简单,主要包括以下几个部分:   第一部分是系列名称,如F系列、L系列、H系列等。   第二部分是器件类型,如单片机(MCU)、系统级芯片(SoC)等。   第三部分是器件性能等级,用字母表示,如A、B、C、D等级,等级越高性能越好。   第四部分是器件存储类型和容量,如Flash存储器、RAM存储器等,以及容量大小,如64KB、128KB等。   第五部分是器件封装类型,如LQFP、BGA、LFBGA等。   例如,STM32F407VGT6就是一款F系列单片机,器件类型为MCU,性能等级为G,存储器包括Flash和RAM,容量为1MB和192KB,封装类型为LQFP-
[单片机]
STM32硬件结构学习
stm32硬件学习流水帐----电源 分类: 1.工作电源 2.备份域电源 3.adc供电参考电源 工作电源2-3.6v 备份域电源用于RTC时钟模块和备份域寄存器保存 adc供电参考电源:为提高精度ADC具有单独的工作电源和参考电源基准 注意100脚以上的stm32才有ADC参考电源基准,100脚以下ADC参考电源基准内部连接到ADC供电电源上 除此外还有内部1.8,由芯片内部调节器提供. stm32硬件学习流水帐----时钟 stm32有多个时钟源: 1.外部高速时钟HSE,可由外部输入时钟信号或者外接晶体构成振荡器构成. 2.内部高速时钟SHI,频率为8M,精度1% 3.外部低
[单片机]
STM32 系列MCU 不同型号的移植步骤解析
STM32 系列MCU 不同型号的移植! 第一步 更换启动文件: 第二步 修改宏定义: 图 1 或者修改stm32f10x.h 具体修改如下: 图2 第三步 修改系统主频率: 文件:system_stm32f10x.c 具体修改如下: 图 3 第四步 修改外部晶振源: 文件:stm32f10x.h 具体修改如下: 图 4 第五步 定时器需要根据以上修改的系统主频率进行对应的修改。 其他: 修改 Flash 地址 文件:misc.h 具体修改如下: 图 5 与以下配置一致: IAP 设置步骤 一、 IAP 工程设置 1、修改main 中的按键触发键 2、修改下载串口 二、 下载工程设置 1、修改程序入
[单片机]
<font color='red'>STM32</font> 系列MCU 不同型号的移植步骤解析
STM32出现HardFault_Handler故障
STM32出现HardFault_Handler故障的原因主要有两个方面: 1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。 2、堆栈溢出。增加堆栈的大小。 出现问题时排查的方法: 发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12、LR、PC、XPRS 寄存器依次入栈,其中LR即为发生异常前PC将要执行的下一条指令地址。 注意:寄存器均是32位,且STM32是小端模式。(参考Cortex-M3权威) 编写问题代码如下: void StackFlow(void) {
[单片机]
<font color='red'>STM32</font>出现HardFault_Handler故障
STM32低功耗模式简介
STM32F10xxx有三中低功耗模式: ●睡眠模式(Cortex?-M3内核停止,外设仍在运行) ●停止模式(所有的时钟都以停止) ●待机模式(1.8V电源关闭) 时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。 上电,默认使用内部HSI时钟8M,经测试10mA左右。待机模式可实现系统的最低功耗。 可将电流消耗降至两微安。 在待机模式下,所有的I/O引脚处于高阻态,除了以下的引脚: ●复位引脚(始终有效) ●当被设置为防侵入或校准输出时的TAMPER引脚 ●被使能的唤醒引脚 /*按钮GPIOB9进入睡眠,WKUP pin(GPIOA0)唤
[单片机]
<font color='red'>STM32</font><font color='red'>低功耗</font><font color='red'>模式</font>简介
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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