跳轉到主要內容

將IDE與TouchGFX組合使用

當創建新的TouchGFX專案時,無論是通過TouchGFX Designer還是STM32CubeMX,提供以下專案檔案和庫以便使用專有的IDE:

  • Keil uVision(僅目標)
  • IAR Embedded Workbench(僅目標)
  • STM32CubeIDE(僅目標)
  • Microsoft Visual Studio (僅模擬器)

注意!並非所有專案檔案都同時出現在專案中。 在STM32CubeMX中選擇的工具鏈就是將要生成的工具鏈,預設情況下選擇STM32CubeIDE。

Further reading
如何更改工具鏈在此處介紹。

此外,還提供生成檔和庫(用於基於shell的編譯)和GCC交叉編譯器(用於ARM目標)。 本文將說明您配置用於TouchGFX應用開發的的第三方廠商的GCC-based IDE。 基本上,任何能夠呼叫GCC交叉編譯器的IDE都是可用的。

Note
請注意,本文只是概述設置過程(無法提供對所有各種IDE的支援),但希望此處提供的資訊足以讓您在最喜歡的IDE中使用TouchGFX。

本文將描述兩種將TouchGFX與其他IDE組合使用的方法。 一種方法是從IDE內部調呼叫TouchGFX Makefile。 這可能是最簡單的方法,但如果您想更好地控制編譯過程和檔案位置,這種方法並非總是適當的選擇。 或者,可以手動將必要的TouchGFX檔案和配置選項添加到現有專案中。

先決條件:GCC版

本文假設您將使用通過TouchGFX環境shell分發的GCC交叉編譯器工具鏈,或者使用您自己特有的GCC工具鏈(能夠連結使用環境shell工具鏈編譯的TouchGFX核心庫)。

使用的GCC編譯器:

$ arm-none-eabi-gcc.exe -v
Target: arm-none-eabi
Thread model: single
gcc version 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907] (GNU Tools for Arm Embedded Processors 7-2018-q2-update)

該編譯器可以從https://launchpad.net/gcc-arm-embedded獲得。

從IDE呼叫TouchGFX Makefile

在IDE中編譯TouchGFX應用程式的一種快速而粗略的方法是直接呼叫TouchGFX Designer所創建的專案中包含的Makefile。 要使用TouchGFX環境shell編譯面向目標的應用程式,必須導航到TouchGFX應用程式根目錄並執行以下指令:

$ make -f gcc/Makefile

現在,除了從TouchGFX環境shell呼叫make指令,還可以從IDE中呼叫。 Shell使用的可執行檔(make, arm-none-eabi-gcc, ..)實際上是普通的Windows x86可執行檔,所以make應用程式可以通過普通的指令提示符執行,前提是已經配置了以下環境變數。

C:\TouchGFX\4.18.0\env\MinGW\bin
C:\TouchGFX\4.18.0\env\MinGW\msys\1.0\Ruby30-x64\bin
C:\TouchGFX\4.18.0\env\MinGW\msys\1.0\bin
C:\TouchGFX\4.18.0\env\MinGW\msys\1.0\gnu-arm-gcc\bin

在設置了所需的Windows環境變數之後,現在可以直接從IDE中呼叫make指令作用於適當的TouchGFX生成文件。 您需要執行的指令與從shell編譯時相同,即:

$ make -f gcc/Makefile
Note
請注意,目前的目錄必須是要編譯的應用程式的根目錄。

將TouchGFX程式碼檔添加到自己的專案中

如果您想更好地控制編譯過程和檔案位置,可以將相關的TouchGFX程式碼檔集成到自己的現有專案中,並添加必要的包含路徑和編譯器開關以使其能夠編譯。

所需的文件

基本上,您需要向IDE專案添加的TouchGFX檔與使用make指令從TouchGFX環境shell編譯時相同。 具體包含哪些檔取決於您的目標開發板,因為每個開發板的底層驅動程式不同。 為了確定您需要哪些檔案,建議直接使用TouchGFX環境shell編譯對適當開發板的應用程式。 編譯過程會提到正在編譯的每個檔,從而列出您需要添加的檔。

包含路徑

您將需要向編譯中添加以下包含路徑:

.../TouchGFX/gui/include
.../TouchGFX/generated/gui_generated/include
.../TouchGFX/platform/os
.../TouchGFX/generated/fonts/include
.../TouchGFX/generated/images/include
.../TouchGFX/generated/texts/include
.../TouchGFX/generated/videos/include
.../Middlewares/ST/touchgfx/framework/include
Tip
除了上面的包含路徑,您還需要為特定開發板的程式碼添加包含路徑。 可以在 gcc/Makefile 中瞭解相關資訊。

編譯器開關

與包含路徑一樣,有一些必須啟用的通用編譯器開關,還有一些特定於處理器內核和具體開發板的編譯器開關。 下面針對每種內核列出了用於編譯TouchGFX核心庫的編譯器開關。 為了讓連結器工作,其中一些選項中對於程式碼編譯也是強制性的,而有些選項是可選的。 那些已知的強制性選項以粗體顯示。

Cortex-M0內核

-fno-rtti -fno-exceptions -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -mcpu=cortex-m0plus -D__irq="" -mthumb -mno-thumb-interwork -std=c99 -Os -fno-strict-aliasing -fdata-sections -ffunction-sections -Wno-psabi -DCORE_M0PLUS

Cortex-M4f內核

-fno-rtti -fno-exceptions -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -mcpu=cortex-m4 -D__irq="" -mthumb -mno-thumb-interwork -std=c99 -Os -fno-strict-aliasing -fdata-sections -ffunction-sections -Wno-psabi -DCORE_M4 -march=armv7e-m

Cortex-M7內核

-fno-rtti -fno-exceptions -mfpu=fpv5-sp-d16 -mfloat-abi=softfp -mcpu=cortex-m7 -D__irq="" -mthumb -mno-thumb-interwork -std=c99 -Os -fno-strict-aliasing -fdata-sections -ffunction-sections -Wno-psabi -DCORE_M7

Cortex-M33內核

-fno-rtti -fno-exceptions -mfpu=fpv5-sp-d16 -mfloat-abi=softfp -mcpu=cortex-m33 -D__irq="" -mthumb -mno-thumb-interwork -std=c99 -Os -fno-strict-aliasing -fdata-sections -ffunction-sections -Wno-psabi -DCORE_M33

連結器

核心庫

您必須連結TouchGFX核心庫。 這應該是二者選一,具體取決於您的MCU

.../Middlewares/ST/touchgfx/lib/core/cortex-m0/gcc/libtouchgfx.a
.../Middlewares/ST/touchgfx/lib/core/cortex-m4f/gcc/libtouchgfx.a
.../Middlewares/ST/touchgfx/lib/core/cortex-m7/gcc/libtouchgfx.a
.../Middlewares/ST/touchgfx/lib/core/cortex-m33/gcc/libtouchgfx.a

連結器選項

此外,您還需要一些連結器選項。 以下是TouchGFX使用的選項:

Cortex-M0: -Wl,-static -nostartfiles -mthumb -mno-thumb-interwork -fno-exceptions -fno-rtti -Wl,--gc-sections -mcpu=cortex-m0plus -Wno-psabi -mfpu=fpv4-sp-d16 -mfloat-abi=softfp
Cortex-M4f: -Wl,-static -nostartfiles -mthumb -mno-thumb-interwork -fno-exceptions -fno-rtti -Wl,--gc-sections -mcpu=cortex-m4 -march=armv7e-m -Wno-psabi -mfpu=fpv4-sp-d16 -mfloat-abi=softfp
Cortex-M7: -Wl,-static -nostartfiles -mthumb -mno-thumb-interwork -fno-exceptions -fno-rtti -Wl,--gc-sections -mcpu=cortex-m7 -Wno-psabi -mfpu=fpv5-sp-d16 -mfloat-abi=softfp
Cortex-M33: -Wl,-static -nostartfiles -mthumb -mno-thumb-interwork -fno-exceptions -fno-rtti -Wl,--gc-sections -mcpu=cortex-m33 -Wno-psabi -mfpu=fpv5-sp-d16 -mfloat-abi=softfp

資產生成

如要編譯專案,還必須生成資產。 可以使用‘assets’選擇呼叫生成的Makefile以實現該目標:

make -f TouchGFX/simulator/gcc/Makefile assets

另一種生成資產的方法是直接使用圖像轉換器、文字/字體轉換器、以及影片轉換器。

ImageconverterImageconverter可以位於您的專案touchgfx資料夾 Middlewares/ST/touchgfx/framework/tools/imageconvert/build(為Linux和Windows作業系統而構建)中。

usage: imageconvert [-c configfile] [-f inputfile -o outputfile | -r inputdir -w outputdir]

當呼叫imageconvert.out可執行檔時,它將在呼叫它的資料夾中尋找一個設定檔(application.config)。

Textconverter textconverter作為ruby檔位於專案touchfx資料夾Middlewares/ST/touchgfx/framework/tools/textconvert中:main.rb

usage: main.rb file.xml path/to/fontconvert.out path/to/fonts_output_dir path/to/localization_output_dir path/to/font/asset calling_path

Textconverter textconverter作為ruby檔位於專案touchfx資料夾Middlewares/ST/touchgfx/framework/tools/videoconvert中:videoconvert.rb

usage: videoconvert.rb path/to/project_root_dir path/to/video_assets_dir path/to/generated_output_dir

燒錄和除錯

您很可能輸出一個 .elf.hex ,具體取決於您的連結器設置。 可以從大多數IDE中配置和除錯TouchGFX應用程式,通常使用GDB伺服器或IDE提供的任何其他方法。 無法為每個可用的IDE提供具體指針,但您可能能在 編譯 & 燒錄 中找到靈感,該文解釋如何使用 GCC 生成的 ELF/HEX 檔進行燒錄。