将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的第三方IDE。 基本上,任何能够调用GCC交叉编译器的IDE都是可用的。
Note
本文将描述两种将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文件烧录板卡。