RTC 时钟与 BKP 寄存器
1. RTC 概述
- RTC(实时时钟)用于提供 持续运行的时间信息,即使在设备断电的情况下,也可以通过备用电源维持运行。
- 适用于需要时间记录的应用,如日历、闹钟等。
2. BKP 寄存器
- BKP(备份寄存器)提供了一组掉电保持的数据存储区域。
- 可用于存储需要在断电后保留的数据。
3. RTC 配置步骤
- 使能备份域访问权限。
- 配置 RTC 时钟源:通常为外部低速晶振(LSE)。
- 等待 RTC 寄存器同步。
- 设置 RTC 初始时间。
4. 示例:配置 RTC 并读取时间
// 初始化 RTC
void RTC_Init(void) {
// 1. 使能 PWR 和 BKP 时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
// 2. 允许访问备份域
PWR_BackupAccessCmd(ENABLE);
// 3. 重置备份域
BKP_DeInit();
// 4. 启用 LSE
RCC_LSEConfig(RCC_LSE_ON);
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);
// 5. 设置 RTC 时钟源为 LSE
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
// 6. 启用 RTC 时钟
RCC_RTCCLKCmd(ENABLE);
// 7. 等待 RTC 寄存器同步
RTC_WaitForSynchro();
// 8. 配置 RTC
RTC_InitTypeDef RTC_InitStructure;
RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
RTC_InitStructure.RTC_SynchPrediv = 0x00FF;
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
RTC_Init(&RTC_InitStructure);
// 9. 设置时间
RTC_TimeTypeDef RTC_TimeStructure;
RTC_TimeStructure.RTC_Hours = 12;
RTC_TimeStructure.RTC_Minutes = 0;
RTC_TimeStructure.RTC_Seconds = 0;
RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure);
}
// 获取当前时间
void RTC_GetTime(void) {
RTC_TimeTypeDef RTC_TimeStructure;
RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
// 使用 RTC_TimeStructure.RTC_Hours, RTC_Minutes, RTC_Seconds
}
Comments NOTHING