RTC實時時鐘
STM32 的實時時鐘(RTC)是一個獨立的定時器。STM32 的 RTC 模塊擁有一組連續計數的計數器,在相應軟件配置下,可提供時鐘日歷的功能。修改計數器的值可以重新設置系統當前的時間和日期。
RTC 模塊和時鐘配置系統(RCC_BDCR 寄存器)是在後備區域,即在系統復位或從待機模式喚醒後 RTC 的設置和時間維持不變。但是在系統復位後,會自動禁止訪問後備寄存器和 RTC,以防止對後備區域(BKP)的意外寫操作。所以在要設置時間之前, 先要取消備份區域(BKP)寫保護。
RTC主要由兩個部分組成:
- APB1接口。用於連接APB總線。包含16位寄存器
- 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實時時鐘