STM32F103xx(RTC)

1903 ワード

RTC clockとRTC APB 1 clockの非同期問題

紹介する


RTC(real-time clock)は独立したタイマーです.RTCが提供する連続運転のカウンタがあり、一定のソフトウェア方法でクロックカレンダー機能を提供することができる.カウンタカウント値は設定できます.RTCのカーネルとクロックは、チップリセットやスリープモードの影響を受けないバックアップ領域に配置されています.リセット後、バックアップ領域のバックアップレジスタとRTCはアクセス禁止であり、PWR_の設定を通知する必要があるCRはアクセスを許可します.

特長


分周係数が2までの20乗
32 bitカウント値
2つの独立したクロック:バスクロックと外部クロックソース
RTCクロックソースオプション
2つの独立したリセット方式:インタフェースリセットとカーネルリセット分離
3つのシールド可能な中断線:アラーム中断、秒中断、オーバーフロー中断

機能の説明


概要
RTCは主にバスインタフェースとカーネルの2つの部分から構成されている.バスインタフェースには、いくつかの16 bitレジスタが含まれています.カーネルにはプログラマブル分周器とカウンタが含まれています
レジスタリセット
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);
}