芯片:STM32L071CB

开发环境:STM32CubeMX + keil5.33

使用实时时钟RTC的 WakeUpTimer定时器产生的中断将STM32从STOP低功耗模式下唤醒。

STOP模式: STM32低功耗运行模式之一,该模式下CPU会停止工作,但RAM中的数据仍然保留。待中断或事件触发后程序可以继续运行。

note:1、STOP模式退出后,系统时钟会自动配置为MSI或HSI,需要手动重新配置时钟,以及使用时钟的外设。

2、为了进一步降低STOP模式下的功耗,可以将GPIO设置为ANALOG输入模式,退出stop模式后重新配置GPIO

3、为了能够在STOP模式下进行调试,在main函数中添加    DBGMCU->CR |= DBGMCU_CR_DBG_STOP;

一、使用STM32CubeMX配置工程

1、配置STM32系统时钟,选择石英晶振,外部高速时钟HSE经锁相、倍频、分频后得到32M的系统时钟

2、配置一个用于控制LED灯的GPIO. 推挽输出模式,常拉低

3、配置RTC,激活时钟源、中断使能

RTC使用内部晶振LSI 37KHz   因此预分频系数设置为124 和 295 ,使分频后的时间正好是1秒。

(124+1)*(295+1)  = = 37000

二、keil中添加功能性代码

实现的功能是LED灯点亮3秒,LED灯熄灭后进入STOP模式,由RTC定时4秒后唤醒。依次循环

  /* USER CODE BEGIN WHILE */DBGMCU->CR |= DBGMCU_CR_DBG_STOP; /* 为了能够在停止模式下调试 */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_GPIO_WritePin(GPIOA,GPIO_PIN_11,GPIO_PIN_SET);HAL_Delay(3000);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_11,GPIO_PIN_RESET);//HAL_Delay(3000);if (HAL_RTCEx_SetWakeUpTimer(&hrtc, 11560, RTC_WAKEUPCLOCK_RTCCLK_DIV16) != HAL_OK){Error_Handler();}__HAL_RCC_PWR_CLK_ENABLE();      //使能电源管理时钟HAL_PWREx_EnableUltraLowPower(); //使能超低功耗HAL_PWREx_EnableFastWakeUp();   //使能快速唤醒HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI); //进入低功耗STOP模式//退出stop模式后执行SystemClock_Config();MX_GPIO_Init();}/* USER CODE END 3 */

RTC的初始化配制函数如下:

static void MX_RTC_Init(void)
{/** Initialize RTC Only*/hrtc.Instance = RTC;hrtc.Init.HourFormat = RTC_HOURFORMAT_24;hrtc.Init.AsynchPrediv = 124;hrtc.Init.SynchPrediv = 295;hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;if (HAL_RTC_Init(&hrtc) != HAL_OK){Error_Handler();}/** Enable the WakeUp*/if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 11560, RTC_WAKEUPCLOCK_RTCCLK_DIV16) != HAL_OK){Error_Handler();}}

RTC初始化配置中的HAL_RTCEx_SetWakeUpTimer_IT 需要保留,否则无法产生中断,系统将一直维持STOP

覆写中断回调函数:

void HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc)
{__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
}

清除PWR_FLAG_WU标志位是进入STOP模式的必要条件。

三、RTC定时时长的计算

函数 HAL_RTCEx_SetWakeUpTimer(RTC_HandleTypeDef *hrtc, uint32_t WakeUpCounter, uint32_t WakeUpClock)  中的参数WakeUpCounter 和 WakeUpClock 决定定时的时长:

wakeup time = WakeUpCounter * (WakeUpClock /LSI)

本例中:wakeup time  = 11560 *(16/37000) = 4s

四、后记

1、程序通过STLINK下载后,按键reset 进行复位,程序无法进入STOP模式,必须断电重启才能进入STOP模式。 不知原因,先行记录。

STM32 低功耗STOP模式,RTC唤醒相关推荐

  1. STM32 低功耗睡眠模式(SLEEP)事件(EVENT)唤醒实现及优化

    STM32 低功耗睡眠模式(SLEEP)事件(EVENT)唤醒实现及优化 1. 介绍 STM32具有多种低功耗模式,当前以STM32L4系列的低功耗模式最为丰富,此处基于STM32L476和STM32 ...

  2. STM32进入Standby模式并唤醒

    项目背景 设备具备电池.电源适配器两种供电方式,实现出厂(和电池一并密封装盒)时最低功耗(即进入待机模式),到用户开始使用时需要手动磁棒唤醒,开始复位运行.在检测到设备是交流供电时,设备全速运行:检测 ...

  3. [STM32F1]STM32 低功耗待机模式与RTC周期唤醒

    STM32等类似Cortex-M3的MCU在系统或电源复位以后,MCU就会处于程序运行状态.当用户不需继续运行程序时,可以利用进入低功耗模式来节省电池电量,当需要重新运行时,可以通过特定条件进行唤醒程 ...

  4. STM32低功耗停止模式 以及简述判断中断的两种方式

    #include "wkup.h" #include "led.h" #include "delay.h" // //本程序只供学习使用,未 ...

  5. FreeRTOS源码分析与应用开发09:低功耗Tickless模式

    目录 1. STM32F4低功耗模式简介 2. Tickless模式详解 2.1 如何降低功耗 2.2 关闭SysTick的问题与解决方案 2.2.1 关闭SysTick导致系统节拍计数器停止 2.2 ...

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

    此文献给做单片机工作的同僚,希望大家在嵌入式硬件的道路上越走越远,第一篇,望大家多多指导,不喜勿喷! 这里主要说一下,本人在调试STM32低功耗功能时遇到的问题以及解决思路与大家分享一下. 在确认使用 ...

  7. 【STM32笔记】低功耗模式下的RTC唤醒(非闹钟唤醒,而是采用RTC_WAKEUPTIMER)

    [STM32笔记]低功耗模式下的RTC唤醒(非闹钟唤醒,而是采用RTC_WAKEUPTIMER) [STM32笔记]低功耗模式配置及避坑汇总 前文: blog.csdn.net/weixin_5340 ...

  8. 【极海APM32替代笔记】低功耗模式下的RTC唤醒(非闹钟唤醒,而是采用RTC_WAKEUPTIMER)

    [极海APM32替代笔记]低功耗模式下的RTC唤醒(非闹钟唤醒,而是采用RTC_WAKEUPTIMER) [STM32笔记]低功耗模式配置及避坑汇总 前文: blog.csdn.net/weixin_ ...

  9. STM32低功耗模式测试

    stm32单片机低功耗模式共有3种,下来对3种低功耗进行分析测试. 先看手册上相关低功耗资料介绍: 先来分析睡眠模式: 进入睡眠模式比较简单,只需一条指令即可.唤醒睡眠模式,我们使用串口中断来唤醒,通 ...

  10. STM32低功耗模式

    STM32 的低功耗模式有 3种: 1)睡眠模式(CM3内核停止,外设仍然运行) 2)停止模式(所有时钟都停止) 3)待机(standby)模式(1.8V内核电源关闭) 从待机模式唤醒后的代码执行等同 ...

最新文章

  1. 当当的羊毛又该剪了!官方活动基础上的额外优惠券,速领!
  2. 单片机声光电子琴程序流程图_基于单片机的智能家居控制系统毕业设计
  3. 微电网日前优化调度 。算例有代码(0)
  4. c#中引用类型作为值参数和引用参数问题
  5. 对症下药教你清除电脑中的木马
  6. 单元测试——Winfrom
  7. 深入理解Java中的volatile关键字
  8. 初探Object in java
  9. 两个摄像头自动切换画面_你知道吗?你的手机摄像头之间会打架
  10. VC++ : VS2008 使用ATL开发COM组件
  11. 品质体系及标准大集合(偏向软件)
  12. PHPWAMP开机自启异常,服务器重启后Apache等服务不会自启的原因分析
  13. 如何查看自己已连接WiFi的密码
  14. WP网站主页备案号存放代码
  15. dos皇帝攻略_dos游戏皇帝
  16. writing idiomatic python翻译
  17. 如何下载最新电影高清资源?
  18. 案例 | 巴别鸟助推WE+管理入驻企业文档资料
  19. 【豌豆荚 360助手】发布第一个私人项目
  20. 【樂理】鋼琴琴鍵的頻率

热门文章

  1. Python 数据处理 | 详解缩尾处理(winsorize)和代码实践
  2. sql创建和添加时间字段
  3. python内置函数源码中啥都没有_如何查看python内置函数源码
  4. 微信小程序UI组件 开发框架 实用库 经典demo
  5. CentOS7.2 安装L2TP/IPSec 服务端/客户端 和部分心得 ( libreswan+xl2tpd )
  6. JS工具类(一):DateUtil.js
  7. 【泛微Ecology9.0】安装\启用非标功能
  8. php拾取当前经纬度,获取中国各省市区县经纬度的方法
  9. HTML问答页面模板,问答社区简单静态页面模板
  10. 数据库常用增删改查语句