跳轉到主要內容

效能測量

TouchGFX Core會暴露許多訊號,可用於測量效能。 使用者可檢測應用程式,以便在內部觸發前述訊號時觸發個別GPIO,透過視覺化方式呈現「渲染時間」及其他實用訊號。 本文說明如何在CubeMX設定GPIO,以及各項暴露訊號的功能。

Further reading

由TouchGFX Core暴露的訊號

以下訊號是在TouchGFX Core標頭檔GPIO.hpp之中定義:

訊號說明
VSYNC_FREQTouchGFX應用程式是由內部或外部事件所驅動,例如LTDC、外部周邊設備或硬體計時器造成的中斷事件。 TouchGFX引擎完成渲染時,會等待VSYNC訊號。 其中會指出顯示器何時完成更新,讓TouchGFX能夠開始渲染下個畫面。
RENDER_TIME這是指從畫面傳輸至TouchGFX一直到渲染階段結束時的時間。
FRAME_RATE這是使用者應用程式的畫面播放速率。 訊號會在畫面更新時切換。 如果渲染時間超過顯示器定義的最大渲染時間,畫面播放速率就會下降。
MCU_ACTIVE只要TouchGFX使用MCU,此訊號就會為High。 如果傳輸了影像緩衝區且TouchGFX正在運作,也就是不在閒置狀態時,MCU就處於使用中狀態。

STM32CubeMX GPIO設定

STM32CubeMX可用於簡單設定GPIO輸出腳位。 向每個腳位提供User Label (使用者標籤),則TouchGFX Generator在TouchGFXGPIO.cpp之中產生的程式碼,就可瞭解由TouchGFX Core在內部接收訊號時要切換的腳位。

Pinout (腳位輸出)視窗中設定四個未使用的GPIO作為輸出。 在STM32CubeMX GPIO IP之中向每個腳位提供User Label (使用者標籤);前述使用者標籤與TouchGFX Core定義的特定名稱相符,應透過GPIO觸發(例如VSYNC_FREQRENDER_TIMEFRAME_RATEMCU_ACTIVE。 ).

TouchGFXGPIO類別

TouchGFX Generator會在檔案TouchGFXGPIO.cpp之中為GPIO類別產生函數。 TouchGFX Core會在TouchGFXGPIO類別呼叫函數,然後依據STM32CubeMX之中的使用者設定切換腳位。 GPIO::set會顯示在以下程式碼片段中:

TouchGFXGPIO.cpp
void GPIO::set(GPIO_ID id)
{
switch (id)
{
case GPIO::VSYNC_FREQ:
#if defined(VSYNC_FREQ_GPIO_Port) && defined(VSYNC_FREQ_Pin)
HAL_GPIO_WritePin(VSYNC_FREQ_GPIO_Port, VSYNC_FREQ_Pin, GPIO_PIN_SET);
#endif
break;
case GPIO::RENDER_TIME:
#if defined(RENDER_TIME_GPIO_Port) && defined(RENDER_TIME_Pin)
HAL_GPIO_WritePin(RENDER_TIME_GPIO_Port, RENDER_TIME_Pin, GPIO_PIN_SET);
#endif
break;
case GPIO::FRAME_RATE:
#if defined(FRAME_RATE_GPIO_Port) && defined(FRAME_RATE_Pin)
HAL_GPIO_WritePin(FRAME_RATE_GPIO_Port, FRAME_RATE_Pin, GPIO_PIN_SET);
#endif
break;
case GPIO::MCU_ACTIVE:
#if defined(MCU_ACTIVE_GPIO_Port) && defined(MCU_ACTIVE_Pin)
HAL_GPIO_WritePin(MCU_ACTIVE_GPIO_Port, MCU_ACTIVE_Pin, GPIO_PIN_SET);
#endif
break;
}
}

如果腳位的使用者標籤為VSYNC_FREQ,CubeMX將會自動為連接埠及腳位產生相符的符號,例如VSYNC_FREQ_GPIO_PortVSYNC_FREQ_Pin。 若要測量所設定的訊號,請使用示波器或邏輯分析儀。 下圖為邏輯分析儀顯示四種訊號的每一種訊號。 應用程式於STM32F746G-DISCO執行,使用動畫圖像UI範例。 用於此應用程式的VSYNC訊號是由LTDC每16ms產生一次。