STM導入からLチカまで
1 STM32マイコンとは
STM32マイコンとは,ARMのコアを積んだとっても賢いマイコン.
また,ARM-Cortex-M3を積んでいて,自分たちに最も近いものがNucleoシリーズ.これが,STM32マイコン.今回は,NucleoをMbedとしての開発ではなくて,HALでSTM32としての開発をまとめる.エンコーダを読み,それをUARTで吐き出すなどである.
2 対象ソフトインストール
開発手順としては,STM32CubeMXというソフトで,対象マイコンとそのマイコンで使用するペリフェラルの設定を行い,そこからコードを排出する.そのコードの中をTrueStudioで編集・実行・デバッグをする.STMStudioというものも用いてデバッグを行う.
◆下記サイトより,STM32CubeMXをダウンロードする.
https://www.st.com/ja/development-tools/stm32cubemx.html
先に,ほかのソフトウェアもダウンロードしておく.
◆TrueStudioをダウンロード.
https://www.st.com/ja/development-tools/truestudio.html
◆STMStudioをダウンロード.
https://www.st.com/ja/development-tools/stm-studio-stm32.html
すべて要会員登録である.
インストールに際して,注意点などは特にない.
しいて言うならば,TrueStudioをインストール中に,ドライバのインストールが割り込んでくるので,OKしておくこと.
関連付けるかどうかは,任意でOK.
3 プロジェクトの作り方
STM32CubeMXとは,STM32はレジスタをユーザが操作して,制御することができるが,その設定部分を代わりにやってくれるもの.
STM32CubeMXを起動すれば”New Project”をクリックして,ウィンドウを呼び出す.その際に,初回もしくは環境によってはダウロードが発生する.
画面左上に”MCU Selector”と”Board Selector”があるので,”Board Selector”を選択.”MCU Selector”では,マイコンではなくCPU単体での開発になる.”Board Selector”であれば,ボードが使用しているST-LINKやLED,PCとのSerial部分のペリフェラルを事前に設定してくれているので,明示的にどのピンがデフォルトで使用中であるかがわかる.
今回は,諸事情によりNucle-F411REを用いた開発手順をまとめる.
まず,”Board Selector”で,F411REと入力.
出てきたボードをダブルクリックしてプロジェクトを作成する.その際に,ボードにデフォルトでついているペリフェラルを使うかどうかと聞かれるのでYesと回答しておく.
まずはLチカから.出てきた画面は,CPUの各ピンに役割を設定するためのツール.左側からいじれば,ペリフェラルごとに設定ができる.
それじゃ,まずは下のほうにあるPA5がGPIOに設定されていることを確認する.
普通にGPIOを設定するだけではなく,右クリックして”Enter user label”を選べば,ユーザでピンの名前を設定することができる.
なので今回は,以下のように設定してやってみる.
今回はボード上についているブルーボタンも使う.CPUの左側一番上にあるB!~~を使うが,GPIO_Inputに,名前もB1_Blueに変更しておく.
これは,CPUや各ペリフェラルのクロック数を設定する画面であるが,まあ,設定できるところは最大にしちゃってもいいが,大人になったら消費電力のことも考えて,最適な値になるようにしなくちゃいけない.今回はデフォルトのままで行う.
Configratinoでは,各ペリフェラルの詳細設定を行うが,今回は何もいじらないのでパスしておく.エンコーダを読むときになれば,設定することになるので,その時に細かく書いておく.
最後の画面である.ここでは,実際に生成するコードに関しての設定を行うことができる.
その前準備としてメニュータブのProjectから設定を呼び出す.
Project NameをEX1GPIOにしておく.Project Locationは任意の場所でOK.
Toolchain/IDEをTrueStudioで設定する.
ここで,もしもTrueStudio以外の状態でコードを生成した場合,不具合だと思うが,STM32CubeMXのプロジェクトも最初からやらないと行けなくなる.
Code Generationで.このようにチェックを付けておく(なんとなく便利だから).
こうすることで,本来だとmain.cに書かれるペリフェラルのinit関数をペリフェラルごとに分散してくれる.
最後にこれをクリックすることで,任意のディレクトリにコードを生成する.
そうしたら,TrueStudioを起動する.
4 コーディングの方法(Lチカを行う)
1 TrueStudioの使い方
TrueStudioを起動すれば,メニュータブのファイルをクリックして”Open project from filesystem”をクリックして,ディレクトリ-(D)をクリックして,STM32CubeMXで作成したプロジェクトのディレクトリへ移動する.
プロジェクトの名前がEX1GPIOなので,そのフォルダをクリックしてひらく.
この時にそのプロジェクトがあり,チェックが入っていることを確認したら終了をクリックする.
そしたら,プロジェクトが追加されるので,EX1GPIOの中のsrc直下のmain.cを開く.
あとは,whileの中のUSERCODEBEGIN~USERCODEENDまでにコードを書く.こういったものがいくつかあるが,範囲外に書くと,STM32CubeMXで再びコードを排出したときに,書いたコードが消えるので注意を.
main関数の外にグローバル関数として,ButtonStatusを宣言しておく.
/* USER CODE BEGIN 0*/ |
while内にこのように書く.
while (1) |
実行してみる.
トンカチマークでBuildして,虫のマークでデバッグを開始できる.
デバッグを開始して,デバッグを切って.
デバッグを押して,次はSTMStudioを使う.
2 STMStudioの使い方
STMTStudioを起動して,下記マークをクリックして,プロジェクトの.elfファイルを読み込む.
任意のディレクトリの中のDebugフォルダに.elfがあるので,それを読み込む.
するとこのように,出てくるので,この中からButtonStatusを探し出す.
ButtonStatusを見つけたらクリックして,右側のImportをクリックする.
ここに表示される変数は,すべてグローバル変数なので,モニタリングしたい関数はグローバルで宣言すること.また,宣言時に以下のように宣言すると,アドレスがおかしくなる.
int a, b, c; |
Importすると,このようにButtonStatusが移動する.
これを,ドラッグアンドドロップする.
すると下のほうにButtonStatusと出てくる.ここまで終われば,
これをクリックしてデバッグを開始する.
そして,ボードのボタンを押すと・・・
このように値が動いているのがわかる.
これで,STMStuioはいったん終了する.エンコーダを読むときにもう一度扱う.
また,ここのVar Viewew 1 asを設定すれば,Curb以外にbar graphとtableで値を視認することが可能である.
では次にGPIOをいじるので,TrueStudioに戻り,whileの中をこのようにする.
while (1) |
もう一度Buildして実行をする.
これでボタンを押すとボード上のLD2がボタンに合わせて点滅することが分かる.