STM32超低功耗进阶之RTC
一,RTC 在低功耗中的作用
RTC 在低功耗场景的作用非常重要,先回顾一下前面讲到的唤醒的方式,以及他的局限性:
- 按键中断唤醒,如果设备在很难手动去触摸到按键的场景
- 异常中断唤醒, 如果外设的电压等降低发生的异常,将会导致系统无法继续工作下去
- 外设接收中断唤醒,如果本身是通讯的发起者,该如何唤醒
RTC 的优势:
- RTC 可以使用 LSE 来提供时钟源,而且这个时钟源也可以给到 MCU
- RTC 只需要电池供电就可以,功耗非常小
- RTC 可以设置闹钟周期性的唤醒 MCU,即使在关机模式下
RTC 具备其他唤醒无法替代的优点,几乎所有的低功耗设备,都会使用到 RTC 的功能。
二,RTC 的功能
- 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();}
这里要注意 AsynchPrediv
和 AsynchPrediv
这两个数,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
- 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);
- 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();}
- 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();}
输出的这个电平信号的模式和电平高低都可以设置。
- RTC 可以输出一个固定频率信号,如:1HZ
三,总结
RTC 的功能非常强大,在低功耗场景中可以在使用最低的功耗来进行睡眠,也可以防止非法入侵。
RTC 在低功耗场景中是不可或缺的组成部分,更多的 RTC 功能的发掘,可以在实际项目去体验一下,理解的也更加透彻。
STM32超低功耗进阶之RTC相关推荐
- 【STM32】学习笔记RTC日历基础应用问题分析
▲ 点击上方 关注STM32 RTC,Real_Time Clock,即实时时钟,在许多电子系统中都能看到实时时钟的存在. 今天是第6篇分享,<STM32学习笔记>之RTC日历基础应用问题 ...
- stm32之实时时钟RTC(掉电计时保持、秒中断、闹钟中断、溢出中断)
前言:stm32系列产品普遍都有实时时钟RTC模块,它提供一个掉电保持计时功能,掉电后由后备供电区域供电.除了提供时间和日期之外,还可以设置闹钟提醒,且可以在待机模式下设置闹钟唤醒系统.在一些小容量. ...
- 【STM32】详解RTC实时时钟的概念和配置示例代码
一.什么是RTC RTC(Real-time Clock):实时时钟,本质上是一个支持BCD编码的定时器/计数器.主电源断电后能够由电池供电,使其时钟跳转依然正常. 二.STM32F4芯片内的RTC功 ...
- STM32+多通道模拟输入+MQTT+RTC+OLED显示屏+RFID门禁
首先准备几个东西, 1,STM32F103ZET6的板子 2,温湿度模块 3,OLED显示屏 4,RFID门禁卡 5,esp8266wifi模块 然后百度下载keil5 然后安装STM32F1的芯片库 ...
- STM32超低功耗入门之待机模式
一. 认识待机模式 进入待机模式之后,唤醒 MCU 后程序不是从进入低功耗模式之后的下一行代码开始执行,而是重新启动了. 通过上图可以得出结论: 待机模式有 2 种电压调节器方案 待机模式下 CPU ...
- STM32超低功耗入门之关机模式
一. 认识关机模式 进入关机模式之后,唤醒 MCU 程序不是从进入低功耗模式之后的下一行代码开始执行,而是重新启动了. 通过上图可以得出结论: 所有电压调节器都被关闭了 关机模式下 CPU 是停止状态 ...
- stm32 每次复位启动RTC时间都会变慢
困扰我一天多时间的问题,RTC时间变慢!这个你肯定会说晶振有问题,起振电容不匹配等等!额其实我也这么认为!应用场景如下: 低功耗项目需求,stm32L412CBUx芯片每次执行完动作后进入STOP模式 ...
- STM32超低功耗入门之睡眠模式
一. 认识睡眠模式 查看官方手册对睡眠模式的描述: 通过上图可以得出结论: 睡眠模式有 4 种电压调节器方案 在睡眠模式下 CPU 是停止状态 在睡眠模式下程序在 SRAM 执行情况下,Flash 可 ...
- STM32超低功耗入门之停止模式
一. 认识停止模式 STM32L4 系列提供了 3 种停止模式:stop0 , stop1 , stop2. 功耗逐次更低. 通过上图可以得出结论: stop0 模式有 2 种电压调节器方案.stop ...
最新文章
- 目标识别的选择性搜索
- eclipse无法自动识别出svn项目
- putty连接linux as5 输入密码后连接中断
- 教怎样写好一份“漏洞报告”
- 使用wireshark抓包,本地环回测试通信数据已经通过SM4国密算法加密
- Updatexml函数再mysql中的作用
- Python编写人机对战小游戏(抓小狐狸)
- 话里话外:中小型装备制造企业竞争优势构建之路
- SQL Server抛出异常信息 RAISERROR
- Java:高级类特性
- 微信开发者工具协同使用
- android developer tiny share-20170603
- xdg在Linux中的用法,linux – 如何使用xdg-mime命令 - 程序园
- 层次softmax (hierarchical softmax)理解
- jq查找div下的第二个span
- 晨曦记账本快速搜索收支账的基础操作
- 论文阅读——Deep 3D Portrait from a Single Image(CVPR2020)
- 涉足荒野script_涉足深度学习,转移学习和快速人工智能
- Cesium开发:地下模式效果
- 《生命不息,折腾不止》
热门文章
- 软件测试报告问题等级划分
- 用友NC资产管理解决方案助机场行业盘活增效
- cc37a_demo_C++_异常_(1)-txwtech-_打开-读取文件-写入文件-使用方法
- iPad 2 5.0.1系统完美越狱附个人问题汇总及解决办法
- 【java 工具类】集合判断是否为空
- linux系统之禁用usb口
- setpagecache.php_一个PHP页面缓存类 修改后可作Emlog缓存插件
- Mac下安装i386编译工具
- 机器学习:PM2.5预测问题 (基于Sklearn Pandas)
- 百度google收录的差异