次はSTM32ボードを積極的に使ていきたい(20) BKPの利用
このシリーズのパート20、今回はBKP(Backup register)の利用についてです。
Blue Pill(STM32F103C8T6)では、バックアップ・ドメイン領域と呼ばれる領域に、
ユーザーが自由に利用出来る20バイトのメモリがあります。
このBKPは、ボード上のリセットボタンを押してもデータは消えません。
さらに、VBATにボタン電池等での電源バックアップがあれば、ボードの電源を落としても
データは保持されます。
具体的な使い方は次のようなスケッチとなります。
// // stm32_BKP_exsample.ino (for Arduino STM32) // BKP利用サンプルプログラム by たま吉さん // バックアップドメインのメモリ10ワード(20バイト)を利用するデモです. // バックアップドメインのメモリの性質 // 1)リセットしてもデータは保持される // 2)さらにバッテリーバックアップ有りの場合、電源OFFでのデータが保持される // #include <libmaple/bkp.h> void setup() { Serial.begin(115200); while (!Serial.isConnected()) delay(100); bkp_init(); // BKPの初期化 Serial.println("[Menu] 1:Write 2:Read"); } void loop() { uint8_t InputChar; if (Serial. available()) { switch(Serial.read()) { case '1': Serial.println("Write data."); bkp_enable_writes(); // 書込み可能にする for (uint16_t reg=1; reg <= BKP_NR_DATA_REGS; reg++) { bkp_write(reg, reg-1); // データの書込み Serial.print("DR"); Serial.print(reg,DEC); Serial.print("="); Serial.println(reg-1,DEC); } bkp_disable_writes(); // 書込み禁止にする break; case '2': Serial.println("Read data."); for (uint16_t reg=1; reg <= BKP_NR_DATA_REGS; reg++) { Serial.print("DR"); Serial.print(reg,DEC); Serial.print("="); Serial.println(bkp_read(reg),DEC); // データの読み込み } break; } } }
上記のスケッチはメニュー選択で、テストデータを書いたり読んだりしています。
書込み後、リセットボタンを押して再度スケッチを起動してデータを読むと
その内容が保持されていることが確認出来ます。
さらに電池によるバックアップをして、電源を切ってみてもデータが
保持されていることが確認できると思います。
ボタン電池を使ったバックアップ回路
保存出来るデータ量は少ないですが、
EEPROMエミュレーションライブラリを使うよりもお手軽です。
システム設定の保持やゲームのハイスコアの保持等に使えるでしょう。
BKPの利用方法の詳細については、下記にまとめました。
Backup register (BKP) suport (bkp.h) バックアップ・レジスタの利用
最近のコメント