pdf

STM32F单片机的RTC校准功能介绍

  • 1星
  • 日期: 2013-08-11
  • 大小: 71.11KB
  • 所需积分:1分
  • 下载次数:3
  • favicon收藏
  • rep举报
  • free评论
标签: STM32F

STM32F

STM32

STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。按性能分成两个不同的系列:STM32F103“增强型”系列和STM32F101“基本型”系列。增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。

在STM32里面有备份寄存器(BKP),它的功能之一就是用来存储RTC校验值的校验寄存器,即具有RTC校准功能。在PC13引脚上输出RTC校准时钟,RTC闹钟或者秒脉冲。在程序中有#define  RTCClockOutput_Enable  /*RTC  Clock/64  is  output  on  tamper  pin(PC.13)*/

BKP可以用来存储84个字节的用户应用程序数据,他们处在备份域里,当Vdd电源被切断时,他们仍然由Vbat维持供电。

判断RTC后备寄存器1的值是否为事先写入的某个值,如果不是,则说明RTC是第一次上电,需要配置RTC。针对BKP也有相应的库函数。

u16  BKP_ReadBackupRegister(u16  BKP_DR)  从指定的后备寄存器中读出数据

如果不是之前写入的某个值,需要配置RTC,函数RTC_Configuration(void)

执行以下操作将使能对后备寄存器和RTC的访问:

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

2,设置寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问。

相对应的程序:

1.RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR  |  RCC_APB1Periph_BKP,  ENABLE);//对应操作1

2.PWR_BackupAccessCmd(ENABLE);//对应操作2

RTC模块用外部LSE时钟--32.768的晶振作为时钟,由寄存器控制启动和关闭,然后等待状态稳定后,寄存器指示LSE晶振振荡器是否稳定。

1.RCC_LSEConfig(RCC_LSE_ON);//使能LSE

2./*  等待外部晶振震荡稳定输出  */

3.while  (RCC_GetFlagStatus(RCC_FLAG_LSERDY)  ==  RESET)

4.{}

待LSE状态稳定后,使用外部32.768KHz晶振作为RTC时钟,由库函数RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE)实现:

1.RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);  //使用LSE作为RTC时钟

2.RCC_RTCCLKCmd(ENABLE);  //使能RTC,只有在通过RCC_RTCCLKConfig选择RTC时钟后,才能调用

1.RTC_WaitForSynchro();//等待RTC寄存器与APB时钟同步??

2./*  Wait  until  last  write  operation  on  RTC  registers  has  finished  */

3.RTC_WaitForLastTask();

4./*  使能RTC的秒中断  */

5.RTC_ITConfig(RTC_IT_SEC,  ENABLE);//在使能中断前,必须调用RTC_WaitForLastTask();

1.RTC_SetPrescaler(32767);//设置RTC的预分频值

RTC_WaitForLastTask(  )的作用:软件通过APB1接口访问RTC的预分频值、计数器值等,但是,相关的可读寄存器只在与RTC  APB1时钟进行重新同步的RTC时钟的上升沿被更新。RTC标志也是如此。这意味着如果APB1接口曾经被关闭,而读操作又是在刚刚重新开启APB1之  后,则在第一次的内部寄存器更新之前,从APB1上读出的RTC寄存器数值可能已经被破坏了。因此,若在读取RTC寄存器时,RTC的APB1接口曾经处  于禁止状态,则软件必须等待RTC_CRL寄存器中的RSF位(寄存器同步标志)被硬件置‘1’。

在RTC读取的数据是之前写入到BKP中的数据,那么会调用函数RCC_GetFlagStatus()读取状态/控制寄存器RCC_CSR中的某些位来判断启动后的状态,判断掉电/上电复位标志或者复位标志,如果相应的标志位为1,则不需要从新配置RTC。

最后清除RCC的复位标志位,void  RCC_ClearFlag(void)

在设置了秒中断后,在stm32f10x_it.c中设置了中断处理函数,中断函数中首先需要判断是否发生了秒中断,如果是,需要清除相应的中断标志位。还有一个重要的情况是在时间达到23:59:59时,则下一时刻时间为00:00:00。

1.if  (RTC_GetCounter()  ==  0x00015180)  //获取RTC计数器的值

2.RTC_SetCounter(0x0);//设置RTC计数器的值

通过读取RTC计数器的值,可以将其转化为时:分:秒的形式打印出来。  同时,如果RTC是第一次被配置,用户需要输入时间,然后调用Time_Adjust(  )将用户输入的时间转化到RTC计数值写到相应的寄存器中。

更多简介内容

推荐帖子

评论

coolwyl
好啊. 需要这个文档.
2013-12-07 21:18:41回复
登录/注册

意见反馈

求资源

回顶部

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版 版权声明

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
$(function(){ var appid = $(".select li a").data("channel"); $(".select li a").click(function(){ var appid = $(this).data("channel"); $('.select dt').html($(this).html()); $('#channel').val(appid); }) })
×