跳转到主要内容

驱动

驱动部分允许开发人员为TouchGFX AL的各种功能选择驱动程序。

TouchGFX Generator驱动程序设置

应用滴答计时源

应用程序的滴答计时源定义了如何驱动应用程序向前执行。 开发人员具有以下选项:

  • LTDC - If LTDC is selected as the interface in the "Display" group, the Application Tick Source can be "LTDC". 这意味着TouchGFX Generator将在TouchGFXGeneratedHAL类中生成驱动程序函数(LTDC中断处理程序),该函数通过调用OSWrappers::signalVSync()来驱动应用程序向前执行。
  • 自定义和FMC - 在这种情况下,开发人员需要实现一个处理程序,来重复调用OSWrappers::signalVSync()函数,驱动应用程序向前执行。
Further reading
有关实现自定义应用程序滴答计时源的更多信息,请参阅FMC和SPI显示接口场景

DMA2D Accelerator (ChromART)

对于DMA2D图形加速,开发人员有三个选项:

  • No - The application renders using only the CPU.
  • Yes - The application uses the ChromART chip when possible to move and blend pixels, freeing up CPU cycles. 驱动程序由TouchGFX Generator生成,不需要开发人员采取任何措施。
  • 自定义 - TouchGFX Generator 生成通用型TouchGFX DMA类,该类由TouchGFX 引擎中的DMA接口派生而来,开发人员必须为自定义图形加速器实现的成员函数。

To be able to select DMA2D Accelerator in TouchGFX Generator, it must be enabled in the Multimedia category in STM32CubeMX:

对于支持DMA2D的MCUS,可在STM32CubeMX中的多媒体类别中启用DMA2D。

TouchGFX Generator生成的DMA2D(ChromART)驱动程序支持两种接收TransferCompleteInterrupt的方式:

  1. 使用STM32Cube HAL驱动程序,其将回调函数注册到dma2d句柄hdma2d.XferCpltCallback
  2. 直接使用DMA2D_IRQHandler()中断处理程序。

通过在STM32CubeMX中的DMA2D IP的NVIC设置中启用或禁用DMA2D全局中断,可以在这两者之间进行切换:

STM32CubeMX系统核心类别下的NVIC设置中启用/禁用DMA2D全局中断

选项1)启用全局中断生成的代码,选项2)禁用全局中断生成的代码。

Note
  • 对DMA2D使用全局中断时,请确保“ IRQ处理程序”调用“ DMA2D HAL处理程序”。 这是默认行为。
  • 如果在启用全局中断的同时禁用DMA2D的“ IRQ处理程序”和“调用HAL处理程序”,将导致永不调用已注册的回调。
  • GPU2D Accelerator (NeoChrom)

    GPU2D(NeoChrom)是一种图形加速器,能够加速TouchGFX中的许多绘图操作,包括纹理映射和矢量渲染。 它支持RGB565、RGB888和ARGB8888格式的帧缓存。

    对于GPU2D图形加速,开发人员有两个选项:

    • No - The application draws using only the CPU.
    • Yes - The application uses the NeoChrom chip when possible to accelerate many drawing operations done by TouchGFX. 驱动程序由TouchGFX Generator生成,不需要开发人员采取任何措施。

    To be able to select GPU2D Accelerator in TouchGFX Generator, it must be enabled in the Multimedia category in STM32CubeMX:

    对于支持GPU2D的MCUS,可在CubeMX中的*多媒体*类别中启用GPU2D。

    Note
    只有当STM32CubeMX中项目的多媒体部分启用了GPU2D, GPU2D选项才可见。 它仅适用于STM32U599芯片,并且只有在中间件部分的ThreadX RTOS同样启用或运行裸机应用程序(无操作系统)的情况下,才能与TouchGFX一起使用。

    启用后,TouchGFX 生成器将出现一个新部分(GPU2D驱动程序):

    GPU2D驱动程序设置

    GPU2D Command List Size(命令列表大小)设置以字节为单位设置GPU2D使用的命令列表的大小。

    GPU2D Memory Pool Location(内存池位置)设置允许用户配置GPU2D使用的内存池位置。 缓存在内存中必须为8字节对齐。 下面的选项可供使用:

    • By Allocation(按分配)——让链接器将内存池放在一个8字节对齐的地址中。
    • By Address(按地址)——允许用户定义内存池的起始地址。 如果输入的地址非8字节对齐,则TouchGFX 生成器中将出现错误。
    Note
    TouchGFX 生成器创建的内存池总大小取决于Vector Rendering(矢量渲染)配置。
    • 如果禁用了Vector Rendering(矢量渲染),则内存池的总大小为:1kb环形缓冲区+GPU2D Command List Size发(命令列表大小)+5kb额外备用存储
    • 如果启用了Vector Rendering(矢量渲染),则内存池的总大小为:1kb环形缓冲区+GPU2D Command List Size(命令列表大小)+(显示宽度*显示高度字节)+256字节LUT+512字节梯度+5kb额外备用存储

    实时操作系统

    开发人员可使用任何支持TouchGFX的RTOS(甚至无操作系统)。 如抽象层架构中所述,TouchGFX 引擎使用OSWrappers接口将其主事件循环以及帧缓存访问与用户选择的RTOS同步。 当开发者通过TouchGFX Generator选择操作系统时,将生成代码并通过所选操作系统的基元实现内部同步。 操作系统仍然必须通过STM32CubeMX进行配置,以确定堆栈大小等。

    FreeRTOS (CMSIS OS V1和V2)和ThreadX(本地中间件或Azure RTOS软件包)可直接在STM32CubeMX中进行配置,TouchGFX Generator为用户提供任务定义和TouchGFX RTOS驱动程序的生成代码。 TouchGFX Generator 可生成符合CMSIS V1和CMSIS V2标准的RTOS驱动程序,与任何符合CMSIS标准的RTOS一起运行,一个用于ThreadX的驱动程序,一个用于在没有操作系统(无操作系统)的情况下运行裸机的驱动程序。

    无OS

    If it is desired to run TouchGFX with no operating system, the No OS option in TouchGFX Generator becomes available if no operating system is enabled in the Middleware and Software Packs category, or selected as an X-CUBE in STM32CubeMX.

    Further reading
    有关运行裸机应用程序时TouchGFX Generator生成的代码详细信息,请参阅Real Time Operating System(实时操作系统)场景。

    FreeRTOS

    To be able to select CMSIS_RTOS_V1 or CMSIS_RTOS_V2 in TouchGFX Generator, FreeRTOS must be enabled in the Middleware and Software Packs category in STM32CubeMX:

    STM32CubeMX项目中启用了FreeRTOS

    Some TouchGFX Board Setups are not configured to use FreeRTOS Middleware by default, but ThreadX or NoOS (e.g. STM32U599). If you still want to use FreeRTOS with these TouchGFX Board Setups, you must download the X-CUBE-FreeRTOS pack in the Software Packs Components Selector of STM32CubeMX, and enable it.

    FreeRTOS enabled in the Software Packs Components Selector

    Further reading
    有关如何为TouchGFX应用程序配置FreeRTOS(CMSIS_RTOS_V1和CMSIS_RTOS_V2)的详细信息,请参阅 Real Time Operating System发(实时操作系统)场景。

    ThreadX

    ThreadX can be enabled either by selecting a X-CUBE Software Pack or by enabling the native ThreadX Middleware from STM32CubeMX, if available for the selected MCU device.

    The developer should find out if ThreadX is configured as an X-CUBE Software Pack or as native ThreadX Middleware for their specific MCU family.

    Note
  • 默认情况下,所有新型STM32 MCU器件均支持直接来自STM32CubeMX Middleware(中间件)类别的ThreadX,无需另外下载。 TouchGFX 板级支持包将缓慢过渡到使用可用的ThreadX中间件或X-CUBE-AZRTOS软件包。
  • 提供ThreadX支持的X-CUBE-ARTOS-XX软件包适用于各种STM32 MCU系列,可在STM32CubeMX中的Embedded Software Packages Manager(嵌入式软件包管理器)中找到。
  • 以下各节将展示如何将ThreadX作为Middleware(中间件)AZRTOS Software Pack(软件包)用于应用程序。

    Enabling ThreadX from Middleware and Software Packs category

    To be able to select ThreadX in TouchGFX Generator, ThreadX must be enabled in the Middleware and Software Packs category in STM32CubeMX.

    ThreadX from Middleware and Software Packs enabled in STM32CubeMX project

    Once enabled, the ThreadX option becomes available in TouchGFX Generator.

    Further reading
    有关如何将ThreadX配置为TouchGFX应用程序的本地中间件的详细信息,请参阅Real Time Operating System(实时操作系统)场景。

    X-CUBE软件包启用ThreadX

    要在TouchGFX Generator中选择ThreadX,必须在STM32CubeMX中的Software Packs Component Selector(软件包组件选择器)中启用AZRTOS Software Pack(软件包)。 在项目中,单击 STM32CubeMX项目菜单中的“Select Components(选择组件)”按钮或Alt+o

    选择STM32CubeMX中的附加软件

    下图显示了项目中如何使能AZRTOS软件包。 选择RTOS ThreadX并点击Core复选框以启用ThreadX。 下载并安装软件包(如尚未完成)。

    从X-CUBE-AZRTOS软件包启用ThreadX

    After having added ThreadX Software Pack to the project, the X-CUBE should be visible under the Middleware and Software Packs category on the left side of the project menu in STM32CubeMX.

    STM32CubeMX项目中启用了X-CUBE-AZRTOS的ThreadX

    Once ThreadX is enabled, it also becomes an available option in TouchGFX Generator, and after selecting it the Memory Pool Size and Memory Stack Size values will appear:

    ThreadX selected in TouchGFX Generator

    Those values should be large enough to contain threads ressources.

    Further reading
    有关如何将ThreadX配置为TouchGFX应用程序的X-CUBE的详细信息,请参阅Real Time Operating System(实时操作系统)场景。

    其他兼容CMSIS的OS

    当开发人员采用与STM32CubeMX提供的操作系统(FreeRTOS和ThreadX)不同的其他兼容CMSIS的操作系统时,他必须手动完成RTOS配置和任务定义。 TouchGFX Generator将生成一个开发人员必须实现的空OSWrappers接口。 通常,需要执行以下手动步骤:

    1. 配置RTOS
    2. 实现OSWrappers接口
    3. 定义任务以运行TouchGFX (MX_TouchGFX_Process)
    4. 启动调度器

    调用MX_TouchGFX_Process,以启动任务处理程序中的TouchGFX Engine主循环。

    void MX_TouchGFX_Process(void);