stm32 每次复位启动RTC时间都会变慢
困扰我一天多时间的问题,RTC时间变慢!这个你肯定会说晶振有问题,起振电容不匹配等等!额其实我也这么认为!应用场景如下:
低功耗项目需求,stm32L412CBUx芯片每次执行完动作后进入STOP模式,然后通过RTC闹钟唤醒再进行动作,这个顺序周而复始。但是每次动作记录下的数据时间却发现怪怪的,时间和手机标准时间慢了好多,运行20分钟慢了将近8分钟左右,那是多么恐怖!
于是将其每次打印出来,果不出所料!怎么会变慢的呢?32.768K晶振这个物料和上次不一样还是电容使用了12pF ? 恩换一下吧,两个都换了没发现什么改变的,再用示波器观察下波形,波形频率也挺好的。每次唤醒电源有问题?用示波器观察了下3.3V的纹波,20mv下,挺好的。晕了!那软件问题?屏蔽下各部分?屏蔽下无关部分?再用cubemx新建工程?都没用!!!看了所以网上的rtc时钟变慢的文章都没什么发现!晚上8点了,哎回去吧!在路上地铁上拿着手机继续搜索这这个问题。第二天过来想了想,理清下思路,要是不断复位会不会影响这个时钟呢。一边看着电脑秒钟输出和串口打印的时间,同时不停按复位键,不用几下时间明显变慢了。哦原来真的是复位引起,于是后来改变搜索问题的关键词,让我有点启发的文章:
https://blog.csdn.net/liaronbob/article/details/86091574
真的感谢这篇博文,让我开始怀疑RTC初始化函数,其实我有个疑问的,因为程序我是要操作RTC的,这里不初始化能执行其指针下的成员吗?按照文章操作结果读出来备份寄存器为0. 有点将信将疑,读取时间没问题,但就是备份寄存器读不出来也没复位的。答案浮出来了。果然是上边文章的原因。如下:
http://www.51hei.com/bbs/dpj-76620-1.html
那么这个初始化函数肯定有初始化什么标志位才可以正常读取备份寄存器的。经过细看这个初始化函数以及手册。恩发现了: TampOffset; /*!< Offset to TAMP instance */ 这个指针偏移
于是代码修改如下:
//RTC部分
void RTC_Init( )
{RCC_OscInitTypeDef RCC_OscInitStruct;RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;RTC_TamperTypeDef stamperstructure;/* Set Voltage scale1 as MCU will run at 32MHz */__HAL_RCC_PWR_CLK_ENABLE();__HAL_RCC_RTC_ENABLE();/*这里并不是每次上电都要初始化RTC,根据第0个备份寄存器的数组决定。因为在不断复位启动执行吃时候RTC,RTC的时间将会变慢,大概一次复位将会慢半秒到一秒,这个真的可怕啊!我的项目应用是需要在stop模式下唤醒并复位,相当于不断时间变成一半,这个问题搞了我快两天的工作时间,真是HAL的坑啊!20201204*/RtcHandle.TampOffset = (TAMP_BASE - RTC_BASE);//一定加这句,不然在不初始化HAL_RTC_Init()的时候,执行HAL_RTCEx_BKUPRead(&RtcHandle,RTC_BKP_DR0)读取不成功且为0RtcHandle.Instance = RTC;if(HAL_RTCEx_BKUPRead(&RtcHandle,RTC_BKP_DR0)!=0X6050)//是否第一次配置{RtcHandle.Init.HourFormat = RTC_HOURFORMAT_24;RtcHandle.Init.AsynchPrediv = RTC_ASYNCH_PREDIV;RtcHandle.Init.SynchPrediv = RTC_SYNCH_PREDIV;RtcHandle.Init.OutPut = RTC_OUTPUT_DISABLE;RtcHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;RtcHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;if (HAL_RTC_Init(&RtcHandle) != HAL_OK){/* Initialization Error */}// if(HAL_RTCEx_BKUPRead(&RtcHandle,RTC_BKP_DR0)!=0X6050)//是否第一次配置// {RTC_Set_Time(15,11,0,RTC_HOURFORMAT12_PM); //设置时间 ,根据实际时间修改RTC_Set_Date(19,12,17,2); //设置日期HAL_RTCEx_BKUPWrite(&RtcHandle,RTC_BKP_DR0,0X6050);//标记已经初始化过了}
}
RTC初始化的代码,就是只要备份寄存器不复位都不再进行RTC初始化,同时可以操作RTC!
这个真的ST官方的HAL库害死人了。。。。。。。怪不得那么多人说HAL库的RTC就是BUG!!!! 我这个需要是非常常见的,特别现在那么多低功耗的项目,希望帮到有需要的朋友!
帮到你的话感谢打赏哈哈!
stm32 每次复位启动RTC时间都会变慢相关推荐
- 地球出现Bug了?昨天大量网友手机时间集体变慢10分钟
点击上方 "程序员小乐"关注, 星标或置顶一起成长 关注订阅号「程序员小乐」,收看更多精彩内容 每日英文 Past is a nice place to visit, but ce ...
- 每次开机启动都会创建图标和修改锁定任务栏浏览器的主页
每次开机启动都会创建图标和修改锁定任务栏浏览器的主页 解决: 搜索 -任务计划 -任务计划程序库 把这两个OEM8和OEM8server激活工具改为禁用-重启 2.更改策略组gpedit.msc,下图 ...
- STM32CUBEMX 配置12脚3641BS以及串口显示RTC时间
最近在学习STM32F4系列的RTC时钟系统,同时也在学习4位7段数码管显示驱动.而市面上很多3641BS数码管都是集成了74HC595移位寄存器芯片的PCB板,故网上大多基于STM32驱动该型号数码 ...
- STM32的复位方式:硬件复位、软件复位(看门狗复位和系统复位)
STM32的复位方式:硬件复位.软件复位(看门狗复位和系统复位). 1.硬件复位: 硬件复位通过给NRST引脚输入低电平复位单片机. 2.看门狗复位: 独立看门狗和窗口看门狗. (1)独立看门狗 ST ...
- stm32之实时时钟RTC(掉电计时保持、秒中断、闹钟中断、溢出中断)
前言:stm32系列产品普遍都有实时时钟RTC模块,它提供一个掉电保持计时功能,掉电后由后备供电区域供电.除了提供时间和日期之外,还可以设置闹钟提醒,且可以在待机模式下设置闹钟唤醒系统.在一些小容量. ...
- MVC5中EF6 Code First启动慢及间隙变慢的一些优化处理
问题描述: 第一次访问的时候很慢,后面再次打开页面很快,过了一段时间不访问页面然后再次打开页面又像第一次那样很慢. 采用的技术和环境: 使用技术:EF6+MVC5 服务器环境:Windows 2012 ...
- MVC5中EF6 Code First启动慢及间隙变慢优化的实践经验(转)
问题描述:第一次访问的时候很慢,后面再次打开页面很快,过了一段时间不访问页面然后再次打开页面又像第一次那样很慢. 采用的技术和环境: windows 2008 64位+IIS7.5 vs2013+m ...
- 【STM32】详解RTC实时时钟的概念和配置示例代码
一.什么是RTC RTC(Real-time Clock):实时时钟,本质上是一个支持BCD编码的定时器/计数器.主电源断电后能够由电池供电,使其时钟跳转依然正常. 二.STM32F4芯片内的RTC功 ...
- stm32 + ESP8266 wifi获取网络时间和天气 stm32天气预报
大家遇到什么什么题,可以私聊我. 近期由于某些原因,玩了一下stm32+WiFi获取网络天气和网络时间.之前一直觉得这个东西会有点难度,其实,做完了才发现,其实那只是想象中的难而已.现在,将这几天的成 ...
最新文章
- 一次心惊肉跳的服务器误删文件的恢复过程
- R语言list.files函数获取文件列表实战
- P2801 教主的魔法(分块入门)
- 五问弄懂液冷数据中心
- qt linux 聊天室,Qt网络聊天室客户端
- C 语言学习:班级同学的博客地址列表
- OpenResty安装下载
- 论文笔记_S2D.20_2017-ICCV-从单张RGB图像到精确尺度深度图评估的一种双支网络
- 【交通标志识别】基于matlab GUI模板匹配交通标志识别【含Matlab源码 1059期】
- MY CSDB BLOG 第一篇
- python论文降重_论文怕被查重怎么办?你的降重神器来了|简明python教程|python入门|python教程...
- 2022年信息安全工程师考试知识点:计算机网络基本知识
- 《MLB棒球创造营》:走近棒球运动·坦帕湾光芒队
- 【英语写作】以亚太杯为例
- 控制计算机桌面图标,(1)在桌面上显示“计算机”“控制面板”图标,然后隐藏“控制面板”图标。...
- C#拆分Excel工作表
- html属于非结构化数据吗,什么是结构化数据非结构化数据和半结构化数据
- 软件测试有白和黑盒和灰盒,白盒测试、灰盒测试和黑盒测试的区别
- HTTP Referer介绍和使用
- 什么是海外调查问卷?都有哪些形式
热门文章
- iOS开发 iOS10推送必看(基础篇)
- 数据库可扩展设计基本原则 - 高可用以及可扩展性
- 认识常见中间件-redis(二)-redis缓存雪崩、缓存击穿、缓存穿透
- ProSpec ALDH2 人重组体解决方案
- 使用 bibtex 批量生成 bibitem 内容的方法
- 七条建议:用Stata处理文字变量和字符变量
- Bison 移进-归约分析
- 知识图谱在信息检索中的应用_封面数据 | 知识图谱的入门与应用
- 《高效学习OpenGL》之模型变换 glTranslatef(), glRotatef(),glScalef()
- 句句诛心的博士论文致谢及女朋友回应的话...