目次
もったいないお化け復活
年始に、STマイクロエレクトロニクスからキャンペーンでいただいてそのまま放置していたSTM32WB55 Nucleo Pack。使わないで死蔵しているのはもったいないので、ちょっと動かしてみることにしました。仕事としてはESP32シリーズやRaspberry PIを使っていることの方が圧倒的に多いんですけれどね。

どんなもの?
STM32ファミリのプロセッサの載った、サーバ側ボード(NUCLEO BOARD)とUSBドングル1式で構成されている開発用セットです。どちらも Arm Cortex-Mシリーズがプロセッサとして載っています(NUCLEO BOARDがCortex-M4 64MHz, ドングルがCortex-M0 32MHzのプロセッサ)。通信周りはTHREADだったりBLE(Bluetooth 5.0)だったり広く対応しております。一応NUCLEO BOARDのほうはボタン型電池(CR2032)で動作させられるようになっていますが無線って消費電力が半端ないので、これは気休めって思っていた方が良いでしょうね。ボード上にはExternal Power Supply実装用のパターンが開いているので、そっち使うか、もしくはUSB ST-LINK経由で電源食わすか、というのがバッテリ運用では普通使いになるかと思います。
必要なもの(ハードウェア)
Nucleo Packに入っていなくて必要なものは2つしかありません。
- Windows 7以降が動作するPC or Linux 64bitカーネルが動作するPC or Mac
- USB Type-AとMicro-Bケーブル
最近Micro-Bのは製品同梱の物からは減ってきていますが、大抵こういうボードが好きな人は一本くらいは持ってるでしょう。
はじめの一歩
パッケージの裏側に簡単な英語で書いてありますが、以下の手順でサーバ側ボードとUSBドングル側(クライアント)とをセットアップすると開発に使えるようになります。
- PCとサーバ側ボードとをUSB接続する
サーバ側ボードのUSB_STLINKにMicro USB Type-Bを差し込むと電力供給が行われ、LED2(緑)が約1分間点滅してドバタイズパケットが送信されます - クライアント側のUSBドングルはPCのUSBポートに挿してからSW1ボタンを押下する
自動的にサーバ側ボードと接続がされます - いったん接続完了すると、サーバ側ボードもUSBドングルも緑LEDが点滅する
- USBドングル側のSW1ボタンを押下するとサーバ側ボードの青色LEDが点灯する
一応ここまでは簡単にできます。USBドングルがやや弱っちい作りなので、SW1ボタンを押すときはちょっとだけ怖いですが。一応デフォルトでは勝手にサーバ側ボードとUSBドングルとは通信できるようになっているようです。
ソフトウェア開発はじめの一歩
ソフトウェア開発を行うには、コード生成はSTM32CubeMX, コードのビルドはSTM32CubeIDE or SW4STM32ツールチェイン、 書き込みやデバッグにはSTM32CubeProgrammerを使うことになります。どちらもLinux,MacOS, Windows(32bit, 64bit)には対応してます(Java必須なので、JDK8以上のJava環境は事前にインストールしておく必要がある)。今回使ったSTM32WBボード以外のSTM32ファミリでは開発環境は共通みたいなので、とりあえず自分のPC側環境にあったものをダウンロードしてくれば良いのでしょう。
ただし、2021/07/31現在、STM32CubeIDEについてはWindows 10 21H1ではインストーラ起動できなかったので、私個人はSW4STM32ツールチェインでチャレンジしました。原因までは追っかけておりません・・・。
SW4STM32ツールチェインのインストール
SW4STM32ツールチェインはOpenSTM32コミュニティで管理されています。OpenSTM32コミュニティは利用は無料ですが、リソースのアクセスには登録・ログインが必要なので、ご面倒でも初回は登録&フォーム記入が必要ですね。この際、OpenSTM32コミュニティからメールが届くのですが、Hotmailや@Outlookメールなど、Microsoft管理のサービスでのメールアドレスは入れないでって書かれていますので、それ以外ので。gmailは大丈夫そうです。フォーム記入すると、登録メールアドレスに有効化のためのリンクを含んだメールが届くのでよろしければリンクを読み込む・・・というのもよくあるパターンなので、中身しっかり吟味して行動決めてください。

このページから「System Workbench for STM32」メニューを選ぶとSW4STM32の使い方一覧Wikiにたどり着けます。なかなかの長旅になっているネットサーフィン(死語?)です。

STM32CubeMXのインストール
ダウンロードしようとするとライセンス同意に関するポップアップがWebページ上に大きく出ますが、別に異論はないので同意するボタンを押下するとダウンロードが始まります(Windows版インストーラは2021/07/31時点で321MB容量を食います)。ダウンロードできるファイルは1つのセットアッププログラムだけ含んだzipファイルでした。なかなか豪快。

展開されたファイルを実行すると、以下のようなダイアログが表示されます。

指示に従ってインストールを進めていきますが、この後のインストール時に気になったことは以下の通りです。
- ライセンス条項はそんなに厳しくないかな?とは思いますが、一部サードパーティ(オープンソース)のソフトウェアコンポーネントが入っているらしくて、そちらについての言及があります。最初の3項くらいまでは宣伝条項付きのBSDライセンス?と思った。
- インストール先等の選択はとりあえずデフォルトで良いと思います。そんなに変な感じでもなかったし。
- インストールの最後に「Generate an Automatic installation script」というボタンが出てきます。これは入れておいた方が良いでしょう。作成したスクリプトの保存先はデフォルトで、CubeMXをインストールしたルートディレクトリになります
STM32CubeMXの実行
STM32CubeMXを実行すると(ちょっと初期化が遅いけれど)以下の画面が出てきます。

STM32CubeWBの展開
最初はサンプルプログラムからその開発の様子を知りたい、と思うのが凡人たる私の真っ先に考えることなので、無線プロトコルスタックとざっとサンプルの入ったSTM32CubeWBプログラムをダウンロード&展開してきます(2021/07/31現在、バージョン1.12)。このプログラムはGithubリポジトリにもあるので、オープンソースで保守がなされている物です。こちらはzipファイルを展開してもインストーラだけが同梱されているわけではないので、比較的各ドライブのルートディレクトリに近いパスで展開してあげとくと良いでしょう(デスクトップとかは大体避けますね。パス名に日本語が入ることを考慮仕切れていない開発環境ってまだ時々見受けられ、読み込めないとか無用のトラブルをさけるため)。
LEDチカのサンプルを動かす
最初は電子工作界隈の”Hello, World”たる、Lチカから始めました。こちらはGPIO(汎用プログラマブルI/O)のサンプルとして同梱されています。
<展開先ディレクトリ>\Projects\NUCLEO-WB55-Nucleo\Examples\GPIO\GPIO_EXTI
配下のプロジェクトファイルGPIO_EXTI.iocをSTM32CubeMXで開きます。

STM32CCubeMXは、ピンアサインや利用する機能などをポンポンと直感的に置いていけば、自動的にソースコードをある程度指定したツールチェイン向けに生成してくれる、というものです。ESP32のESP-IDFに慣れていると、ピンアサインをGUIで指定するなんて事はほぼなくて、ゴリゴリCで書いてますから、だいぶ雰囲気が異なりますね。上部のProject Managerタブをクリックして、プロジェクト設定をとりあえず見ます。

とりあえず、利用ツールチェインとプロジェクトファイルパスを確認します。STマイクロエレクトロニクスの配布物で統一したい場合はSW4STM32ツールチェイン(SoftWare For STM32って意味でしょうかね…)を選択しておくと良いでしょうか。そして、ウィンドウ上部のGENERATE CODEを押下してコードを生成してみます。最初は何一つ依存関係のあるファイルをダウンロードしていないので、足らないファイルがあるよというダイアログが表示され、ダウンロードしてくるか聞いてこられます。まぁダウンロードするしかないんでしょうから、OKをクリックします…。

ダウンロードして展開されると、ライセンスチェックが入り、必要なら都度止まってライセンス承認するのか聞いてこられます(OSSライセンスって事が多いのですけど)。

うまく終了すると、SW4STM32用のプロジェクトが生成されます。
インストールの最後でUSBデバイスドライバのインストールが行われます。
STM32CubeProgrammerを起動させると、こんな画面が表示されます。どう使うのかはドキュメントをしっかり読まないと最初は分かりません…。一番最初にいじる箇所は一番右側に配置されているTarget Configuration Panelと呼ばれるものですね。


この状態で一番上部にあるST-LINKのところでConnectを押すと、サーバ側ボードと接続がされて、Main Panelにフラッシュメモリの内容が書き出されるのが分かります(中身はとりあえず気にしなくて良い)。

まずは、STM32 CubeMonitor-RFを入れてみるのが正しいいじり方?なのかなと思います。STM32 CubeMonitor-RF(STM32CubeMonRF)は、サーバ・クライアント間の無線区間の通信パフォーマンスを見るためのソフトウェアです。

「最新バージョンを取得」をクリックすると、ライセンス同意とST社のユーザアカウントがあればログインを求められます(アカウントなくても、氏名とメールアドレスを登録すれば良いですけれどね。でも1回登録したメールアドレスに届いたメールからメールアドレスの認証をする必要がある)。この辺ちょっとESP32の開発環境セットアップと比べてしまうと面倒でうざったいのですけれど、まぁまだそんな手間ではないか…。ダウンロードできたzipファイルを展開すると、セットアッププログラムが一個ぽつんと入っています。実行すると、ライセンス同意を聞いてこられますが、読むとBSDライセンスには近いかな?という記述ではあるので(宣伝条項入ってませんかこれ…?)とりあえずagreeしておきましょう。

インストールが終了すると、いきなり初期画面が立ち上がります。

とりあえずBLEを見てみたいので、BLEを選択してみます。