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++を選択して「完了」を押します(「次へ」を押しても何もしないのでいきなり「完了」でいいです)。

TouchGFX New Project

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

とりあえずプロジェクトができます。

TouchGFX New Project Finish

iocファイルはこの後、上書きされてしまうので閉じます。

TouchGFX Designerを起動します。

APPLICATION NAMEはdefaultでもいいですがYouTubeではv3Templeteとしています。 APPLICATION TEMPLATEでCHANGE>STM32F746G Discovery Kitを選択して「CREATE」を押します。

TouchGFX Designer Create

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

TouchGFX Designer Init

右上の「Generation Code」を押してコードを生成します。

そしていったんTouchGFX Designerを閉じます。

このv3Templateプロジェクト(例と同じ様に命名していれば)は先に作ったCubeIDEプロジェクトにコピペして使います。だからTemplateなんですね。

今しがた生成したv3Templateフォルダーを開きます。

v3Template Folder

ここで生成されているSTM32F746G-DISCO.iocを先にCubeIDEで命名したMyProject.ioc (例と同様に命名しているなら)にリネームします。

そしてそのMyProject.iocをエディターで開きます。

ProjectManager.ProjectFileNameをSTM32F746_DISCO.ioc→MyProject.iocに

ProjectManager.ProjectNameをSTM32F746_DISCO→MyProjectに

ProjectManager.UnderRootをfalse→trueにそれぞれ変更して保存して終了します。

このMyProject.iocをCubeIDEのMyProject.iocに上書きコピーします。

そしてその上書きコピーしたMyProject.iocを開きます。

new MyProject

YouTubeでは内容を確認していますが、確認しなくても大丈夫です。

プロジェクト>コードの生成でコードを生成します。

TouchGFXフォルダーができています。

TouchGFX Folder generate!

TouchGFX>ApplicationTemplate.touchgfx.partをダブルクリックするとTouchGFX Designerが起動します。

ここからはどんなプロジェクトでもいいと思いますが、一応YouTubeの通りにBlank UIを選択して、

Widgets>SHAPES>Boxで大きさを背景に合わせて

Widgets>BUTTONS>Toggle Buttonを背景の真ん中に設置します。

TouchGFX new design

右上の「Generate Code」を押してコード生成します。

CubeIDEに戻っていったんファイル>リフレッシュを押します。

引き続き、さきほど使用したv3TemplateフォルダのSTM32CubeIDE>STM32F746NGHX_FLASH.idをCubeIDEのSTM32F746NGHX_FLASH.idにコピーします。

同様にDrivers>BSPフォルダーとDrivers>ComponentsフォルダーもCubeIDEのDriversにコピーします。

今、コピーしたフォルダーをプロジェクトにパスを通します。

プロジェクト>プロパティーでMyProjectのプロパティーウインドウを開いて、C/C++一般>パスおよびシンボル>インクルード>GNU Cを選択します。

Path add

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

Path add BSP folder

以下、同様に「/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フォルダーにコピーします。

これで完成しているはずです。プロジェクト>プロジェクトのビルドを実行してエラーがないことが確認できます。

Build complete!

ではSTM32F746G-DISCOに書き込んで動作させてみましょう!

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

Debug configuration window

デバッガタブを選択して、External Loaderにチェックを入れて右側の「スキャン」を押します。

ドロップダウンリストから「N25Q128A_STM32F746G-DISCO, 0x90000000, NOR_FLASH, N25Q128A_STM32F746G-DISCO.stldr」を選択して「適用」→「デバッグ」を押します。

Debug configuration complete

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

Build-complete

プロジェクト全体はここ(GitHub)にあります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

STM32

前の記事

TouchGFX事始め