你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32学习笔记之—RTC

[复制链接]
乡村布拉德 发布时间:2008-12-24 15:08
写这篇学习笔记的时候距上一篇笔记间隔的时间不短了,期间有网友关心询问为什么不更新文章,主要是这一段时间工作太忙了没有闲暇时间做下来学习,工作是重要的事情,不能把饭碗丢了啊o(∩_∩)o…,好了废话少说切入正题。 # H! Z. `- B% ~) \

3 m0 Y( ~- v5 d+ a9 L既然我们要使用RTC就要先对它有个大致的了解,知己知彼才能百战不殆嘛!STM32内部RTC功能非常实用,它的供电和时钟是独立于内核的,可以说是STM32内部独立的外设模块,有加上RTC内部寄存器不受系统复位掉电的影响,我们可以才用外部电池供电和32768表振晶体来实现真正RTC(实时时钟)功能。的这里引用手册里一段概述“RTC由两个主要部分组成。第一部分(APB1接口)用来和 APB1总线相连。此单元还包含一组 16位寄存器,可通过 APB1总线对其进行读写操作。APB1接口以 APB1总线时钟为时钟,用来与 APB1总线接口。  5 X: `( i1 D7 l* W" W4 Q. ]
2 y: R9 k! c" C. R: u+ r9 M6 T
另一部分(RTC核)由一系列可编程计数器组成,分成两个主要模块。第一个模块是 RTC的预分频模块,它可编程产生最长为 1秒的 RTC时间基准 TR_CLK。RTC的预分频模块包含了一个 20位的可编程分频器(RTC预分频器)。在每个TR_CLK周期中,如果在 RTC_CR 寄存器中设置了相应允许位,则 RTC产生一个中断(秒中断)。第 2个模块是一个 32位的可编程的计数器,它可被初始化为当前的系统时间。系统时间以 TR_CLK速度增长并与存储在 RTC_ALR寄存器中的可编程的时间相比较,如果 RTC_CR控制寄存器中设置了相应允许位,则比较匹配时将产生一个闹钟中断。” # X: b4 J1 [# J5 B
6 s/ |' y+ U' H+ U2 j4 {  H
对于第一次实用RTC的时候我们要对它进行配置一番,现在大致说一下(代码是通过调用RTC_Config函数来实现的):
) A6 J3 F/ ]8 o$ ~: ~% _0 B+ O# T: D! h) X7 B3 Y5 ^
1.      打开电源管理和备份寄存器时钟,提到备份寄存器这里要说一下,引用手册--“备份寄存器是 10个 16位的寄存器,可用来存储 20个字节的用户应用程序数据。他们处在备份域里,当 VDD电源被切断,他们仍然由 VBAT维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位。”我们正式通过在备份寄存器写固定的数据来判断芯片是否第一次实用RTC,从而在系统运行RTC时提示配置时钟的。 & C% H8 I$ i; I! Q5 v8 w

* m1 Q; _- m& P) b2.      使能RTC和备份寄存器的访问(复位默认关闭)。引用手册--“复位后,对备份寄存器和 RTC的访问被禁止,并且备份域被保护以防止可能存在的意外的写操作。电源控制寄存器(PWR_CR)的 DBP位必须被置 1,以允许访问备份寄存器和RTC.”因为程序要对RTC和备份寄存器操作,所以必须使能。 : u! m( I+ b, g1 ^7 `, B
9 D; k$ J* @/ S* N3 V1 e. H( T
3.      选择外部低速晶体为RTC时钟,并使能时钟; : T. n" x8 a- R* e$ W' c. n+ U

, r) z" M8 u5 p1 q/ }4.      使能秒中断,程序里在秒中断里置位标志位来通知主程序显示时间数据,同时在32位计数器到23:59:59时清零; : d% v& M  t( w: m
& h: F, X) {1 F) u  r. E0 w
5.      设置RTC预分频器值产生1秒信号计算公式 fTR_CLK = fRTCCLK/(PRL+1),我们设置32767来产生秒信号; & v) O# d! W  `# E+ ]4 {9 V4 M- K
) [' W" ~" G+ J4 C/ M$ ?. k
在这里要注意一下,所有在对RTC寄存器操作之前都要判断读写操作是否完成,也就是说当前是否有读写操作。系统内核是通过RTC的APB1接口来访问RTC内部寄存器的,所以在上电复位,休眠唤醒的时候,我们要先对RTC时钟与 RTC APB1时钟进行重新同步,在同步完成后再对器进行操作,因为RTC的AP1接口使用的系统APB1的时钟。上述配置在初次使用RTC时进行配置,在以后使用过程中,只要RTC外部电池持续供电,无论系统掉电还复位我们都无需重复配置,使用使能秒中断就可以了这一点很是方便嘿嘿... $ h# S+ _2 c; L5 J1 l. j1 {/ Q
; E, ^/ ~/ d1 {1 V/ @8 _. X
在使用过程中我们通过读取32位可编程计数器的值来获取时钟信息,程序是通过串口2来向PC机发送数据来显示时钟的,并且还可以通过像STM32发送字符“S”来重新设置时钟数据,下面是几张调试的图片:
" o0 [* I- _# _% M8 z/ X8 D 4 t7 E( T% G8 K
结束语:本也是才开始学习STM32,知道的也是皮毛而已,如果说的不对的地方还请指出。下面是工程代码,参考了官方的例子,硬件环境还是英培的EMSTM32V1,特介于篇幅这里就不做详细介绍了,代码有注释,不清楚的地方再联系我。
调试的图片.jpg
调试的图片2.jpg
调试的图片3.jpg
收藏 评论5 发布时间:2008-12-24 15:08

举报

5个回答
yunfei7370 回答时间:2009-1-10 13:57:26

谢谢!

楼主,怎么没工程啊!
kinto 回答时间:2009-2-5 08:57:53

RE:STM32学习笔记之—RTC

有没有程序示范一下?
kinto 回答时间:2009-2-5 09:01:53

RE:STM32学习笔记之—RTC

哥们,BLOG在哪里,能不能介绍一下
rainxrx 回答时间:2009-2-24 21:03:24

RE:STM32学习笔记之—RTC

??????????????
rushy 回答时间:2009-6-11 10:09:52

RE:STM32学习笔记之—RTC

写的不错,支持一下

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版