2:NUCLEO-F042K6にL3GD20をつなげて動作確認する

NUCLEO-F042K6 開発ボードに角速度センサーL3GD20をつなげて動作確認します。
STM32 Nucleo Board STM32F042K6T6

秋月電子で購入したものです。
これにジャイロセンサーL3GD20が搭載されたモジュールをつなげます

これも秋月で購入できます。


この2つの基板をSPI接続します。

まず、STMCubeMXでひながたを作成します。

SPI1を有効にしてPA4をDOとしてこれをCS信号とします。


Data Sizeは8、Prescalerは8、NSSPをdisableにします。


Tool ChainにTrueStudioを選択してひな形を生成します。


生成されたコードをみるとSPIとGPIOの初期化部分が記述されています。

PA4,PA5,PA6,PA7をつかうことがわかったのでブレッドボードで接続します。


SPI関連の配線以外に電源も接続しておきます。

Nucleo側のコードはGithubに流用できそうなコードがあったのでこれを流用します。
https://github.com/sjgallagher2/MEMS-USB
ダウンロードしたファイルのうち
L3GD20.h, L3GD20.c をプロジェクトファイルにコピーします。


L3GD20.hをインクルードします。


L3GD20.h内のピンの割り当て部分を変更します。今回CS信号はPA4を使います。

上のコードは通信確認用のものでデバイスの値0xd4が得られます。
whoami_buf[1]の内容が0xd4 となります。


mainのwhile ループ内は上の容器記述します。
L3GD20_GetAngularRate_X(),L3GD20_GetAngularRate_Y(),L3GD20_GetAngularRate_Z()
で角速度の値を取得することができます。
この関数内でCS信号のコントロールもしてくれるので、この関数を呼ぶだけでOKです。

デバッグ実行し、変数の内容を確認すると角速度に応じて値が変わるのが確認できます。

CTRL_REG4はデフォルトのままなので、感度は一番よくなっています。


CTRL_REG4のFS0,FS1を変更することによって感度をかえることができます。