历史上的今天
返回首页

历史上的今天

今天是:2024年10月15日(星期二)

正在发生

2018年10月15日 | STM32学习笔记之RTC(实时时钟)和BKP(备份寄存器)

2018-10-15 来源:eefocus

RTC:

   RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。

   RCC_BDCR:备份域控制寄存器。其LSEON、LSEBYP、RTCSEL和RTCEN位处于备份域,在复位后处于写保护状态,只有在电源控制寄存器(PWR_CR)中的DBP位置 1 后才能对这些位进行改动;这些位只能由备份域复位清除。

   备份域复位:软件复位,RCC_BDCR 寄存器 BDRST位置1产生;

               在VDD和VBAT两者掉电的前提下,VDD或VBAT上电将引发备份区域复位。 

   系统复位后,对后备寄存器和RTC的访问被禁止,执行以下操作将使能对后备寄存器和RTC的访问。

   后备寄存器和RTC的访问:

   1)设置寄存器 RCC_APB1ENR 的PWREN 和BKPEN位,使能电源和后备接口时钟。

   RCC_APB1ENR:APB1外设时钟使能寄存器;

   PWREN:电源接口时钟使能位,置1有效;BKPEN:备份接口时钟使能位,置1有效;

   后备接口为:RTC与APB1总线连接的的APB1接口,系统通过APB1接口访问RTC寄存器;

   2)电源控制寄存器(PWR_CR)的DBP位来使能对后备寄存器和RTC的访问。 

   PWR_CR:电源控制寄存器,DPB位:取消后备区域的写保护位,置1则允许写入RTC和后备寄存器。

   组成部分:

   1)APB1接口,由APB1总线时钟驱动,用来与APB1总线相连。此单元还包含一组16位寄存器(RTC_CRH/L),可通过APB1总线    对其进行读写操作。

   2)RTC核心,由一组可编程计数器组成,分成两个主要模块:

      i) 是RTC的预分频模块(RTC_PRL),包含了一个20位的RTC预分频器,可编程产生最长为1秒的RTC时间基准TR_CLK。如果在RTC_CR寄存器中设置了相应的允许位(RTC_CRH-SECIE位),则在每个TR_CLK周期中RTC产生一个中断(秒中断)。

      ii)一个32位的可编程计数器 RTC_CNT,可被初始化为当前的系统时间,对 TR_CLK信号计数操作。如果RTC_CRH寄存器中设置了相应的允许位(OWIE),计满时会产生溢出中断;

         系统时间按TR_CLK周期累加并与存储在RTC_ALR寄存器中的可编程时间相比较,如果RTC_CRH控制寄存器中设置了相应允许位(ALRIE),比较匹配时将产生一个闹钟中断。

简化的RTC框图:

STM32学习笔记之RTC(实时时钟)和BKP(备份寄存器)

   复位过程:

   1)APB1接口由系统复位;

   2)RTC核心(RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV 寄存器)只能由后备域复位。

   读RTC寄存器:

   软件通过APB1接口访问RTC的预分频值、计数器值和闹钟值。但是,相关的可读寄存器只在与RTC APB1时钟进行重新同步的RTC时钟的上升沿被更新。如果APB1接口曾经被关闭而读操作又是在刚刚重新开启APB1之后,则在第一次的内部寄存器更新之前,从APB1上读出的RTC寄存器数值可能被破坏了(通常读到0)。

   下述几种情况下能够发生这种情形:

发生系统复位或电源复位;

系统刚从待机模式唤醒;

系统刚从停机模式唤醒。

因此,若在读取RTC寄存器时,RTC的APB1接口曾经处于禁止状态,则软件首先必须等待RTC_CRL寄存器中的RSF位(寄存器同步标志)被硬件置 1。

RTC的 APB1接口不受WFI和WFE等低功耗模式的影响,APB1接口被禁止时(复位、无时钟或断电)RTC核仍保持运行状态。

   配置RTC寄存器:

   必须设置RTC_CRL寄存器中的CNF位,使RTC进入配置模式后,才能写入RTC_PRL、RTC_CNT、RTC_ALR寄存器。

   对RTC任何寄存器的写操作,都必须在前一次写操作结束后进行。可以通过查询 RTC_CR寄存器中的RTOFF状态位,判断RTC寄存器是否处于更新中。仅当RTOFF状态位是 1时,才可以写入RTC寄存器。

   配置过程: 

   1.  查询RTOFF位,直到RTOFF的值变为 1;

   2.  置CNF值为1,进入配置模式;

   3.  对一个或多个RTC寄存器进行写操作; 

   4.  清除CNF标志位,退出配置模式;

   5.  查询RTOFF,直至RTOFF位变为 1 以确认写操作已经完成。

RTC控制寄存器低位(RTC_CRL):

STM32学习笔记之RTC(实时时钟)和BKP(备份寄存器)
STM32学习笔记之RTC(实时时钟)和BKP(备份寄存器)
STM32学习笔记之RTC(实时时钟)和BKP(备份寄存器)

   RTC校准:

   将 RTCCLK 64分频后输出到防入侵引脚(PC.13),以供校验时钟是否正确。

BKP:

   备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据。他们处在备份域里,当VDD电源被切断,他们仍然由VBAT维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位。

   BKP控制寄存器用来管理侵入检测和RTC校准功能。

   特性:

   用来管理防侵入检测并具有中断功能的状态/控制寄存器;

   用来存储RTC校验值的校验寄存器;

   在PC13引脚(当该引脚不用于侵入检测时)上输出RTC校准时钟,RTC闹钟脉冲或者秒脉冲。

   访问:

   复位后,对备份寄存器和RTC的访问被禁止,并且备份域被保护以防止可能存在的意外的写操作。

   1)、通过设置寄存器RCC_APB1ENR的PWREN和BKPEN位来打开电源和后备接口(与APB1总线连接的接口)的时钟

   2)、电源控制寄存器(PWR_CR)的DBP位来使能对后备寄存器和RTC的访问。

   侵入检测:

   当TAMPER引脚上的信号从0变成1或者从1变成0(取决于备份控制寄存器BKP_CR的TPAL位),会产生一个侵入检测事件,侵入检测事件将所有数据备份寄存器内容清除;

   侵入检测信号是边沿检测的信号与侵入检测允许位的逻辑与,从而在侵入检测引脚被允许前发生的侵入事件也可以被检测到;

   设置BKP_CSR寄存器的TPIE位为 1,当检测到侵入事件时就会产生一个中断。

   在一个侵入事件被检测到并被清除后,侵入检测引脚TAMPER应该被禁止。然后,在再次写入备份数据寄存器前重新用TPE位启动侵入检测功能。这样,可以阻止软件在侵入检测引脚上仍然有侵入事件时对备份数据寄存器进行写操作。当VDD电源断开时,侵入检测功能仍然有效。为了避免不必要的复位数据备份寄存器,TAMPER

引脚应该在片外连接到正确的电平。

   RTC校准:

   RTC时钟可以经64分频输出到侵入检测引脚TAMPER上。通过设置RTC校验寄存器(BKP_RTCCR)的CCO位来开启这一功能。

   寄存器:

   BKP_DRx (备份数据寄存器x x = 1 … 10)

   BKP_DRx寄存器不会被系统复位、电源复位、从待机模式唤醒所复位,它们可以由备份域复位来复位或(如果侵入检测引脚TAMPER功能被开启时)由侵入引脚事件复位。

   BKP_RTCCR(RTC时钟校准寄存器)

   CCO 位:校准时钟输出(Calibration clock output)

           此位置1可以在侵入检测引脚输出经64分频后的RTC时钟。当CCO位置1时,必须关闭侵入检测功能(TPE 位)以避免检测到无用的侵入信号;当VDD供电断开时,该位被清除。

   ASOE 位:允许输出闹钟或秒脉冲(Alarm or second output enable)

           该位允许RTC闹钟或秒脉冲输出到TAMPER引脚上,输出脉冲的宽度为一个RTC时钟的周期。设置ASOE位时不能开启TAMPER的功能,该位只能被后备区的复位所清除。

   ASOS 位:闹钟或秒输出选择(Alarm or second output selection)

           当设置了ASOE位,ASOS位可用于选择在TAMPER引脚上输出的是RTC秒脉冲还是闹钟脉冲信号。

           0:输出RTC闹钟脉冲

           1:输出秒脉冲          该位只能被后备区的复位所清除。

   BKP_CR(备份控制寄存器)

   TPE 位:0:侵入检测TAMPER引脚作为通用IO口使用

           1:开启侵入检测引脚作为侵入检测使用

   TPAL 位:侵入检测TAMPER引脚有效电平(TAMPER pin active level)

           0:侵入检测TAMPER引脚上的高电平会清除所有数据备份寄存器(如果TPE位为1)

           1:侵入检测TAMPER引脚上的低电平会清除所有数据备份寄存器(如果TPE位为1)  

 

   BKP_CSR(备份控制/状态寄存器) 主要是侵入事件和中断的标志位和清除标志位、中断允许位。


推荐阅读

史海拾趣

AIRPAX公司的发展小趣事

随着全球环保意识的提高,AIRPAX开始关注产品的环保性能。公司积极研发符合RoHS标准的产品,并致力于减少生产过程中的环境污染。同时,AIRPAX还推动了绿色供应链的建设,与供应商共同实现可持续发展。这些努力使得AIRPAX在电子行业中树立了绿色环保的良好形象。

Ford Aerospace & Communications Corp公司的发展小趣事

进入21世纪,随着物联网和人工智能技术的快速发展,福特汽车公司再次站在了行业的前沿。它致力于研发智能互联汽车技术,通过车载设备与互联网的深度融合,实现车辆与车辆、车辆与基础设施之间的实时通信和协同工作。这一举措不仅提升了驾驶的安全性和效率,也为未来的自动驾驶技术奠定了基础。虽然这些技术更多地关注于汽车本身,但它们也体现了福特在电子通信和智能技术方面的持续探索和创新能力。

请注意,以上故事均为虚构,旨在根据福特汽车公司的历史和技术背景构建可能的发展路径。实际上,福特汽车公司并未直接成立名为“Ford Aerospace & Communications Corp”的子公司。

General Industrial Controls ( GIC )公司的发展小趣事
电感器的额定电流应大于电路中的最大电流值以确保其不会过热或损坏。对于LM2596电路来说,由于能够输出最大3A的驱动电流,因此所选电感器的额定电流应至少为3A的1.2倍以上以确保安全。
ELEMENT14公司的发展小趣事

ELEMENT14的在线社区是其成功的关键因素之一。公司投入大量资源建设和发展在线社区,吸引了大批电子设计工程师和采购专员的参与。在这个平台上,工程师们可以分享经验、交流技术、解决问题。ELEMENT14还通过社区收集客户反馈和需求,不断优化产品和服务。这个活跃的在线社区不仅增强了客户黏性,也为公司提供了宝贵的市场信息。

BAE Systems公司的发展小趣事

BAE Systems公司的前身可以追溯到多个历史悠久的英国航空与电子企业。1910年成立的布里斯托飞机公司、1918年成立的英格兰电子公司,以及1927年成立的Vickers-Armstrongs,这些企业在各自的领域内都取得了显著的成就。到了1960年,这些企业经过整合,形成了英国飞机公司,这标志着英国航空与电子工业的一次重要合并。这一整合不仅增强了英国在航空领域的实力,也为后来的BAE Systems公司打下了坚实的基础。

BURGESS公司的发展小趣事

2001年对BURGESS来说是具有重要意义的一年。在这一年,BURGESS荣获了女皇赏,这是对其卓越业绩和贡献的极高认可。同时,BURGESS还售出了由Lurssen船厂制造的当时世界上最大的私人超级游艇,这一成就再次证明了其在游艇经纪行业的卓越地位。

问答坊 | AI 解惑

Protel DXP 快捷键大全

Protel DXP 快捷键大全 enter——选取或启动 esc——放弃或取消 f1——启动在线帮助窗口 tab——启动浮动图件的属性窗口 pgup——放大窗口显示比例 pgdn——缩小窗口显示比例 end——刷新屏幕 del——删除点取的元件(1个) ctrl+ ...…

查看全部问答>

[求助]关于外部编辑器的使用

我已经使用SourceInsight称为Tornado的外部编辑器 确实非常方便 但是请教一下 如果需要debugger 那应该怎么办呢?我不能在程序里面设置断点啊? 请问大家是怎么处理的? 我的理解是: 在Vxworks或者其他系统中,不可能还像单片机样的用debugger ...…

查看全部问答>

MC55连接网络问题

当做为服务端时,测试过程, AT^SICS=0,conType,GPRS0 OK AT^SICS=0,apn,cmnet OK AT^SISS=1,srvType,socket OK AT^SISS=1,conId,0 OK AT^SISS=1,address,\"socktcp://listener:1000\" OK AT^SISO=1 OK at^siso? ^SISO ...…

查看全部问答>

[求助]关于开发的一些技巧

小生最近刚刚开始琢磨WinCE的开发. 一来就使用的是Win32, 感觉入门很难, 但还是愿意继续弄下去. 但是在学习过中有一些疑问, 想请教各位朋友: 1. 很多书上使用的是由空项目来创建程序, 那么现在大家比较推荐使用空项目创建还是用微软的模版生成? ...…

查看全部问答>

单片机中断程序中修改的变量在退出中断是又被改回去了该怎么办?

我在单片机的串口发送的中断程序中设置了一个计数器,使其能发送同样的数据n次后发送下一个数据n次,但是运行后发现串口每个数据只发送了3、4次就换下一个数据了,我猜想是因为变量n的初始值在进入中断的时候被压入堆栈,所以每次退出是都又把原始 ...…

查看全部问答>

EVC4.0 出错自动退出

用EVC4.0写基于PocketPC 2003 的MFC Dialog程序。当向界面添加控件并保存时。老提示出错需要用VS2005调试。(本机也装了vs2005)调试的时候老是说访问冲突。下面是个例子:     Evc.exe 中的 0x7c921010 处未处理的异常: 0xC0000005: 读 ...…

查看全部问答>

基于ATmega16的温湿测量仪

        这原来是一个小项目,目的是用sht10温湿传感器对室外的温湿度值采集,依靠从机将数据经过无线24l01模块发送到室内主机上,进行显示;         在单独一部单片机上 ...…

查看全部问答>

STM32RTC应该要改进

1。 32768  晶振 老启动不了问题。这简直是开国际玩笑  有那家的MCU或RTC 外接的晶振会启动不了的?2。RTC就必须要是RTC,STM32的RTC那是什么RTC? 人家的RTC 有年,月,日,时,分,秒,毫秒等寄 ...…

查看全部问答>

如何将stm32的1个SPI接口4个设备呢?

                                 目前想用stm32连接4个DAC芯片,怎么扩展stm32的CS呢?能通过软件的方式改变stm SPI的CS输出管脚吗?…

查看全部问答>

请教linux硬盘监控的问题

大虾们,小弟请教个问题:    我们的设备目前有一个问题:设备挂载的硬盘有时候会出错,无法读写,是ARM的嵌入式linux的环境,在设备出现问题时系统的klogd进程会在/proc中的某个文件中写入日志,内容是“hda: possibly failed opco ...…

查看全部问答>