跳轉到主要內容

驅動程式

驅動程式一節可協助開發人員為TouchGFX AL的各種功能選擇驅動程式。

TouchGFX Generator驅動程式設定

應用時標源(Application Tick Source)

應用程式的應用時標源,定義了如何驅動應用程式進行運作。 開發人員有以下的選項:

  • LTDC:如果在「Display」(顯示)群組將介面設為「LTDC」,則應用時標源即可設定為「LTDC」。 這表示TouchGFX Generator將在TouchGFXGeneratedHAL類別中置入驅動程式函數(LTDC中斷處理常式),並在此驅動程式函數中呼叫OSWrappers::signalVSync()以驅動應用程式運作。
  • Custom and FMC (客製和FMC):在這種情況下,開發人員需要實作處理常式,以重複呼叫OSWrappers::signalVSync()的方式驅動應用程式運作。
Further reading
請參閱FMC及SPI顯示介面情境,以瞭解更多有關實作客製應用時標源的資訊

DMA2D加速器(ChromART)

關於DMA2D圖形加速開發人員有三個選項:

  • No(否):應用程式只使用CPU進行渲染。
  • Yes(是):應用程式在可能情況下使用ChromART晶片來移動和混合像素,以釋放CPU週期。 驅動程式由TouchGFX Generator產生,因此開發人員不需要做任何動作。
  • Custom (客製):TouchGFX Generator會產生泛型TouchGFX DMA類別,繼承自TouchGFX引擎的DMA介面,並有開發人員必須實作用於客製圖形加速器的成員函數。

為了能在TouchGFX Generator中選擇DMA2D加速器,必須在STM32CubeMX的Multimedia(多媒體)類別中將其啟用:

對於支援DMA2D的MCU,DMA2D可於STM32CubeMX的Multimedia (多媒體)類別啟用。

TouchGFX Generator產生的DMA2D (ChromART)驅動程式,可支援兩種接收TransferCompleteInterrupt的方式:

  1. 使用STM32Cube HAL驅動程式,其中將回呼函數暫存到dma2d的控制程式碼(handle) hdma2d. XferCpltCallback
  2. 直接使用中斷處理常式DMA2D_IRQHandler ()

如果要在以上兩者之間進行切換,請於適用於DMA2D IP的STM32CubeMX之中,在NVIC Settings (NVIC設定)啟用或停用DMA2D全域中斷:

DMA2D全域中斷在STM32CubeMX System Core (系統核心)類別之下的NVIC設定啟用/停用

啟用全域中斷可產生選項1)的程式碼,停用全域中斷可產生選項2)的程式碼。

Note
  • 使用DMA2D的全域中斷時,請確保「IRQ處理常式」會呼叫「DMA2D HAL處理常式」。 這是預設的行為。
  • 如果在啟用全域中斷的情況下,停用DMA2D的「IRQ處理常式」及「呼叫 HAL處理常式」,就會造成永遠不會呼叫暫存的回呼。
  • GPU2D加速器(NeoChrom)

    GPU2D (NeoChrom)是圖形加速器,能夠加速TouchGFX之中許多的繪製操作,包括紋理映射及向量渲染。 其中可支援RGB565、RGB888及ARGB8888格式的影像緩衝區。

    關於GPU2D圖形加速開發人員有兩個選項:

    • No(否):應用程式只使用CPU進行繪製。
    • Yes(是):應用程式會在可能情況下使用NeoChrom晶片,以加速由TouchGFX進行的許多繪製操作。 驅動程式由TouchGFX Generator產生,因此開發人員不需要做任何動作。

    為了能在TouchGFX Generator中選擇GPU2D加速器,必須在STM32CubeMX的Multimedia(多媒體)類別中將其啟用:

    對於支援GPU2D的MCU,GPU2D可在CubeMX中的Multimedia (多媒體)類別中啟用。

    Note
    只有在STM32CubeMX中專案的Multimedia (多媒體)區段啟用了GPU2D,GPU2D選項才可見。 此選項僅適用於STM32U599裝置,只有在Middlewares (中介軟體)區段的ThreadX RTOS也啟用的情況下,或是在執行裸機應用程式的情況下(無OS),才能搭配使用TouchGFX。

    啟用時,TouchGFX Generator會出現新的區段(GPU2D Driver (GPU2D驅動程式)):

    GPU2D驅動程式設定

    GPU2D Command List Size (GPU2D指令清單大小)設定,可依據位元組為單位設定GPU2D使用的指令清單大小。

    GPU2D Memory Pool Location (GPU2D記憶體集區位置)設定可讓使用者設定GPU2D使用的記憶體集區所在位置。 緩衝區在記憶體之中必須按8位元組對準。 以下為可用選項:

    • By Allocation (依分配):允許連結器將記憶體集區置於8位元組對準位址。
    • By Address (依位址):允許使用者定義記憶體集區的起始位址。 如果輸入的位址並非8位元組對準,就會在TouchGFX Generator出現錯誤。
    Note
    TouchGFX Generator所建立記憶體集區的總大小,需視向量渲染設定而定。
    • 如果向量渲染為Disabled (停用),記憶體集區的總大小為:1kb信號緩衝區+GPU2D指令清單大小+ 5kb額外空間
    • 如果向量渲染為Enabled (啟用),則記憶體集區的總大小為:1kb信號緩衝區+ GPU2D指令清單大小+ (顯示寬度*顯示高度位元組) + 256位元組LUT + 512位元組梯度+ 5kb額外空間

    即時作業系統

    開發人員可在TouchGFX使用任何的RTOS(甚至不使用作業系統)。 如抽象層架構所述,TouchGFX引擎會依據使用者所選的RTOS,使用OSWrappers介面來同步本身的主要事件迴圈與影像緩衝區存取。 開發人員在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)的情況下執行裸機的驅動程式。

    無OS

    如果需要在沒有作業系統的情況下執行TouchGFX,只要在STM32CubeMX中的Middleware and Software Packs(中介軟體及套裝軟體)類別沒有啟用作業系統,或是選擇X-CUBE,TouchGFX Generator中的No OS(無OS)選項就會出現。

    Further reading
    請參閱即時作業系統情境取得更多資訊,以瞭解在執行裸機應用程式時由TouchGFX Generator產生的程式碼。

    FreeRTOS

    為了能在TouchGFX Generator中選擇CMSIS_RTOS_V1或CMSIS_RTOS_V2,必須在STM32CubeMX的Middleware and Software Packs(中介軟體及套裝軟體)類別中啟用FreeRTOS:

    在STM32CubeMX專案中啟用的FreeRTOS

    部分TouchGFX開發板設定並未預設設定使用FreeRTOS中介軟體,而是使用ThreadX或NoOS(例如STM32U599)。 如果您仍希望以這類TouchGFX開發板設定使用FreeRTOS,就必須在STM32CubeMX的Software Packs Components Selector(套裝軟體元件選擇器)下載X-CUBE-FreeRTOS套件並加以啟用。

    FreeRTOS於Software Packs Components Selector(套裝軟體元件選擇器)之中啟用

    Further reading
    請參閱即時作業系統情境取得更多資訊,以瞭解如何為TouchGFX應用程式設定FreeRTOS (CMSIS_RTOS_V1及CMSIS_RTOS_V2)。

    ThreadX

    如要啟用ThreadX,可選擇X-CUBE套裝軟體,或是由STM32CubeMX啟用原生ThreadX中介軟體(如果適用於選定的MCU裝置)。

    開發人員應能發現ThreadX是設定為X-CUBE套裝軟體或原生ThreadX中介軟體,以用於特定的MCU系列。

    Note
  • 預設情況下,所有新型STM32 MCU裝置將可由STM32CubeMX Middleware(中介軟體)類別直接支援ThreadX,無需另外下載套件。 TouchGFX開發板支援套件將緩慢過渡到使用可用的ThreadX中介軟體或X-CUBE-AZRTOS套裝軟體。
  • X-CUBE-AZRTOS-XX套裝軟體提供的ThreadX支援,已可用於各式各樣的STM32 MCU系列,可在STM32CubeMX的Embedded Software Packages Manager(嵌入式套裝軟體管理程式)之中找到。
  • 下節將說明如何為應用程式啟用ThreadX作為中介軟體AZRTOS套裝軟體

    Middleware and Software Packs(中介軟體及套裝軟體)類別啟用ThreadX

    為了能在TouchGFX Generator中選擇ThreadX,必須在STM32CubeMX的Middleware and Software Packs(中介軟體及套裝軟體)類別中啟用ThreadX。

    STM32CubeMX專案中啟用的中介軟體及套裝軟體ThreadX

    啟用之後,ThreadX選項就會出現在TouchGFX Generator之中。

    Further reading
    請參閱即時作業系統情境取得更多資訊,以瞭解如何為TouchGFX應用程式將ThreadX設定為原生中介軟體。

    X-CUBE套裝軟體啟用ThreadX

    為了能在TouchGFX Generator中選擇ThreadX,必須在STM32CubeMX中的Software Packs Component Selector (套裝軟體元件選擇器)中啟用AZRTOS套裝軟體。 請在專案中點擊「Select Components」(選擇元件)按鈕或 Alt + o (位在STM32CubeMX的專案選單)。

    在STM32CubeMX選擇其他軟體

    下圖顯示如何為專案啟用AZRTOS套裝軟體。 請選擇RTOS ThreadX,然後勾選Core (核心)核取方塊以啟用ThreadX。 如果尚未完成,請下載及安裝套裝軟體。

    由X-CUBE-AZRTOS套裝軟體啟用ThreadX

    將ThreadX套裝軟體新增至專案後,X-CUBE應該會出現在STM32CubeMX專案選單左側的Middleware and Software Packs(中介軟體及套裝軟體)類別之下。

    X-CUBE-AZRTOS的ThreadX在STM32CubeMX專案中啟用

    ThreadX啟用後,也會在TouchGFX Generator之中成為可用選項;如果在Memory Pool Size(記憶體集區大小)和Memory Stack Size(記憶體堆疊大小)中加以選取,將會出現下列值:

    在TouchGFX Generator選取ThreadX

    前述值應足以包含執行緒資源。

    Further reading
    請參閱即時作業系統情境取得更多資訊,以瞭解如何為TouchGFX應用程式將ThreadX設定為X-CUBE。

    其他符合CMSIS標準的作業系統

    若開發人員不使用STM32CubeMX所提供的FreeRTOS和ThreadX,而要採用其他符合CMSIS標準的作業系統,就必須自行手動完成RTOS設定和工作定義。 TouchGFX Generator將產生空白的OSWrappers介面,必須由開發人員實作。 通常需要進行以下手動步驟:

    1. 設定RTOS
    2. 實作OSWrappers介面
    3. 定義工作以執行TouchGFX (MX_TouchGFX_Process)
    4. 啟動排程器

    呼叫MX_TouchGFX_Process以便在工作處理常式之中啟動TouchGFX引擎主迴圈。

    void MX_TouchGFX_Process(void);