STM32学习之路(五)——RTC系统时钟
在STM32的CPU有一个RTC引脚,用于连接电池。当系统掉电后,自动由电池给RTC供电,完成时间计数。
对RTC的访问是通过APB1接口进行的。APB1刚被开启的时候,从APB1读来的RTC寄存器的第一个值可能是被破坏了的。因此在程序中,先等待RTC_CRL寄存器中的RSF位被硬件置1,然后才开始读操作。对于写操作,在每一次写操作必须保证前一次写操作完成,即通过查询RTC_CR寄存器中的RTOFF状态位,判断RTC寄存器是否处于更新状态中。只有当RTOFF状态位是1,才可以写RTC寄存器。
RTC模块的寄存器实际上只有5个:控制寄存器RTC_CR,预分频装在寄存器RTC_PRL,预分频余数寄存器RTC_div,计数器寄存器RTC_CNT,闹钟寄存器RTC_ALR。
第一次配置需要做的工作包括:
1.打开电源管理和备份寄存器时钟。注意一定要打开备份寄存器时钟。正是通过备份寄存器写固定的数据来判断芯片是否是第一次使用RTC,从而在系统运行时提示配置时钟。
2.使能RTC和备份寄存器的访问(复位默认是关闭的)。
3.选择外部低速晶体为RTC时钟,并使能时钟。
4.使能秒中断。程序里在秒中断里置位标志位来通知主程序显示时间数据,同时在32位计数器到23:59:59时清零。
5.设置RTC预分频器,产生1秒信号计算公式。FTR_CLK=FRTCCLK/(PRL+1)设置32767产生秒信号。
通过RTC_GetConter();获取计数值,然后把这个计数值分别用小时、分钟、秒来表示,最后还需要调用Printf函数把它显示在超级终端窗口或相应的其它显示函数。
效果图见http://v.youku.com/v_show/id_XNTk5MTM4MjY4.html,比较有意思的一段小视频。重点看后面的时间是按秒更新的。
STM32RTC系统时 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)