跳转到主要内容

生成代码

本节介绍在STM32CubeMX中生成代码时ToughGFX 生成器输出的内容。

生成的项目

除了与TouchGFX捆绑并在TouchGFX 设计器中按下运行目标时使用的GCC编译器之外,当使用STM32CubeMX中的Generate Code按钮生成代码时,TouchGFX(至少)还与以下ide一起工作:

  1. EWARM
  2. MDK-ARM
  3. STM32CubeIDE

要获得最佳项目结构,请导航至Project Manager(项目管理器),并选择以下项目生成选项:

  • 应用结构:高级
  • 禁用在root下生成(仅限STM32CubeIDE)

选择“高级应用结构”,然后取消选择“在root下生成”

按下生成代码按钮后,STM32CubeMX将为选定的中间件、实用程序、驱动程序、工具链等生成代码。

STM32CubeMX还将在项目文件夹的根目录下生成一个TouchGFX文件夹,其结构如下:

TouchGFX文件夹结构

  • App文件夹,包含用于初始化和启动TouchGFX的代码。
  • target文件夹,包含生成的只读代码(在generated文件夹)和可更改的用户类(STM32TouchController.cppTouchGFXGPIO.cppTouchGFXHAL.cpp
  • 使用TouchGFX Designer打开的.part文件,用于创建完整的TouchGFX项目,包括TouchGFX头文件和库。 .part文件包含相关的应用程序信息,如:像素格式和TouchGFX 设计器在生成TouchGFX应用程序代码时使用的画布尺寸。

一旦通过STM32CubeMX生成代码,就可以使用TouchGFX Designer打开TouchGFX项目来开发UI。 TouchGFX Designer会自动将任何额外生成的代码文件添加到通过STM32CubeMX中当前项目所选择的目标IDE。

Further reading
有关使用TouchGFX Designer进行UI开发的详细信息,请参见UI开发部分。

生成的代码架构

不论TouchGFX Generator中进行了什么配置,一些文件始终在TouchGFX文件夹中生成,而另一些文件仅在启用/禁用某些功能时生成(例如,视频解码器或自定义DMA2D类)。 每当开发人员在STM32CubeMX中生成代码时,generated文件夹的内容都会更新,以反映ToughGFX Designer AL配置中所做的更改。

以下列表概述了启用TouchGFX Generator的STM32CubeMX项目内容,重点介绍了始终生成的TouchGFX相关文件。

TouchGFX文件夹
│   .mxproject
│ myproject.ioc
├───Core
├───Drivers
├───EWARM
├───Middlewares
└───TouchGFX
│ ApplicationTemplate.touchgfx.part
├───App
│ app_touchgfx.c
│ app_touchgfx.h
└───target
│ STM32TouchController.cpp
│ STM32TouchController.hpp
│ TouchGFXGPIO.cpp
│ TouchGFXHAL.cpp
│ TouchGFXHAL.hpp

└───generated
OSWrappers.cpp
TouchGFXConfiguration.cpp
TouchGFXGeneratedHAL.cpp
TouchGFXGeneratedHAL.hpp

下表列出了最重要条目的功能。

文件夹职责
myproject.iocSTM32CubeMX项目文件
内核main.c和启动代码
驱动CMSIS、MCU系列驱动程序和Board Support Packages(板支持包)(BSP)
EWARMIDE项目文件夹。 可以为EWARM、MDK-ARM或STM32CubeIDE
中间件包含TouchGFX库/头文件以及FreeRTOS等第三方软件。
ApplicationTemplate.touchgfx.partSTM32CubeMX使用与TouchGFX Designer项目相关的信息(如屏幕尺寸和位深)来更新.part文件
应用STM32CubeMX的X-CUBE接口。 app_touchgfx.c包含MX_TouchGFX_Process(void)MX_TouchGFX_Init(void)函数的定义,这些函数用于初始化TouchGFX和启动其主循环。
目标/生成该子文件夹包含只读文件,当配置更改时,这些文件会被STM32CubeMX覆盖。 TouchGFXGeneratedHAL.cpp是TouchGFX类HAL的子类,并包含STM32CubeMX可基于其当前配置生成的代码。 OSWrappers.cpp(OSAL)包含与TouchGFX 引擎同步所需的功能,最后是TouchGFXConfiguration.cpp,其中包含用于构建和配置TouchGFX的代码,包括HAL。
目标包含大量文件,用户可修改这些文件,以扩展HAL行为,或覆盖STM32CubeMX生成的配置。 STM32TouchController.cpp包含空触摸控制器接口。 TouchGFXHAL.cpp定义TouchGFXGeneratedHAL的子类TouchGFXHAL

需要注意的是,TouchGFXConfiguration.cpp包含一个用于构建HAL的函数以及一个用于启动TouchGFX主循环的函数。 可在可编辑的用户类中完成其他配置。

Further reading
请阅读“修改生成的行为”部分,了解如何在可编辑用户类中应用其他配置。