一、STM32待机模式介绍

1.1 STM32低功耗模式介绍

  很多单片机具有低功耗模式,比如MSP430、STM8L等,我们的STM32 也不例外。默认情况下,系统复位或上电复位后,微控制器进入运行模 式。在运行模式下,HCLK 为CPU提供时钟,并执行程序代码。当 CPU 不 需继续运行(例如等待外部事件)时,可以利用多种低功耗模式来节省 功耗。用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等 条件,选定一个最佳的低功耗模式。

  当然在运行模式下,也可以通过如下方式降低功耗:

(1)降低系统时钟速度

(2)不使用 APBx 和 AHB 外设时,将对应的外设时钟关闭

  STM32 提供了 3 种低功耗模式,以达到不同层次的降低功耗的目 的,这三种模式如下:

(1)睡眠模式( CM3 内核停止工作,外设仍在运行)

(2)停止模式(所有时钟都停止)

(3)待机模式( 1.8 V 内核电源关闭) 这三种模式所需的功耗是逐级递减,也就是说待机模式功耗是最低的 。三种低功耗模式汇总表如图所示:

二、三种低功耗模式的比较

(1)在睡眠模式中,仅关闭了内核时钟,内核停止运行但其片上外设, CM3 核心的外设全都照常运行。

(2)在停止模式中,进一步关闭了其它所有 的时钟,于是所有的外设以及内核都停止了工作,但由于其 1.8V 区域的部分电 源没有关闭,还保留了内核的寄存器、内存的信息,所以从停止模式唤 醒,并重新开启时钟后,还可以从上次停止处继续执行代码。

(3)在待机模 式中,它除了关闭所有的时钟,还把 1.8V 区域的电源也完全关闭了, 也就是说,从待机模式唤醒后,由于没有之前代码的运行记录,只能对 芯片复位,重新检测BOOT条件,从头开始执行程序。

如何进入待机模式

  从待机模式唤醒后,程序将按照复位(启动引脚采样、复位向量已获 取等)后的方式重新执行。电源控制/状态寄存器(PWR_CSR)将会指示内 核由待机状态退出。

  在进入待机模式后,除了复位引脚以及被设置为防侵入或校准输出时 的 TAMPER (PC13)引脚和被使能的唤醒引脚( WK_UP 脚(PA0)), 其他的 IO 引脚都将处于高阻态。

三、待机模式配置步骤

(1)使能电源时钟

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);

(2)设置WK_UP引脚为唤醒源

  PWR_WakeUpPinCmd(ENABLE);

(3)进入待机模式

  PWR_ClearFlag(PWR_FLAG_WU);//清除Wake-up 标志

  PWR_EnterSTANDBYMode();//进入待机模式

四、编写待机唤醒程序

  本章所要实现的功能是:系统运行时D1指示灯闪烁,5秒后进入待机 模式,D1指示灯熄灭,同时串口printf输出相关提示信息,通过K_UP按 键实现唤醒。

程序框架如下:

(1)配置进入与退出待机模式 (2)编写主函数

1 #ifndef _wkup_H
2 #define _wkup_H
3
4 #include "system.h"
5
6
7 void Enter_Standby_Mode(void);
8
9 #endif

  

 1 #include "wkup.h"
2
3 /*******************************************************************************
4 * 函 数 名 : Enter_Standby_Mode
5 * 函数功能 : 进入待机模式
6 * 输 入 : 无
7 * 输 出 : 无
8 *******************************************************************************/
9 void Enter_Standby_Mode(void)
10 {
11
12 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//使能PWR外设时钟
13
14 PWR_ClearFlag(PWR_FLAG_WU);//清除Wake-up(唤醒)标志
15
16 PWR_WakeUpPinCmd(ENABLE);//使能唤醒管脚 使能或者失能唤醒管脚功能
17
18
19 PWR_EnterSTANDBYMode();//进入待机模式
20 }
 1 #include "system.h"
2 #include "SysTick.h"
3 #include "led.h"
4 #include "usart.h"
5 #include "wkup.h"
6
7
8 /*******************************************************************************
9 * 函 数 名 : main
10 * 函数功能 : 主函数
11 * 输 入 : 无
12 * 输 出 : 无
13 *******************************************************************************/
14 int main()
15 {
16
17 SysTick_Init(72);
18 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组 分2组
19 LED_Init();
20 USART1_Init(9600);
21
22 while(1)
23 {
24 printf("time: 5\r\n");
25 led1=0;
26 delay_ms(1000); //隔1秒显示计数
27
28 printf("time: 4\r\n");
29 led1=1;
30 delay_ms(1000);
31
32 printf("time: 3\r\n");
33 led1=0;
34 delay_ms(1000);
35
36 printf("time: 2\r\n");
37 led1=1;
38 delay_ms(1000);
39
40 printf("time: 1\r\n");
41 led1=0;
42 delay_ms(1000);
43
44 printf("进入系统待机模式\r\n");
45 Enter_Standby_Mode();
46 }
47 }

(stm32f103学习总结)—待机唤醒实验的更多相关文章

  1. STM32之待机唤醒

    前段时间我稍微涉及节能减排大赛..倡导节能的社会..没错了.你真是太聪明了..知道了我今天要讲关于STM32节能方面的模块..没错..这标题已经告诉你了是吧..哦,对,标题有写..所以..言归正传.至 ...

  2. 【StatLearn】统计学习中knn算法实验(2)

    接着统计学习中knn算法实验(1)的内容 Problem: Explore the data before classification using summary statistics or vis ...

  3. stm32之复位与待机唤醒

    一.复位 stm32复位有三种类型,分别为系统复位.电源复位和备份域复位. 其中系统复位又分为: NRST引脚低电平(外部复位) 窗口看门狗计数结束 独立看门狗计数结束 软件复位 低功耗管理复位 二. ...

  4. (stm32f103学习总结)—RTC独立定时器—实时时钟实验

    一.STM32F1 RTC介绍 1.1 RTC简介 STM32 的实时时钟( RTC)是一个独立的定时器. STM32 的 RTC 模 块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的 ...

  5. (stm32f103学习总结)—stm32 PMW输出实验

    一.PWM简介 PWM是 Pulse Width Modulation 的缩写,中文意思就是脉冲宽度调 制,简称脉宽调制.它是利用微处理器的数字输出来对模拟电路进行控 制的一种非常有效的技术,其控制简 ...

  6. (stm32f103学习总结)—ADC模数转换实验

    一.STM32F1 ADC介绍 TM32F103 系列一般都有 3 个 ADC,这些 ADC 可以独立使用,也可 以使用双重(提高采样率).STM32F1 的 ADC 是 12 位逐次 逼近型的模拟数 ...

  7. stm32学习总结)—SPI-FLASH 实验 _

    SPI总线 SPI 简介 SPI 的全称是"Serial Peripheral Interface",意为串行外围接口,是Motorola 首先在其 MC68HCXX 系列处理器上 ...

  8. (stm32学习总结)—SPI-FLASH 实验

    SPI总线 SPI 简介 SPI 的全称是"Serial Peripheral Interface",意为串行外围接口,是Motorola 首先在其 MC68HCXX 系列处理器上 ...

  9. stm32实现待机唤醒

    STM32的低功耗模式有3种:1.睡眠模式(CM3内核停止,外设仍然运行)2.停机模式(所有时钟都停止)3.待机模式(1.8v内核电源关闭) 进入待机模式的方法,以及设置WK_UP引脚用于把STM32 ...

随机推荐

  1. 十分钟掌握CSS基本内容

         (一) 定位      绝对定位和相对定位.其实用一句话说就是"子绝父相",理解这句话很多效果通过定位做出来的话都没问题了.一般平时用的都的情况都是子div设置为绝对定位 ...

  2. AHUACM寒假集训I(基础数据结构+串串)

    H.超级钢琴 luoguP2048 题目大意: 求出一个长N序列中所有长度在L到R的子序列中序列和最大的K个,并求这K个的和 思路: 暴力的话可以求出所有满足要求的子序列然后排序,然后显然会T. 所以 ...

  3. 01_opencv_python_基本图像处理

    1  图像基本操作   1.0.1  环境配置地址: Anaconda:https://www.anaconda.com/download/ Python_whl:https://www.lfd.uc ...

  4. git命令合集

    ##快捷键 ##一. 快捷键 1. 清屏快捷键 control+L 2. vim快捷操作 * control+b 往上翻页 * Control+f 往下翻页 * shift+g 回到末尾 3. oh ...

  5. ARP攻击的发现、攻击原理、攻击方式、防护,竟然这么简单?!

    ARP协议概述 ARP协议(address resolution protocol)地址解析协议. 一台主机和另一台主机通信,要知道目标的IP地址,但是在局域网中传输数据的网卡却不能直接识别IP地址, ...

  6. Laravel消息队列怎么使用

    使用database驱动做队列 下面是简单使用教程 1. 修改.env文件配置 QUEUE_CONNECTION=sync改成QUEUE_CONNECTION=database 默认的sync是同步队 ...

  7. kafka 第一次小整理(草稿篇)————整理一下自己的认知

    前言 简单整理一些自己使用kafka的一些感受. 正文 一切都要回到真实的世界上, 计算机世界只是真实事件的一个缩影. 计算机世界有一个重要的东西,那就是数据库. 数据库记录着真实世界发生了什么,准确 ...

  8. Java基础-反转数组

    /** java基础,如何将一个数组反转,思考方法采用使用临时变量的情况下,将第一个元素与第二个元素进行反转,需要定义两个索引,一个记录数组的第一个元素与最后一个元素,将其两两交换* */public ...

  9. 6月11日 python学习总结 框架理论

    Web框架本质及第一个Django实例   Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web ...

  10. MySQL&SQL server&Oracle&Access&PostgreSQL数据库sql注入详解

    判断数据库的类型 当我们通过一些测试,发现存在SQL注入之后,首先要做的就是判断数据库的类型. 常用的数据库有MySQL.Access.SQLServer.Oracle.PostgreSQL.虽然绝大 ...