×
单片机 > 单片机程序设计 > 详情

STM32f103--RTC

发布时间:2020-08-25 发布时间:
|
     备注:这是自己参考书的笔记,为能在以后更快的做配置

一   RTC 的三个专门的可屏蔽中断 :

      1报警中断:软件可编程的报警中断  (相当于一个RTC的比较中断,详细:第三部分注释1) 

       2秒中断:可编程的周期性中断

       3溢出中断:检测内部编程计数器溢出的中断信号。

 二  两个独立的复位

      1   APB1接口由系统复位    

      2    RTC  核复位  由备份域复位         

三  RTC的重要组成部分     

      1   APB1系统时钟

      2    RTC核 部分分为两个模块: 第一个模块RTC预分频包含了一个20位的可编程预分频器,可

           编程产生最长为1S的RTC基准TR_CLK。( RTC_DIV和RTC_PRL 寄存器)

      3   第二个模块是可编程计数器,可被初始化当前系统时钟(RTC_CNT)。

         (  注1:系统时间一基准TR_CLK计数,若RTC_CR寄存器设置相应允许位,RTC_ALR设置可编

                   程时间比较值,则在RTC_CNT与RTC_ALR相等的情况下产生报警中断,溢出中断和秒中

                   断设置使能位就行了,很好理解的。)

四   两个单独的时钟:

       1 APB1接口的PCLK时钟。

        2 RTC基准时钟(RTC时钟必须小于1/4PLCK1)

 

五  操作RTC寄存器

    1    RTC寄存器的复位:PRL  ALR CNT DIV 仅通过备份域复位,此外的由时钟和电源复位

    2   读RTC寄存器:   由于相关的寄存器只有在RTC时钟的上升沿才有效更新,这意味着APB1接口

                                    开启后通过APB1读取的值因RTC寄存器还未及时更新而出现错误,

                                    有以下几种情况特别注意:

                                                              1发生了系统复位和电源复位

                                                               2系统从待机模式下唤醒

                                                               3 系统从停机模式下被唤醒

                                     这几种情况下APB接口是被禁止的,RTC核仍在运行的状态,那么在这些情况下我们要先

                                     等到RSF位复位被置1。

    3  RTC寄存器配置: 1   查询,仅当RTOFF位,被置1才可以向RTC寄存器写入新值。

                                    2   置CNF为1 ,进入配置模式。才能写RTC—PRL  RTC—ALRRTC—CNT RTC—DIV

                                    3  清除CNF,退出配置模式;

                                    4   查询RTOFF位是否为1,以确认最后的写结束了。

 

  4 相关标志位的写操作:RTC标志位会在情况满足的情况下会自动置位,对于报警和秒中断的标志位可通过如下写操作

                                  1 使用RTC报警中断,在RTC中断处理程序中对RTC报警/RTC_CNT修改.

                                  2等待RTC控制寄存器中的SECF被设置了,RTC报警/RTC_CNT修改           

 

 

实例配置

     /*******************************************************************************
* Function Name  : RTC_Configuration
* Description    : PTC_clclk 
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void RTC_Configuration (void)
{
  /*配置RTC时钟源*/
  /* 允许访问BKP*/
 PWR_BackupAccessCmd(ENABLE); 
 /*复位备份域*/
 BKP_DeInit();
 /*允许LSE*/
 RCC_LSEConfig(RCC_LSE_ON); 
 /*等待LSE有效*/
 while (RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET) ;
 /*选择LSE做为RTC时钟 */
 RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); 
 /*允许RTC时钟*/
 RCC_RTCCLKCmd(ENABLE); 

 /*配置RTC*/
 /*等待RTC APB同步*/
 RTC_WaitForSynchro(); 

 /*预分频值为1s*/

 RTC_SetPrescaler(32767); 

 /*等待最后一条写指令完成*/

 RTC_WaitForLastTask(); 

 /*允许RTC报警中断*/
 RTC_ITConfig(RTC_IT_ALR, ENABLE); 

 /*等待最后一条写指令完成*/
 RTC_WaitForLastTask(); 



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
8051单片机的函数发生器的设计