STM32F103xx(RTC)

RTC clock和RTC APB1 clock的异步问题

介绍

RTC (real-time clock)是一个独立的计时器。有了RTC提供的连续运行的计数器,通过一定的软件方法可以提供时钟日历功能。计数器计数值可以设置。RTC的内核和时钟配置在备份区域,不受芯片复位或休眠模式的影响。复位后,备份区域的备份寄存器和RTC是禁止访问的,需要通知设置PWR_CR来允许访问。

特点

分频因数高达2的20次方

32bit计数值

两个独立的时钟:总线时钟和外部时钟源

RTC时钟源可选

两种独立的复位方式:接口复位和内核复位分离

三个可屏蔽的中断线:报警中断,秒钟中断,溢出中断

功能描述

概述

RTC主要由两部分组成:总线接口和内核。总线接口包括一些16bit寄存器。内核包括一些可编程分频器和计数器

寄存器复位

RTC_PRL, RTC_ALR, RTC_CNT, and RTC_DIV位于备份区不随系统复位或电源复位而复位

读寄存器

寄存器配置

寄存器标志位

应用笔记

/**
  * @brief  Waits until the RTC registers are synchronized with RTC APB clock.
  * @note   The RTC Resynchronization mode is write protected, use the
  *         @ref LL_RTC_DisableWriteProtection before calling this function.
  * @param  RTCx RTC Instance
  * @retval An ErrorStatus enumeration value:
  *          - SUCCESS: RTC registers are synchronised
  *          - ERROR: RTC registers are not synchronised
  */
ErrorStatus LL_RTC_WaitForSynchro(RTC_TypeDef *RTCx)
{
    __IO uint32_t timeout = RTC_SYNCHRO_TIMEOUT;
    ErrorStatus status = SUCCESS;
    uint32_t tmp = 0U;

    /* Check the parameter */
    assert_param(IS_RTC_ALL_INSTANCE(RTCx));

    /* Clear RSF flag */
    LL_RTC_ClearFlag_RS(RTCx);

    /* Wait the registers to be synchronised */
    tmp = LL_RTC_IsActiveFlag_RS(RTCx);
    while ((timeout != 0U) && (tmp != 0U))
    {
        if (LL_SYSTICK_IsActiveCounterFlag() == 1U)
        {
            timeout--;
        }
        tmp = LL_RTC_IsActiveFlag_RS(RTCx);
        if (timeout == 0U)
        {
            status = ERROR;
        }
    }

    return (status);
}

 

你可能感兴趣的:(C语言,STM32F10X)