TouchGFXをSTM32CubeIDEで動かす
以前のTouchGFXではGeneration CodeをしたときSTM32CubeIDEプロジェクトは作られませんでしたが最新バージョン(4.13.0 2020/04/08 現在)では作られます。しかしそのプロジェクトを取り込みbuildはできますができたhexファイルをSTM32F746G-DISCOにデータを書き込んでも動作しません。TouchGFXが生成したhexファイルは当然ながら動作しますが。
自力ではSTM32CubeIDEで動作させることはできませんがYouTubeにあったのでこれをなぞってみます(https://www.youtube.com/watch?v=12KXreXaLp0&t=93s 音が出ます)
YouTuberの話している英語は私には殆どわかりませんが設定>字幕>自動翻訳>日本語にすれば日本語字幕がつきます。なくてもPC画面で大体わかりますが。
バージョンはTouchGFXが4.13.0、STM32CubeIDEが1.3.0(YouTubeでは1.2.1を使用)でSTM32F746G-DISCOを動かします。CubeIDEは日本語化しているので以下の内容はメニュー名が日本語です。日本語化していない場合は英語に読み替えて読んで下さい。
まず新規プロジェクトを作ります。 ファイル>新規>STM32 ProjectでTarget Selectionウィザードが現れるのでBoard Selector>32F746GDISCOVERYを選択して「次へ」を押します。
プロジェクト名を入れて(YouTubeではMyProject)、Targeted LanguageでC++を選択して「完了」を押します(「次へ」を押しても何もしないのでいきなり「完了」でいいです)。

「Board Project Options」ウィンドウにInitialize all peripherals with their default Mode ?すべての周辺機器をデフォルトモードで初期化しますか ? とでるので「はい」を押します。
とりあえずプロジェクトができます。

iocファイルはこの後、上書きされてしまうので閉じます。
TouchGFX Designerを起動します。
APPLICATION NAMEはdefaultでもいいですがYouTubeではv3Templeteとしています。 APPLICATION TEMPLATEでCHANGE>STM32F746G Discovery Kitを選択して「CREATE」を押します。

プロジェクトが生成されます。

右上の「Generation Code」を押してコードを生成します。
そしていったんTouchGFX Designerを閉じます。
このv3Templateプロジェクト(例と同じ様に命名していれば)は先に作ったCubeIDEプロジェクトにコピペして使います。だからTemplateなんですね。
今しがた生成したv3Templateフォルダーを開きます。

ここで生成されているSTM32F746G-DISCO.iocを先にCubeIDEで命名したMyProject.ioc (例と同様に命名しているなら)にリネームします。
そしてそのMyProject.iocをエディターで開きます。
ProjectManager.ProjectFileNameをSTM32F746_DISCO.ioc→MyProject.iocに
ProjectManager.ProjectNameをSTM32F746_DISCO→MyProjectに
ProjectManager.UnderRootをfalse→trueにそれぞれ変更して保存して終了します。
1 2 3 4 5 6 7 8 9 |
ProjectManager.PreviousToolchain=STM32CubeIDE ProjectManager.ProjectBuild=false ProjectManager.ProjectFileName=STM32F746G_DISCO.ioc ProjectManager.ProjectName=MyProject ProjectManager.StackSize=0xA00 ProjectManager.TargetToolchain=MyProject ProjectManager.ToolChainLocation= ProjectManager.UnderRoot=true ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL- |
このMyProject.iocをCubeIDEのMyProject.iocに上書きコピーします。
そしてその上書きコピーしたMyProject.iocを開きます。

YouTubeでは内容を確認していますが、確認しなくても大丈夫です。
プロジェクト>コードの生成でコードを生成します。
TouchGFXフォルダーができています。

TouchGFX>ApplicationTemplate.touchgfx.partをダブルクリックするとTouchGFX Designerが起動します。
ここからはどんなプロジェクトでもいいと思いますが、一応YouTubeの通りにBlank UIを選択して、
Widgets>SHAPES>Boxで大きさを背景に合わせて
Widgets>BUTTONS>Toggle Buttonを背景の真ん中に設置します。

右上の「Generate Code」を押してコード生成します。
CubeIDEに戻っていったんファイル>リフレッシュを押します。
引き続き、さきほど使用したv3TemplateフォルダのSTM32CubeIDE>STM32F746NGHX_FLASH.idをCubeIDEのSTM32F746NGHX_FLASH.idにコピーします。
同様にDrivers>BSPフォルダーとDrivers>ComponentsフォルダーもCubeIDEのDriversにコピーします。
今、コピーしたフォルダーをプロジェクトにパスを通します。
プロジェクト>プロパティーでMyProjectのプロパティーウインドウを開いて、C/C++一般>パスおよびシンボル>インクルード>GNU Cを選択します。

右上の「追加…」を押して「すべての言語に追加」にチェックを入れて「ワークスペース…」を押して「/MyProject/Drivers/BSP」を選択して「OK」を押します。

以下、同様に「/MyProject/Drivers/Components/Common」、「/MyProject/Drivers/Components/ft5336」、「/MyProject/Drivers/Components/n25q128a」を追加します。
追加し終えたら「適用して閉じる」を押します。
「Changes made will not be reflected in the index until it is rebuilt.Do you wish to rebuilt it now? (行われた変更は、再構築されるまでインデックスに反映されません。今すぐ再構築しますか?)」と聞かれるので「はい」を押します。
さらにv3Template>TouchGFX>targetフォルダー内のSTM32TouchController.cppとSTM32TouchController.hppをMyProject> TouchGFX>targetフォルダーにコピーします。
さらに同様にv3Template>Core>Src>main.cをMyProject>Core>Srcフォルダーにコピーします。
これで完成しているはずです。プロジェクト>プロジェクトのビルドを実行してエラーがないことが確認できます。

ではSTM32F746G-DISCOに書き込んで動作させてみましょう!
STM32F746G-DISCOをUSBケーブルでPCにつなげたあと、実行>デバック>STM32 Cotex M C/C++ Applicationを押すと起動構成プロパティーの編集ウィンドウが開きます。

デバッガタブを選択して、External Loaderにチェックを入れて右側の「スキャン」を押します。
ドロップダウンリストから「N25Q128A_STM32F746G-DISCO, 0x90000000, NOR_FLASH, N25Q128A_STM32F746G-DISCO.stldr」を選択して「適用」→「デバッグ」を押します。

プログラムがダウンロードされて実行開始待ち状態になるので実行>再開を押すとプログラムがSTM32F746G-DISCO上で動作します。
