RTC实时时钟

Posted 老虎不开窍

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RTC实时时钟相关的知识,希望对你有一定的参考价值。

STM32 的实时时钟(RTC)是一个独立的定时器。STM32 的 RTC 模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。

RTC 模块和时钟配置系统(RCC_BDCR 寄存器)是在后备区域,即在系统复位或从待机模式唤醒后 RTC 的设置和时间维持不变。但是在系统复位后,会自动禁止访问后备寄存器和 RTC,以防止对后备区域(BKP)的意外写操作。所以在要设置时间之前, 先要取消备份区域(BKP)写保护。

RTC主要由两个部分组成:

  1. APB1接口。用于连接APB总线。包含16位寄存器
  2. RTC核心。由一组可编程计数器组成。分为两个模块:1. 预分频模块。2. 32位可编程计数器模块。

RTC 内核完全独立于 RTC APB1 接口,而软件是通过 APB1 接口访问 RTC 的预分频值、计数器值和闹钟值的。但是相关可读寄存器只在 RTC APB1 时钟进行重新同步的 RTC 时钟的上升沿被更新,RTC 标志也是如此。这就意味着,如果 APB1 接口刚刚被开启之后,在第一次的内部寄存器更新之前,从 APB1 上读出的 RTC 寄存器值可能被破坏了(通常读到 0)。因此,若在读取 RTC 寄存器曾经被禁止的 RTC APB1 接口,软件首先必须等待 RTC_CRL 寄存器的 RSF位(寄存器同步标志位,bit3)被硬件置 1。

int main(void)

{            

    Stm32_Clock_Init(9);    //?μí3ê±?óéè??

    delay_init(72);            //?óê±3?ê??ˉ

    uart_init(72,9600);     //′??ú13?ê??ˉ?a9600

    LED_Init();                //3?ê??ˉó?LEDá??óμ?ó2?t?ó?ú

    LCD_Init();                //3?ê??ˉLCD

 

    usmart_dev.init(72);     //3?ê??ˉUSMART

 

    POINT_COLOR=RED;

    LCD_ShowString(30,50,200,16,16,"WarShip STM32 ^_^");

    LCD_ShowString(30,70,200,16,16,"USMART TEST");

    LCD_ShowString(30,90,200,16,16,"[email protected]");

    LCD_ShowString(30,110,200,16,16,"2012/9/7");

 

    while(1)

    {             

        LED0=!LED0;

        delay_ms(500);

    }

}

以上是关于RTC实时时钟的主要内容,如果未能解决你的问题,请参考以下文章

RTC实时时钟驱动

RTC实时时钟

SOC RTC时钟——为什么实时时钟的晶振都是32.768KHZ呢?

第43章 RTC—实时时钟

STM32-RTC实时时钟-毫秒计时实现

用stm32设计实时时钟用内部rtc好还是时钟芯片好