2018万年準備中のブログアマチュア無線とくに長波(136kHz)帯運用の実戦記とマイコンプログラミング、電子工作などを中心にイベント頒布情報(2020.2.7更新)技術的応談のポリシー(2018.5.23更新)2018年3月21日水曜日STM32CubeMXの導入とSTM32プログラミング開始STM32はCortex-MなどARMベースのマイコンで、高性能で安価なmbed対応のNucleoの出現に加え、mcHFやCentSDRなどスタンドアロンなSDRに採用されており、開発上非常に魅力あるデバイスですが、開発環境を整えるのにやや敷居が高く、PICやAVRと違い例えばGPIOの設定一つでもより細かい設定が必要でなかなか取っつきにくいものがありました。はいってもいつまでも躊躇している場合ではないのですが、ちょうど関ハムシンポでSTM32F1の格安小型マイコンボード、通称BlackPillをJF1DIR広瀬OMから譲っていただいたことをきっかけに開発環境構築について改めて調べてみました。その結果Arduinoやmbedに依存しないオフラインな開発環境としては、現時点ではSTM32CubeMXとSW4STM32がよさそうです。STM32CubeMXは最初登録が必要ですがソフトウエアのダウンロードと使用は個人的使用の範囲では基本的に自由です。(商用目的の場合は確認していません)このソフトは便利でかつ強力なSTmicro純正開発支援ツールです。要は主プログラムで使用する機能とピンを設定に基づき、各IDEなどに合わせたプロジェクトファイル群を自動生成してくれるソフトウエアです。本体ソフトウエアをインストールし、各STM32シリーズごとのライブラリファイルをSTM32CubeMX内でダウンロード、インストールしておきます。Project"を左クリックして開始します。するとソフトウエアのアップデート確認、インストール後に目的のマイコン選択ウインドウが出てきます。該当する項目のチェックボックスにクリックして目的のモデルまで絞り込んでいきます。この例では秋月で単体販売されているF303K8T(6)を選択しました。Projectボタンをクリックすると、各種設定用のウインドウに切り替わります。ウインドウ右には実際のチップを模したグラフィック表示になっています。ここでピンに割り当てられた機能を直感的に確認したり変更したりすることが可能です。機能が固定されたVDDとVSSなどは当たり前ですがすでに割り当てられています。左はチップに内蔵されている各種機能をツリー表示したものです。ある機能を有効にしたときに、機能で割り当てられるピンが自動的に選択されます。実際には各機能相互で使用するピンのコンフリクトを避けるために、右のツリーからプログラムで必要な機能を選択してからそれ以外のGPIOを指定する流れがスムーズかと思われます。LCD、I2C接続のペリフェラル、AD変換ポート、デバッグ用ポートを使いたいとします。左のツリーから必要な機能をすべて選択すると、各機能にあたるピンを自動的に設定されています。あとはSPI接続で他に必要なCSとD/Cポートを空いている適当なピンに合わせて左クリックしGPIO_Outputにチェックします。チェックしたピンは緑色に変わります。次に上の"Clock_configuration"タブをクリックします。すると各モジュールの動作クロックを設定するウインドウにかわります。中央にあるシステムクロックSYSCLKを基準にしてラジオボタンとプリスケーラのプルダウンリストを適切に選択します。ここでは8MHzのRC内蔵発振器を使用するため、4MHz入力PLLでの最高倍率16倍である64MHzをSYSCLKとしてあります。その際にモジュールの中でオーバークロックになるところが赤色に変化して注意を促されるため該当モジュール前のプリスケーラの倍率を設定して最高周波数以内にします。エラーがなくなったのを確認して次に上の"Configuration"タブをクリックして各機能の設定を確認調整します。ここでは各モジュールやミドルウエア個々の設定を行います。気を付けておきたいのは、デフォルトの設定をそのまま使うと一部を除きたいていは動きません。(苦笑)よく使うモジュールとしていくつか例に挙げると、まずはI2C。modeに対応しているので変更しておいたほうが良いです。modeの400kHzに設定するのが無難です。LCDがまったく動かなくてしばらく悩みました。ここは8bitへ変更することが必要です。動作速度はFastに変更、input設定の場合プルアップ、プルダウン、両方なしいずれかの設定、outputの場合正論理か負論理か、プッシュプル出力かオープンドレイン出力かの設定を必ず確認し正しい設定にします。code"コマンドボタンもしくはメニューを選択します。IDEプルダウンメニューでSW4STM32に指定しOKすると作業場所にHALライブラリを含んだプロジェクトファイル群を生成されるので、それらをeclipseでインポートします。インポートしたプロジェクトでコードを書いてビルドすれば実行ファイルが生成されます。ちなみにIDEのSW4STM32はフリーのeclipseベースですが、供給元からダウンロードの際細かい個人情報の入力を要求されるので注意が必要です。私の場合は日本語化プラグインとJDE関連などが含まれたeclipseベースのPleiadesをインストールして、eclipseからSW4STM32をインストールしました。STmicroからSTM32CubeMXプラグインも導入し、eclipseからSTM32CubeMXを呼び出して、生成されたプロジェクトファイル群を自動インポートできるようにしました。作業スペースもdropboxのクラウド環境において簡単にバージョン統一を行っています。言ってしまえばaruduinoIDEもmbedもSTM32CubeMXも設定を効率化してその分コード書きに集中できるようにする便利なツールです。何より標準でHALドライバがつかえるのと設定がうまく体系化されている印象で取っつきにくさを解消してくれています。いったツールについていろいろと意見があるようですが、私のようななんちゃってプログラマには本当にありがたいツールですね。LCDをつなぎ、ADC入力電圧を表示させています。