微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32学习之路(五)——RTC系统时钟

STM32学习之路(五)——RTC系统时钟

时间:12-02 来源:互联网 点击:

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,比较有意思的一段小视频。重点看后面的时间是按秒更新的。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top