UP

rtcについて

RTCはその機能の性格上システムリセットでは停止しない。普通すぐ気づくこと かも知れないが私がはまった事例を2つ:

事例1

例えばRTC_WakeUpClockConfigはRTCが止まっている状態で実行しないと いけないが「ま、プログラムの始めの辺りでまだRTCは起動してないから 停止の命令は必要ないだろう」と思っていると1度目のRUNはいいのだがその後 プログラムを書き直してもう1度RUNすると1度目のRUN以降RTCは 動きっぱなしなのでRTC_WakeUpClockConfigは機能しない。 また実際の使用時でも再リセット後はダメ。 なのでプログラムの最初のほうに書くときでも前にRTC_WakeUpCmd(DISABLE)が 必要。

事例2

RTCをまったく使わないプログラムを書いて実行したところRTC_WakeUp の割り込みが発生し割り込みルーチンにトラップされてしまう (割り込みルーチンには何も書いてないから割り込みフラグが クリアされない)。何故?と思ったがこれはその前にRTC_WakeUp の割り込みを使うプログラムを書いて実行したあとだったからで、 それ以来RTC周りが動きっぱなしだったのだ。プログラムを書き換えた あと一度USBコネクタを 抜いてパワーオンリセットしておけばよかった。

参考

RM0031
リファレンスマニュアル
STM8L15x および STM8L16x マイクロコントローラファミリ

24.1  概要
,,,,
電源電圧が動作範囲内にある限り、RTC は、MCU の状態(Run モード、
低電力モード、またはリセット中)に関係なく、停止することはありません。

24.5  RTC のリセット
,,,,
逆に、RTC の現在のカレンダレジスタおよび制御レジスタ(RTC_CRx)、
プリスケーラレジスタ(RTC_SPREx および RTC_APRE)、ウェイクアップ
タイマレジスタ(RTC_WUTRx)、およびアラーム A レジスタ(RTC_ALRMASSRx
 および RTC_ALRMARx)は、パワーオンリセットによってのみ、デフォルト値に
リセットされます。システムリセットではリセットされません。

さらに、RTC クロックが CLK_CRTCR クロックコントローラレジスタで有効に されると、RTC はリセット中も動作を続行します(リセットソースが パワーオンリセット以外の場合)。 ,,,,



mm@ils.uec.ac.jp