跳转到主要内容

Driver

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

TouchGFX Generator驱动程序设置

应用滴答计时源

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

  • LTDC- 如果在“显示”组中将LTDC选作接口,则应用计时源可以为“LTDC”。 这意味着TouchGFX Generator将在TouchGFXGeneratedHAL类中生成驱动程序函数(LTDC中断处理程序),该函数通过调用OSWrappers::signalVSync()来驱动应用程序向前执行。
  • 自定义和FMC - 在这种情况下,开发人员需要实现一个处理程序,来重复调用OSWrappers::signalVSync()函数,驱动应用程序向前执行。
Further reading
有关实现自定义应用程序滴答计时源的更多信息,请参阅FMC和SPI显示接口场景

DMA2D Accelerator (ChromART)

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

  • 禁用-应用程序只使用CPU进行渲染。
  • 启用 - 应用程序在Chrom-ART可用的情况下使用Chrom-ART来搬运和混合像素,释放CPU负载。 驱动程序由TouchGFX Generator生成,不需要开发人员采取任何措施。
  • 自定义 - TouchGFX Generator 生成通用型TouchGFX DMA类,该类由TouchGFX 引擎中的DMA接口派生而来,开发人员必须为自定义图形加速器实现的成员函数。

要在ToughGFX 生成器中选择DMA2D加速器,必须在STM32CubeMX的Multimedia类别中启用DMA2D:

对于支持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图形加速,开发人员有两个选项:

    • 禁用-应用程序不使用GPU进行图形渲染。
    • 启用-应用程序TouchGFX在NeoChrom可用的情况下使用NeoChrom执行图形渲染加速操作。 驱动程序由TouchGFX Generator生成,不需要开发人员采取任何措施。

    要在ToughGFX 生成器中选择GPU2D加速器,必须在STM32CubeMX的Multimedia 类别中启用:

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

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

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

    GPU2D驱动程序设置

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

    Note
    When Vector Rendering is also enabled with the hardware option in the application another memory pool for a *stencil buffer* to perform vector rendering operations is created by the TouchGFX Generator. The size of this memory pool is: (Display Width * Display Height bytes) + 5kb extra margin. This will therefore consume more RAM. Users can opt for the software option to save RAM at the expense of slower performance.

    实时操作系统

    开发人员可使用任何支持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

    希望在无操作系统的情况下运行TouchGFX时,如果中间件和软件包类别或者X-CUBE中未启用操作系统,则ToughGFX 生成器中的无OS选项变为可用。

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

    FreeRTOS

    选择ToughGFX 生成器中的CMSIS_RTOS_V1或CMSIS_RTOS_V2时,必须启用STM32CubeMX 中间件和软件包类别中的FreeRTOS:

    STM32CubeMX项目中启用了FreeRTOS

    某些TBS默认设置未配置使用FreeRTOS中间件,而是使用ThreadX或NoOS(例如:STM32U599)。 如果用户仍然想将FreeRTOS与此类TBS一起使用,则必须在STM32CubeMX的软件包组件选择器中下载X-CUBE-FreeRTOS包并启用。

    在软件包组件选择器中启用FreeRTOS

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

    ThreadX

    可通过选择X-CUBE软件包或启用STM32CubeMX中的Native ThreadX 中间件(如果适用于选定的MCU设备)来启用ThreadX。

    开发人员应了解ThreadX是否配置为X-CUBE软件包或特定MCU系列的Native ThreadX Middleware(原生ThreadX中间件)。

    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(软件包)用于应用程序。

    中间件和软件包类别启用ThreadX

    选择ToughGFX 生成器中的ThreadX时,必须启用STM32CubeMX中间件和软件包类别中的ThreadX:

    STM32CubeMX项目中启用来自中间件和软件包的ThreadX

    启用后,ThreadX选项在ToughGFX 生成器中可用。

    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

    将ThreadX软件包添加到项目后,X-CUBE应在STM32CubeMX项目菜单左侧的中间件和软件包类别下可见。

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

    一旦启用ThreadX,它将成为ToughGFX 生成器中的一个可用选项,选择后,将显示内存池大小内存堆栈大小值:

    在ToughGFX 生成器中选择ThreadX

    此类值应足够大,以包含线程资源。

    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);