STM32CubeMX無しではstm32のプログラムが書けなくなりました

新規基板を作成したときに組込プログラムで一番時間を取られるのは内蔵周辺機能が使えるようになるまでの段階です。

同じボードを使い続ければプログラム開発の工数は半分以下になりますが、繋がる相手が様々なので汎用的なボードを作って対応しようとすると無駄が多すぎて競争力が無くなります。

また、実際にものが動き始めればプログラムも面白いのですが、初期化の部分はリファレンスマニュアルとの睨めっこと試行錯誤の繰り返しであまり楽しい作業ではありません。

STM32CubeMXが実用的に使えるようになってから、プログラムが随分と楽になりました、今では今ではSTM32CubeMX無しではプログラムを書く気になりません。

以前、よく足を取られていたのがクロック周りの初期化です、
今回stm32F765VGTというstm32Fシリーズの中ではハイエンドのCPUを使い始めてSTM32CubeMXでクロックコンフィグレーションのところを見て
「これをリファレンスマニュアルを見ながらやれと言われたら戦わずして降参だ。」と思ってしまいました。

下のずがその画面です、stm32F7xxシリーズは機能が豊富なだけあってクロックの構成だけでもやたらに複雑になっています。
しかしSTM32CubeMXを使えばこの画面だけ見れば10分もかからずにクロックの初期化が出来てしまいます。

PICも無料で使えるMPLAB-Xで初期化の簡単設定が出来るようになっています、昔使っていたルネサスのツールはどうなんでしょうか。
こようなツールの使い勝手がユーザーを獲得する決め手になるような気がします。

stm32cube_configclock

STM32CubeMX Ver4.17でmain.hが自動的に生成されるようになった

STM32CubeMXで古いプロジェクトを読み込むと

STM32CubeMX Ver4.17で古いプロジェクトを読み込むと「最新のライブラリを使いますか?」といった意味のウィンドウが表示されます。
stm32cube417

私は新しもの好きなのでたいていの場合、あまり考えずにMigrateボタンをクリックして新バージョンのライブラリを使います。
たいていの場合はそのままエラー無しでコンパイル出来るのですが今回はちょっと困った変更が入っていました。

変更の内容:main.hが自動的に作成される。

そのせいで共通のインクルードや定義を記述して使っていたmain.hという名前のインクルードファイルが上書きされて消えてしまいました。

/* Define to prevent recursive inclusion -------------------------------------*/
 #ifndef __MAIN_H
 #define __MAIN_H
 /* Includes ------------------------------------------------------------------*/

/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private define ------------------------------------------------------------*/

/* USER CODE BEGIN Private defines */

/* USER CODE END Private defines */

/**
 * @}
 */

/**
 * @}
 */

STM32CubeMXでは
/* USER CODE BEGIN xxxx */

/* USER CODE END xxxx */
の間に書いたコードはプロジェクトを更新しても保存されるのでままで使っていたコードをこの中に移せばOKかと思ったら、FreeRTOSを使っている場合にヘッダファイルの挿入位置の関係で訳のわからないエラーが発生してしばらく悩んでしまいました。

結局 今まで使っていたmain.hを_main.h という名前に替えて読み込むようにして解決しましたが、STM32CubeMXのファームウェアライブラリはこのようなコンパイルエラーの原因となる変更が時々あるので気をつける必要があります。

ま、いったん動いたプロジェクトは古いライブラリのままで使えば問題ないのですけど、
ライブラリを最新のものにしないと取り残されるような気がして無節操にアップデートしてしまう自分の責任で起きたトラブルで下。

 

STM32CubeMX Ver4.17でライブラリが読み込めない

STM32CubeMX Ver4.17がリリースされたとの通知があったので早速アップデートしてみました。

(修正)この下に書いている件は勘違いのような気がします。
下記のように修正してもやはりアップデートできないライブラリがあり、何度も繰り返しているとアップデート出来てしまったので、やはりダウンロード関係のトラブルだったのではないかという気がします。

STM32CubeMXは新しいバージョンを別のフォルダにインストールすれば過去のバージョンも並行して使えるので便利で、設定もそのまま引き継いでくれます。

ライブラリも新しいバージョンが出ているとのことなのでついでにダウンロードしようとしたのですが何回やっても途中で「Download and Unzipに失敗しました」というメッセージで中断してしまいます。
ライブラリは大きいもので数百メガバイトあり、ダウンロード速度も遅いので他のことをやりながらダウンロードしておいて数時間後に見ると失敗のメッセージが表示されているということを何度か繰り返しました。
最初はネットのエラーかサーバー側のエラーが原因だろうと思っていたので根気よく繰り返していたのですが、さすがに「ちょっと変だな」と思い設定を調べて見ると原因が見つかりました。

ライブラリをダウンロードする場所はHelp -> Update Settingsで設定します。

libinstallerr1

で、原因はこれでした。
Linux系の開発環境で作られたソフトではディレクトリの ¥が/で表示されていることはよくあるので、最初「設定はちゃんと引き継がれているな、よしよし」と思って気にしませんでしたが、念のためにBrowseボタンで設定しなおしてみると¥を使ったディレクトリ表示になりました。

libinstallerr2

こちらが正解です。
今までのバージョンアップで、このエラーに出会ったことは無いのでたぶんちょっとしたミスなんでしょう。
それにしてもわかりにくいバグでした。

libinstallerr3