1. 程式人生 > >RTC實時時鐘

RTC實時時鐘

str 曾經 讀取 待機 區域 連續 lock 配置系統 系統

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實時時鐘