原创 [原创] MINI-STM32 开发板入门教程 (十) RTC 实时时钟

2009-8-24 23:36 2511 4 4 分类: MCU/ 嵌入式
版权所有 麦思网 原创,转载请保留出处
http://www.mystm32.com/bbs/viewthread.php?tid=283extra=page%3D1

[原创] MINI-STM32 开发板入门教程 (十) RTC 实时时钟

(一) STM32 RTC 实时时钟概要
STM32内部RTC功能非常实用,它的供电和时钟是独立于内核的,可以说是STM32内部独立的外设模块,有加上RTC内部寄存器不受系统复位掉电的影响,我们可以才用外部电池供电和32768表振晶体来实现真正RTC(实时时钟)功能。

这里引用手册里一段概述:

RTC由两个主要部分组成。第一部分(APB1接口)用来和 APB1总线相连。此单元还包含一组 16位寄存器,可通过 APB1总线对其进行读写操作。APB1接口以 APB1总线时钟为时钟,用来与 APB1总线接口。

另一部分(RTC核)由一系列可编程计数器组成,分成两个主要模块。第一个模块是 RTC的预分频模块,它可编程产生最长为 1秒的 RTC时间基准 TR_CLK。RTC的预分频模块包含了一个 20位的可编程分频器(RTC预分频器)。在每个TR_CLK周期中,如果在 RTC_CR 寄存器中设置了相应允许位,则 RTC产生一个中断(秒中断)。第 2个模块是一个 32位的可编程的计数器,它可被初始化为当前的系统时间。系统时间以 TR_CLK速度增长并与存储在 RTC_ALR寄存器中的可编程的时间相比较,如果 RTC_CR控制寄存器中设置了相应允许位,则比较匹配时将产生一个闹钟中断。

attachimg.gif 点击看大图
下载 (66.99 KB)

1 小时前


attachimg.gif 点击看大图
下载 (67.56 KB)

1 小时前




(二) 程序编写
(1) 系统启动后检查RTC是否已设置。由于RTC在BKP区域,当Vdd掉电之后可由后备电源提供电源,当后备电源连接到针脚VBAT上时,RTC的设置不会由于外部电源的断开而丢失。在本例中写一个值到BKP_DR1中以标示RTC是否已配置,在启动之后程序检查BKP_DR1的值。
(2)  若BKP_DR1的值不正确:(BKP_DR1的值有误或者由于是第一次运行值还未写进去),则需要配置时间并且询问用户调整时间。
(3) 若BKP_DR1的值正确,则意味着RTC已配置,此时将在超级终端上显示时间。
(4) 整个工程包含3个源文件:STM32F10x.s、stm32f10x_it.c和main.c,其中STM32F10x.s为启动代码,所有中断服务子程序均在stm32f10x_it.c中,其它函数则在main.c中。下面分别介绍相关的函数,具体程序清单见参考程序。
函数RTC_IRQHandler用于处理秒中断事件,在每次遇到23:59:59时将时钟回零。
函数RTC_Configuration用于配置RTC模块。
函数USART_Scanf用于从PC超级终端中获取数字值,Time_Regulate利用函数USART_Scanf从超级终端获取新的RTC时间值,函数Time_Adjust则利用函数USART_Scanf设置新的RTC时间。函数Time_Display和Time_Show用于将RTC时间转换了字符串送往USART1。
源文件其他函数,例如GPIO、RCC、NVIC、USART的配置,在此不作冗述。


(三) 仿真调试

(1) 使用Keil uVision3 通过ULINK 2仿真器连接实验板,打开实验例程目录Example10-RTC子目录下的RTC.Uv2例程,编译链接工程;
(2) 使用STM32开发板附带的串口线,连接开发板上的COM0和PC机的串口;
(3) 在PC机上运行Windows自带的超级终端串口通信程序(波特率115200、1位停止位、无校验位、无硬件流控制);或者使用其它串口通信程序;
(4) 选择硬件调试模式,点击MDK的Debug菜单,选择Start/Stop Debug Session项或Ctrl+F5键,远程连接目标板并下载调试代码到目标系统中;
(5) 例程正常运行之后会在超级终端显示以下信息:
麦思网原创教程
www.mystm32.com/bbs
MINI-STM32  STM32F103RBT6 RTC

RTC not yet configured....
RTC configured....
============TimeSettings===================
  Please Set Hours:
在PC机上依次输入时钟、分钟、秒钟之后每隔1秒在超级终端上显示一次时间:
  Please Set Hours:  12
  Please Set Minutes:  0
  Please Set Seconds:  0
Time: 12:00:00

(6) 程序正常运行并在开发外部电源保持的情况下,按下Reset按钮,PC超级终端上将继续显示正常时间:
External Reset occurred....
No need to configure RTC....
Time: 12:03:09
(7) 程序正常运行时断开开发板外部电源,然后重新接上外部电源,PC超级终端上也将继续显示正常时间:
Power On Reset occurred....
No need to configure RTC....
Time: 12:05:57

(8) 取下处理器板上的纽扣电池,并断开外部电源,然后重新接上外部电源,PC超级终端上将无法继续正常显示时间,PC超级终端将出现第(5)步所出现内容。
(9) 也可采用软件调试模式,利用USART窗口来模拟实现COM0的输入和输出。



请参考下图: 你需要在超级终端中敲击按键来设置时钟.


attachimg.gif 点击看大图

基于 MDK 3.5 工程下载:


http://www.mystm32.com/bbs/viewthread.php?tid=283&extra=page%3D1

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /2 下一条