(2019.5.6 作成)
(2019.5.11 更新)
このページではSTマイクロから新しく出た統合開発環境: Cube IDEについて紹介したいと思います。これまでいくつかのフリーの開発環境を使用してきましたが、STマイクロ謹製のIDEが出たということでこれからはこのIDEが中心になっていくかもしれません。
現在はVer1.0.0なので今後改良されるかもしれませんが、現在はフリーの汎用IDEであるEclipseにコード作成ソフトCubeMXを合体させたようなものでした。このCubeMXですがコードの雛形が作成されるので、便利ではあるのですが、管理人の個人的な見解として作成される雛形の再利用性が低く、可読性も低いのであまり使用したくはありません。
しかしSTマイクロ謹製ということから今後主流になっていくと思いますので、まずはこのCubeMXで作成されるコードを使用してこちらで紹介している安価なSTM32マイコン基板(STM32F103C8T6)でLチカを行う方法を紹介したいと思います。
なおSTマイクロさんが作成している以下の動画はとても分かりやすいので、合わせて見ていただけるとよいと思います。
インストールについては特に悩むことはないと思います。こちらからダウンロードしてインストールするだけです。ただ、事前にこちらからCubeMXをダウンロードしてインストールもしくはCubeMXのアップデートをしておいた方がいいかもしれません。管理人の場合だけかもしれませんが少し混乱しました。
また、初回起動時にworkspaceの設定などが聞かれますが、適当なフォルダに設定してください。
ここから先はGUIがわかりやすく作られているので、エィエィ!と作ってゆくだけです。以下の画像はクリックすると拡大するので、参考にしてみてください。
まずは起動したらStart new STM32 projectを選択します。
今回使用しようとしているマイコンSTM32F103C8を選びます。
プロジェクトに適当に名前を付けます。この際Target Project TypeでSTM32Cubeを選ぶとCubeMXでのコード生成が使えます。
この際に一つの注意点として、今後修正されると思いますがLocationはデフォルトのワークスペースにしなければうまく動きませんでした。
一方TypeでEmptyを選べばワークスペースはどこでもよさそうです
次に使用するライブラリの設定です。CubeMXのバージョンが最新であれば最新のリポジトリが自動で選択されていると思います。
またoptionですがデフォルトのCopy~~ではなく、管理人の場合 Add ~~ を選んでいます。この方が少しだけディスクスペースが節約できます。
Finishを押すと右の画面になるので、必要なPeripheralを使えるようにします。
今回は単にLチカなので以下の変更を行います。その他の機能はすべて使用しません。RCC、SYSは左のペインから設定するのですが、GPIOは右のチップの画像の端子部分をクリックして設定ます。
Peripheralの設定が終わったらClock configurationのタブを選択してクロックを右図のように設定します。今回は最大周波数で動作するように設定しました。
ここまで設定できればあとはProject → Generate codeを押すとコードの雛形が作成されます。
ここまでくればあとは簡単なテストコードを入力して実行するだけです。左のペインからmain.cをえらんでmain関数内のwhileループ内に以下のコードを記入します。
HALライブラリを利用しているので入力はたった2行だけです。
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
HAL_Delay(100);
Port名とPin名はLEDに接続されたピンの名前です。それぞれGPIOC, Pin13になります。
最後に中華ST-Link経由でマイコン基板に接続してを接続して、プロジェクトを右クリック → Debug As → STM32~~~
をクリックするだけで簡単にLチカができました。
SW4STM32と比べるといくつか良い点がありました。
一つは 実行すると画面にメモリやFlashの使用量が表示される点です。SW4STM32でもリンカオプションで表示できたのですが、自動でできるのでこれは便利です。
また2つ目の点としてこの中華ST-Linkを使用する際にバージョンアップが必要だったのですが、このバージョンアップのせいかリセット条件を変更する必要がありませんでした。
Lチカ程度の簡単なプログラムでは特に迷うことももなく簡単に使用することができました。STマイクロさん謹製ということもあり、不具合があってもすぐに修正されると期待できるのでまずはメインのIDEととらえてよいのではないでしょうか?