生成代码
本节介绍在STM32CubeMX中生成代码时ToughGFX 生成器输出的内容。
生成的项目
除了与TouchGFX捆绑并在TouchGFX 设计器中按下运行目标时使用的GCC编译器之外,当使用STM32CubeMX中的Generate Code按钮生成代码时,TouchGFX(至少)还与以下ide一起工作:
- EWARM
- MDK-ARM
- STM32CubeIDE
要获得最佳项目结构,请导航至Project Manager(项目管理器),并选择以下项目生成选项:
- 应用结构:高级
- 禁用在root下生成(仅限STM32CubeIDE)
按下生成代码按钮后,STM32CubeMX将为选定的中间件、实用程序、驱动程序、工具链等生成代码。
STM32CubeMX还将在项目文件夹的根目录下生成一个TouchGFX文件夹,其结构如下:
- App文件夹,包含用于初始化和启动TouchGFX的代码。
- target文件夹,包含生成的只读代码(在generated文件夹)和可更改的用户类(
STM32TouchController.cpp
、TouchGFXGPIO.cpp
和TouchGFXHAL.cpp
) - 使用TouchGFX Designer打开的.part文件,用于创建完整的TouchGFX项目,包括TouchGFX头文件和库。 .part文件包含相关的应用程序信息,如:像素格式和TouchGFX 设计器在生成TouchGFX应用程序代码时使用的画布尺寸。
一旦通过STM32CubeMX生成代码,就可以使用TouchGFX Designer打开TouchGFX项目来开发UI。 TouchGFX Designer会自动将任何额外生成的代码文件添加到通过STM32CubeMX中当前项目所选择的目标IDE。
Further reading
生成的代码架构
不论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.ioc | STM32CubeMX项目文件 |
内核 | main.c 和启动代码 |
驱动 | CMSIS、MCU系列驱动程序和Board Support Packages(板支持包)(BSP) |
EWARM | IDE项目文件夹。 可以为EWARM、MDK-ARM或STM32CubeIDE |
中间件 | 包含TouchGFX库/头文件以及FreeRTOS等第三方软件。 |
ApplicationTemplate.touchgfx.part | STM32CubeMX使用与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主循环的函数。 可在可编辑的用户类中完成其他配置。