跳转到主要内容

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
    当应用程序中的硬件选项也启用了矢量渲染,TouchGFX生成器会为*模板缓冲*创建另一个内存池来执行矢量渲染操作。 此内存池的大小为:(显示宽度*显示高度字节)+5kb额外边距。 因此,将消耗更多的RAM。 用户可选择软件选项,以降低性能为代价节省RAM。

    实时操作系统

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