一,RTC 在低功耗中的作用

RTC 在低功耗场景的作用非常重要,先回顾一下前面讲到的唤醒的方式,以及他的局限性:
- 按键中断唤醒,如果设备在很难手动去触摸到按键的场景
- 异常中断唤醒, 如果外设的电压等降低发生的异常,将会导致系统无法继续工作下去
- 外设接收中断唤醒,如果本身是通讯的发起者,该如何唤醒
RTC 的优势:
- RTC 可以使用 LSE 来提供时钟源,而且这个时钟源也可以给到 MCU
- RTC 只需要电池供电就可以,功耗非常小
- RTC 可以设置闹钟周期性的唤醒 MCU,即使在关机模式下
RTC 具备其他唤醒无法替代的优点,几乎所有的低功耗设备,都会使用到 RTC 的功能。

二,RTC 的功能

  1. RTC 实现定时唤醒唤醒功能
  hrtc.Instance = RTC;hrtc.Init.HourFormat = RTC_HOURFORMAT_24;hrtc.Init.AsynchPrediv = 127;hrtc.Init.SynchPrediv = 255;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();}if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0x0FFF, RTC_WAKEUPCLOCK_RTCCLK_DIV16) != HAL_OK){Error_Handler();}

这里要注意 AsynchPredivAsynchPrediv 这两个数,RTC 的时间基准就是由这两个分频得来。一般来说 RTC 都是由 32.768k 的外部晶振来提供时钟源,这里计算可得:32.768k/(127+1)/(255+1) = 1 hz。

设置带有中断的定时器:

  • 唤醒时间基准:16 / 32.768k = ~0.5 ms
  • 唤醒的时间 :0.5 ms * 0x0FFF = ~2 s

上面的代码的功能就是实现,每间隔 2s 唤醒一次 MCU

  1. RTC 实现闹钟

设置当前的时间

  sTime.Hours = 0x0;sTime.Minutes = 0x0;sTime.Seconds = 0x0;sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;sTime.StoreOperation = RTC_STOREOPERATION_RESET;if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK){Error_Handler();}sDate.WeekDay = RTC_WEEKDAY_MONDAY;sDate.Month = RTC_MONTH_JANUARY;sDate.Date = 0x1;sDate.Year = 0x0;if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK){Error_Handler();}

设置闹钟

  /** Enable the Alarm A*/sAlarm.AlarmTime.Hours = 0x0;sAlarm.AlarmTime.Minutes = 0x0;sAlarm.AlarmTime.Seconds = 0x0;sAlarm.AlarmTime.SubSeconds = 0x0;sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;sAlarm.AlarmMask = RTC_ALARMMASK_NONE;sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;sAlarm.AlarmDateWeekDay = 0x1;sAlarm.Alarm = RTC_ALARM_A;if (HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BCD) != HAL_OK){Error_Handler();}/* RTC interrupt Init */HAL_NVIC_SetPriority(RTC_Alarm_IRQn, 0, 0);HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn);
  1. RTC 的侵入检测
    RTC 可以保证 MCU 在电池优电的情况下,备份域可以一直保存数据,如果检测到非法侵入可以销毁备份域的数据,以下代码由 cubemx 生成,未做验证
  sTamper.Tamper = RTC_TAMPER_1;sTamper.Trigger = RTC_TAMPERTRIGGER_LOWLEVEL;sTamper.NoErase = RTC_TAMPER_ERASE_BACKUP_ENABLE;sTamper.MaskFlag = RTC_TAMPERMASK_FLAG_DISABLE;sTamper.Filter = RTC_TAMPERFILTER_2SAMPLE;sTamper.SamplingFrequency = RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV32768;sTamper.PrechargeDuration = RTC_TAMPERPRECHARGEDURATION_1RTCCLK;sTamper.TamperPullUp = RTC_TAMPER_PULLUP_ENABLE;sTamper.TimeStampOnTamperDetection = RTC_TIMESTAMPONTAMPERDETECTION_ENABLE;if (HAL_RTCEx_SetTamper(&hrtc, &sTamper) != HAL_OK){Error_Handler();}
  1. RTC 唤醒时间输出一个电平信号
    __HAL_RCC_GPIOB_CLK_ENABLE();/**RTC GPIO ConfigurationPB2     ------> RTC_OUT_ALARM*/GPIO_InitStruct.Pin = GPIO_PIN_2;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate = GPIO_AF0_RTC_50Hz;hrtc.Instance = RTC;hrtc.Init.HourFormat = RTC_HOURFORMAT_24;hrtc.Init.AsynchPrediv = 127;hrtc.Init.SynchPrediv = 255;hrtc.Init.OutPut = RTC_OUTPUT_WAKEUP;hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_POS1;hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;if (HAL_RTC_Init(&hrtc) != HAL_OK){Error_Handler();}

输出的这个电平信号的模式和电平高低都可以设置。

  1. RTC 可以输出一个固定频率信号,如:1HZ

三,总结

RTC 的功能非常强大,在低功耗场景中可以在使用最低的功耗来进行睡眠,也可以防止非法入侵。
RTC 在低功耗场景中是不可或缺的组成部分,更多的 RTC 功能的发掘,可以在实际项目去体验一下,理解的也更加透彻。

STM32超低功耗进阶之RTC相关推荐

  1. 【STM32】学习笔记RTC日历基础应用问题分析

    ▲ 点击上方 关注STM32 RTC,Real_Time Clock,即实时时钟,在许多电子系统中都能看到实时时钟的存在. 今天是第6篇分享,<STM32学习笔记>之RTC日历基础应用问题 ...

  2. stm32之实时时钟RTC(掉电计时保持、秒中断、闹钟中断、溢出中断)

    前言:stm32系列产品普遍都有实时时钟RTC模块,它提供一个掉电保持计时功能,掉电后由后备供电区域供电.除了提供时间和日期之外,还可以设置闹钟提醒,且可以在待机模式下设置闹钟唤醒系统.在一些小容量. ...

  3. 【STM32】详解RTC实时时钟的概念和配置示例代码

    一.什么是RTC RTC(Real-time Clock):实时时钟,本质上是一个支持BCD编码的定时器/计数器.主电源断电后能够由电池供电,使其时钟跳转依然正常. 二.STM32F4芯片内的RTC功 ...

  4. STM32+多通道模拟输入+MQTT+RTC+OLED显示屏+RFID门禁

    首先准备几个东西, 1,STM32F103ZET6的板子 2,温湿度模块 3,OLED显示屏 4,RFID门禁卡 5,esp8266wifi模块 然后百度下载keil5 然后安装STM32F1的芯片库 ...

  5. STM32超低功耗入门之待机模式

    一. 认识待机模式 进入待机模式之后,唤醒 MCU 后程序不是从进入低功耗模式之后的下一行代码开始执行,而是重新启动了. 通过上图可以得出结论: 待机模式有 2 种电压调节器方案 待机模式下 CPU ...

  6. STM32超低功耗入门之关机模式

    一. 认识关机模式 进入关机模式之后,唤醒 MCU 程序不是从进入低功耗模式之后的下一行代码开始执行,而是重新启动了. 通过上图可以得出结论: 所有电压调节器都被关闭了 关机模式下 CPU 是停止状态 ...

  7. stm32 每次复位启动RTC时间都会变慢

    困扰我一天多时间的问题,RTC时间变慢!这个你肯定会说晶振有问题,起振电容不匹配等等!额其实我也这么认为!应用场景如下: 低功耗项目需求,stm32L412CBUx芯片每次执行完动作后进入STOP模式 ...

  8. STM32超低功耗入门之睡眠模式

    一. 认识睡眠模式 查看官方手册对睡眠模式的描述: 通过上图可以得出结论: 睡眠模式有 4 种电压调节器方案 在睡眠模式下 CPU 是停止状态 在睡眠模式下程序在 SRAM 执行情况下,Flash 可 ...

  9. STM32超低功耗入门之停止模式

    一. 认识停止模式 STM32L4 系列提供了 3 种停止模式:stop0 , stop1 , stop2. 功耗逐次更低. 通过上图可以得出结论: stop0 模式有 2 种电压调节器方案.stop ...

最新文章

  1. 目标识别的选择性搜索
  2. eclipse无法自动识别出svn项目
  3. putty连接linux as5 输入密码后连接中断
  4. 教怎样写好一份“漏洞报告”
  5. 使用wireshark抓包,本地环回测试通信数据已经通过SM4国密算法加密
  6. Updatexml函数再mysql中的作用
  7. Python编写人机对战小游戏(抓小狐狸)
  8. 话里话外:中小型装备制造企业竞争优势构建之路
  9. SQL Server抛出异常信息 RAISERROR
  10. Java:高级类特性
  11. 微信开发者工具协同使用
  12. android developer tiny share-20170603
  13. xdg在Linux中的用法,linux – 如何使用xdg-mime命令 - 程序园
  14. 层次softmax (hierarchical softmax)理解
  15. jq查找div下的第二个span
  16. 晨曦记账本快速搜索收支账的基础操作
  17. 论文阅读——Deep 3D Portrait from a Single Image(CVPR2020)
  18. 涉足荒野script_涉足深度学习,转移学习和快速人工智能
  19. Cesium开发:地下模式效果
  20. 《生命不息,折腾不止》

热门文章

  1. 软件测试报告问题等级划分
  2. 用友NC资产管理解决方案助机场行业盘活增效
  3. cc37a_demo_C++_异常_(1)-txwtech-_打开-读取文件-写入文件-使用方法
  4. iPad 2 5.0.1系统完美越狱附个人问题汇总及解决办法
  5. 【java 工具类】集合判断是否为空
  6. linux系统之禁用usb口
  7. setpagecache.php_一个PHP页面缓存类 修改后可作Emlog缓存插件
  8. Mac下安装i386编译工具
  9. 机器学习:PM2.5预测问题 (基于Sklearn Pandas)
  10. 百度google收录的差异