码迷,mamicode.com
首页 > 其他好文 > 详细

RTC实时时钟

时间:2017-08-16 13:58:54      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:bdc   ring   同步   poi   设置   分组   功能   核心   一个   

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,"ATOM@ALIENTEK");

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

 

    while(1)

    {             

        LED0=!LED0;

        delay_ms(500);

    }

}

RTC实时时钟

标签:bdc   ring   同步   poi   设置   分组   功能   核心   一个   

原文地址:http://www.cnblogs.com/arthurtech/p/7372949.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!