跳转到主要内容

将IDE与TouchGFX组合使用

当创建新的TouchGFX项目时,无论是通过TouchGFX Designer还是STM32CubeMX,提供以下项目文件和库以便使用专有的IDE:

  • Keil μVision (Target only)
  • IAR Embedded Workbench(仅目标板)
  • STM32CubeIDE(仅目标板)
  • Microsoft Visual Studio (仅模拟器)

注意!并非所有项目文件都同时出现在项目中。 在STM32CubeMX中选择的工具链就是将要生成的工具链,默认情况下选择STM32CubeIDE。

Further reading
如何更改工具链在此处介绍。

此外,还提供生成文件和库(用于基于shell的编译)和GCC交叉编译器(用于ARM目标)。 本文将帮助您配置用于TouchGFX应用开发的基于GCC的第三方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

另一种生成资源的方法是直接使用图像转换器、文本/字体转换器、以及视频转换器。

Imageconverter Imageconverter可以位于您的项目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文件烧录板卡。