STM32のバックアップレジスタ

バックアップレジスタとは?

  • STM32マイコンには主電源(Vdd)を落としてもバックアップ電源(Vbat)で値が保持されるバックアップレジスタがある。
  • 一種の不揮発性メモリとして利用できる。
  • ただし容量は、マイコンの型番によるが20〜128バイト程度しかない。(STM32F401REで20×4=80バイト)
  • フラッシュメモリより書き換えが容易・高速で、当然ながら書き換え回数の限度が無い。
  • バックアップレジスタはRTC(リアルタイムクロック)に属している。
  • しかし、とくにRTCの機能とは関係なく自由に使える。
  • ちょっとした設定の保持とかに便利。



HALドライバでの使い方

  • HALドライバにはバックアップレジスタにアクセスするための関数が用意されている。
  • RTCに属するレジスタのため、RTCの初期化を最初におこなう。
  • じつはレジスタを直接叩いたほうが楽かも…
  • RTC_BKP_DR0, RTC_BKP_DR1, RTC_BKP_DR2...という番号でレジスタを指定する。
  • CubeMXでコードを生成すると、RTCの初期化処理で RTC_BKP_DR0 が使用される。
  • したがってCubeMXを使用する場合、ユーザーが自由に利用できるのは、RTC_BKP_DR1以降となる。


【初期化】

// CubeMXでは初期化コードは自動生成される

// RTCのハンドル
RTC_HandleTypeDef hrtc;

// RTCの初期化
hrtc.Instance = RTC;
(中略)
HAL_RTC_Init(&hrtc); // バックアップレジスタを使うだけなら不要?

【読み出し】

// RTC_BKP_DR1の値を読み出す
uint32_t data = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR1);

【書き換え】

// RTC_BKP_DR1の値を0x5A5Aに書き換える
uint32_t data = 0x5A5A;
HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR1, data);