跳轉到主要內容

LTDC/並列RGB

對於帶有TFT控制器的MCU(如STM32F429,STM32F746,STM32H7),TouchGFX Generator可產生部分HAL程式碼來設定LTDC將影像由影像緩衝區傳輸到顯示器。 一旦LTDC產生VSYNC中斷,產生的程式碼將啟動正確影像緩衝區的傳輸,同時藉由呼叫OSWrappers::signalVSync()來解除(unblock)TouchGFX引擎主迴圈(main loop)的阻塞狀態。

顯示介面

與開發人員必須自行實作整個驅動程式的「客製化」顯示介面相反,對LTDC來說TouchGFX Generator可產生支援LTDC設定所需的所有TouchGFX HAL程式碼。

在STM32CubeMX的分類(Categories)清單的「Multimedia」設定群組當中必須點選啟用LTDC之後才能在TouchGFX Generator當中看到「Parallel RGB (LTDC)」呈現可選取狀態。

一旦啟用LTDC之後,在TouchGFX Generator的「Display」展開項選當中即可看到並列RGB (LTDC)的選項。

在透過STM32CubeMX啟用了LTDC之後還需要完成以下的工作:

  1. 設定LTDC(GPIO與相關時間參數)以符合連接的顯示器規格
  2. 設定LTDC以符合所需的TouchGFX應用程式需求。

TouchGFX Generator可由STM32CubeMX當中讀取各項配置,並提供包含了警示、建議或相依關係的清單。 下圖顯示了最初在CubeMX中為任何MCU啟用LTDC時存在的相依關係清單(在本範例中,我們使用F429):

Note
在STM32CubeMX啟用了LTDC之後便可在TouchGFX Generator的介面中看到LTDC相關的建議、警示和錯誤。
相依關係描述
不支援的像素格式TouchGFXFbra的影像緩衝區驅動程式僅支援RGB565(16位元)和RGB888(24位元)格式。 LTDC的像素格式必須符合為TouchGFX HAL所選取的驅動程式。
配置了多餘的影像層TouchGFX只能利用單一影像層。 儘管TouchGFX應用程式可在啟用兩個影像層的情況下運作,這個警示是提醒使用者需要注意LTDC的配置可能有誤。 變更LTDC設定選項當中的影像層數。
融合因數應為PAxCA融合因數預設為Alpha常數(Alpha Constant)。

這應為Alpha常數 x 像素Alpha
Alpha常數為0LTDC影像層的Alpha常數預設為0。 此設定需大於0,最好是255,除非在應用當中需具有一個永久可得的全域Alpha設定。

在「Multimedia」設定群組當中啟用了LTDC週邊之後,還需要選取並列RGB (LTDC)顯示介面。

下圖可看到在滿足警示警息的LTDC設定之後,相依關係群組便從TouchGFX Generator介面中消失。

從STM32CubeMX讀取設定

在TouchGFX Generator當中選取「Parallel RGB (LTDC)」作為顯示介面之後,影像緩衝區的寬度高度便繼承自LTDC設定當中的水平起點/終點垂直起點/終點

根據顯示和應用程式尺寸定義第0層的尺寸後,相依關係視窗中將顯示一個新專案。

通常需要確保影像緩衝區的圖片寬度圖片高度符合視窗尺寸,以滿足警示要求。

Caution
若啟用LTDC,TouchGFX Generator將繼承LTDC所配置的寬度高度值。 但我們仍可以從TouchGFX Generator介面來修改寬度高度。 如果修改的值沒有遵循視窗LTDC影像層(Window LTDC Layer)的配置會導致配置的不匹配。

TouchGFX驅動程式/VSYNC信號

一旦並列RGB (LTDC)被選取為顯示介面,開發人員就可以選取LTDC作為應用時標驅動程式(Application Tick Driver)或TouchGFX驅動程式。

以下程式碼是根據LTDC的配置而產生的LTDC中斷處理程式(STM32F7)。 產生的中斷處理函式會自動解除TouchGFX引擎的主迴圈(main loop)的阻塞狀態。

extern "C"
irq void LTDC_IRQHandler(void)
{
if (LTDC->ISR & 1)
{
LTDC->ICR = 1;
if (LTDC->LIPCR == (LTDC->AWCR & 0x7FF) - 1)
{
//entering active area
OSWrappers::signalVSync();
}
}
}
Note
為使LTDC驅動程式能夠正常工作,使用者必須透過LTDC NVIC的設定或透過Global NVIC的設定來啟用LTDC全域中斷(global interrupt),同時開啟中斷處理程式碼的產生。

結論

由TouchGFX Generator啟用並列RGB (LTDC)顯示介面可產生所需的所有HAL程式碼。

  • 根據STM32CubeMX LTDC的配置來設定TouchGFX應用程式的寬度、高度和像素格式。 LTDC影像層的寬度高度會影響TouchGFX Designer中的畫布大小,LTDC像素格式會影響所需的TouchGFX影像緩衝區的驅動程式以及所生成圖資(asset)的格式。
  • 藉由選取LTDC作為應用時標(application tick)的來源以產生中斷處理程式碼來驅動TouchGFX引擎的主迴圈(main loop)。 通常藉由LTDC的配置開發人員即可一直使用LTDC配置提供的應用時標驅動程式(Application Tick Driver)。