stm32-RTC 实时时钟与BKP 寄存器

发布于 3 天前  37 次阅读


RTC 时钟与 BKP 寄存器

1. RTC 概述

  • RTC(实时时钟)用于提供 持续运行的时间信息,即使在设备断电的情况下,也可以通过备用电源维持运行。
  • 适用于需要时间记录的应用,如日历、闹钟等。

2. BKP 寄存器

  • BKP(备份寄存器)提供了一组掉电保持的数据存储区域。
  • 可用于存储需要在断电后保留的数据。

3. RTC 配置步骤

  1. 使能备份域访问权限
  2. 配置 RTC 时钟源:通常为外部低速晶振(LSE)。
  3. 等待 RTC 寄存器同步
  4. 设置 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
}

最后更新于 2024-11-17