STM32F769lDisoveryのLCDを表示するMiddlewareであるSTemWinの導入時に躓いたので導入方法の備忘録です。
※CubeMXにより自動的に生成されるようになったようです。
よってこの作業は必要なくなりました!
動作環境
・Windows10 Home 64bit
・CubeIDE1.0.0
・STM32F769l Discovery
・STM32 HAL F7 V1.15.0
おそらくEclipseベースのSW4やAc6についても同様に出来ると思います。
導入方法
1.CubeMX上での設定
Middleware>GRAPHICSのGraphics FrameworkからSTemWinを選択し、DisplayInterfaceを選択します。
そしてPlatformSettingsやParameter Settingsなど各種設定を済ませて、自動生成をします。
動作するために必要なperipheral機能はまだ未確認です。。とりあえずDiscoveryのデフォルトでプロジェクトを生成しました。
この時点でビルドをしても、たくさんのLCD表示系の関数がundefinedというエラーが吐かれると思います。
2.静的ライブラリのコピー
undefinedエラーですが、ソースファイルがないことに気づくでしょう。
マニュアルやほかの人のブログをしっかりとみている人はわかると思いますが、STemWinは動的ライブラリ(.cや.h)ではなく、静的ライブラリ(.oや.a)で構成されています。
そして、なぜかCubeMXで自動で配置、リンクしてくれないため、自分で配置、リンクしなければなりません。
STM32Cube_FW_F7_V1.15.0\Middlewares\ST\STemWin\Lib 内にあります。
たくさん用意されていますね。
The library is compiled for CM4 and CM7 cores:
• With and without OS support.
• With size and time optimization
• Using ABGR and ARGB format
• The FPU is enabled.
とSTさんのマニュアルには書いてあります。
CMxのxがCoretxMの何シリーズか、OSとついているのはFreeRTOSで動かす用、ARGBはARGBを使用するかどうか、otとついてるのは高速化の最適化がされているようです。(未検証)
その中の自分の環境にあったものをプロジェクトに設置します。
どこにするかというと、プロジェクトのMiddleware/ST/STemWinにLibというフォルダを作成、その中です。
そして、設置した後.aファイルの頭に写真のようにlibを付けてください。(これが重要です。)
3.リンクさせる
ここが1番詰まりました
結論から言うと、プロジェクトのプロパティから、C/C++ビルドの設定のMCU G++ Linkerのライブラリーを設定します。まずは、下の検索ライブラリーパスで、2で設置したファイルのパスを設定します。
そのあと上のライブラリーの欄に2で設置したファイルの「lib」と「.a」を なくした ファイル名を設定してください。
libがついてたり、.aがついてたりすると、コンパイルが通りません。
また、2で語頭に追加した「lib」がファイル名に記載されてなかった場合もコンパイルに失敗します。
これで僕は2日くらい悩みました。
4.おわり
あとはプログラムをかいて動かすだけですよ。(出来てない
おわりに
ということで雑ですが導入方法だけ書きました。
進捗があり次第、使い方についても少しづつ書いていきたいと思っています。