(2019/Nov/27追記:本エントリの問題は、v1.0.2までのものであり、v1.1.0では解決済みです。執筆時点でアップデートしていなかったのが原因です。コミュニティにもその旨報告済みです)
上記の件の発生条件を突き止めました。
STM32 CubeIDEで生成したプロジェクトはスケルトンですので、内製、外製含む多数のモジュールを持ち込むことになり、それらはサブディレクトリに配置されます。したがって、プロジェクト・プロパティにはカスタムのインクルード・パスやソース・ロケーションを追加するわけですが、これらをCubeIDEが消去する問題が有りました。
発生条件がまちまちに見えたので困惑していたのですが、腰を据えて調べることで挙動を特定することができました。
この問題は「.iocファイルを開いたあとの最初のコード生成のみで発生」します。つまり、.iocファイルを開きっぱなしであれば、何度コード生成してもパスは消去されません。
.iocファイルさえ開いてあれば、デバイスのコンフィギュレーションどころかFreeRTOSの追加削除ですらパスは消去されません。FreeRTOSの追加削除はFreeRTOS用のパスの追加削除も行われますが、コード生成をすると綺麗にRead-Modify-Writeが行われており、カスタム・パスはそのままにFreeRTOS関連のパスのみ変更されます。そして、.iosを閉じて開き直したあとにコードを生成すると、カスタム・パスのみが消え去ります。
カスタムパスを消されると、プロジェクトの設定をやり直しになります。デバイスのコンフィギュレーションを探りながら開発している時には、イライラで爆発しそうになる嫌なバグです。
検証環境は以下のとおり。おそらくほぼすべてのSTM32マイコンの開発で発生するでしょう。
- STM32 CubeIDE 1.0.2
- Ubuntu 16.04 LTS
- Nucleo G431RB ( 32 pin ) ほか
この問題はコミュニティに報告済みです。