STM32資料 開発編 1
地磁気センサーのライブラリを書いてみよう
今回からは実際にライブラリを書いてみる
基本的な情報は、すべてセンサーの会社が出しているデータシートに乗っているためそこを読むことになる
今回は、データシートが日本語で丁寧な説明のついている地磁気センサーを選んだので、頑張って書いてみよう
データシートの読み方
今回は実際のデータシートを見ながら、読み方を解説していく
使うデータシートはこちらになるので、適宜ダウンロードしておいてね
・BM1422AGMVのデータシート
必要な情報
データシートには製品の情報、回路設計、レジスタの情報などの様々なことが書いてあるが
コードを書くのに必要なことは、I2Cアドレスとレジスタの情報(アドレスと何を書き込む、読み取るか)のみである
実際に読んでみよう
今紹介した3つの要素を順番に探していく
I2Cアドレスを探してみよう
10ページ目の上にI2Cスレーブアドレスと書いてあるところがある
I2C通信では、通信を開始する方(STM32)をマスター、通信を受け取る方(センサー)をスレーブという
特定の端子の電圧によって値が変化するが、今回はADDR_Lのほうの値を使う
レジスタの値を探してみよう
10ページの下にレジスタマップと呼ばれる、すべてのレジスタの名前とアドレスをまとめたものがある
例えばWIAは0x0fレジスタに入っていることがわかる
レジスタの中身を探してみよう
たいていの場合、レジスタマップの上下に詳細なレジスタの説明が書かれている
例えばWIAは12ページの上から2番目の項目に書かれていて、0x41という値が帰ってくると書かれている
また、レジスタの3bit目に値を書き込みたいときは、ビットシフトという機能を使って
ずらすことで、enum classの値の設定がやりやすくなる
//レジスタに 1001 1000を書き込みたい
//設定1が4桁目の0b11 設定2が8桁目の0b1の場合それぞれをずらして足し算することができる
uint8_t command = 0b11 << 3 | 0b1 << 7; //0b11001000になる
実際にこのようにする場合は、設定1の値を0~3、設定2の値を0~1で定義しておけばよい
このように、ビットシフトを使うことで、レジスタの値を簡単に設定することができる
センサーの起動方法を調べよう
基本的には、電源の有効化、センサーの設定、値の取得という順番になる
このデータシートはとっても丁寧で、立ち上げのフローチャートを載せてくれてあるので、16ページを参考にしよう
書いてみよう
ここまでの情報をもとにクラスを書いてみよう
関数はWIA、Setting、GetDataを用意し、Settingはenum classで設定項目を指定しておこう
このセンサーはI2C通信しか対応していないが、練習のため仮想関数と継承も利用してみよう