鳥なき里のマイコン屋(61) STM32CubeIDE その3

最初はカッコよさに目が眩んでいたのですが、触ってみるとちょっと不満も出てまいります。なにせこのSTM32CubeIDEのRelease noteのRevision historyを見てみると

19-Apr-2019 Initial release

とあります。ホント出たばかり。まだ出だし、こなれていない感じもします。これからいろいろ改良されたりすると期待しています。最初は、いろいろあるんじゃないかと思います。

さて前回、たった2行のLチカのために、結構、あちこち調べ回ったのですが、今回はさらにしんどい。たった1行のシリアル出力のために、また、調べ回りました。おかげで大分、情報の在りかとかは分かってきましたが、この辺、適当なチュートリアルなど落ちていると大部助かると思うのは私だけでしょうかね。最初に表示されるInformation centerというページ(Helpメニューからもいつでも参照できる)が充実していると以前書いたのですが、限定がいることに気付きました。

ツールチェーンに関しては

充実しています。コンパイラとか、アセンブラとか、Cの標準ライブラリとか。でもこれらはもともとgccやRed Hatの在りものドキュメントの寄せ集めでしょう。ついでに言えばHelpもカッコよくまとまっている。しかしこちらの方は、

CDTとEclipse

のガイド部分。でも、欲しかったドキュメントは別なのです。初期化ツール(STM32CubeMXというST社の既存のツールをこのIDE内に取り込んだもの)が自動生成してくれる関数群(HALとよばれる上位レイヤと、もっと直接ハードを操作する下位レイヤ)についてのドキュメントなのです。しかし、このIDEの「充実したドキュメンテーションシステム」に、それがみあたらなかったです。探し方が悪いのかもしれないですが。。。どこかクリックしたらポンと出てきて欲しいな、と(実際、某社のPxxxのツールではコンポーネントをクリック一発、各部のAPIのデータシートが表示されます)。結局、

自動生成されたソース(ヘッダファイルにソースファイル)を読む

ことになりました。ソース自体はコメントが充実していて、使い方などもある程度書いてあったりするので、確かにこれを読めば分かるっちゃ、分かるのです。けれど、端からソースコードをずるずる読んでいくのはしんどい。この辺を隠してしまってお手軽化しているMbedなどと比べると、STM32CubeIDEは、全てを制御できる「本格的」なマイコン開発ツールである、というスタンスと理解いたしましたが、辛い。

今回やりたかったのは、シリアルポートにメッセージを書き出す、という1点。Mbedのような直接デバッガを扱えないWebツールでは重宝なprintfデバッグをしたりするためのもの。本格的なデバッガが使えるSTM32CubeIDEじゃいらないだろうか、とも思いますが、やはり、何かの時には欲しくなる。

ちょうど、別件でNUCLEO-F072RBボードにUSB-Serialアダプタを接続していたので、それをそのまま、今回ターゲットにしているNUCLEO-F401REボードに付け替えました。接続先は、

Serial1

です。自動生成で勝手に生成してくれているのは Serial2(デバッグLINK側を介してPCに接続)なので、Serial1をコードに追加したい。そこで、ハードウエアの初期設定を行う「ピン配などを表示している例の画面」はどこへ行った?ということであちこち探しまわりました。

結局、Project  Explorerのウインドウの一番下にある、拡張子

.ioc

という水色アイコンをクリクリすれば、「あの」画面が開きます。これが、STM32CubeMXという既に実績のある既存ツールの部分を呼び出すのでありましょう。そこで、新たなデバイスを追加するのは簡単でした。

カテゴリから、Connectivityを選びます。すると使える通信ペリフェラルの一覧が出てきます。そこで、USART1を選択。

選択した後の画面で、

  • 非同期
  • ボーレートは9600

とか必要なことを設定していくだけです。そして、その後で

Generate Code

を走らせました。これでUSART1(Serial1)の初期化コードが生成されて利用可能となった筈。

確かに利用可能になっていました。が、しかし、たった2行ですが、例のLチカのコードは消えていました。後でSTM32CubeMXの文書を読んだらちゃんと書いてあったのですが、

コードを再生成するときに、main.cも再生成されるのでユーザコードは消えて

しまうんであります。当然と言えば当然、それに思い至らなかった私が悪い。けれども、某社のPxxx Creatorなどは、コンポーネントを後から追加してもユーザコードはそのままですよ(その代わり初期化関数呼び出し行をユーザが追加しなければなりませんが)。とりあえず書いたコードは自分でも保存。

さて書き加えたコードはたった1行。

UART1に文字列”ABCD”の先頭から4文字を送り出すです。最後の10000は、ここの単位が何なのかも理解しないまま、適当に大きな数を書いてみたタイムアウト時間です。マイコンです、どこのクロックをどう分周でどこで使っているのか、そういう基本的なことのドキュメントも読まず、ましてや設定もパスしてここに来ているのがとてもマズイ気がします。やはり本格的に使うためにはちゃんとドキュメントを見つけて読まないと。

どんなに気持ちが適当でも、ビルドして、デバッガでオブジェクトを流し込めば、動きます。こんな塩梅。LEDが光る度にABCDの文字が繰り返されます。この上に一枚使いやすくする層を被せれば、動作状況をモニタするのはできますな。

しかし、こんなペースで調べていたのではラチがあかない。結局、この後、ST社のホームページへ行き、各種ドキュメントをダウンロードしまくりました。やはり、STM32CubeMXのドキュメント先に読んでおけばよかった。

鳥なき里のマイコン屋(60) STM32CubeIDE その2