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);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值