STM32F103xx(RTC)
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はバックアップエリアにあり、システムリセットまたは電源リセットに伴ってリセットしない
リードレジスタ
レジスタ構成
レジスタフラグビット
紹介する
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);
}