跳轉到主要內容

外部事件作為觸發器

本節描述如何在TouchGFX Designer中使用外部事件(如物理按鈕)作為觸發器。

根據外設(如物理按鈕)輸入的應用要求,需要按照電路板原理圖配置MCU上的GPIO引腳。

在本例中,使用H7B3I-DK展示如何讓UI對物理按鈕按下的事件做出回應。 本例使用輪詢,但也可以使用外部中斷。

可從以下連結下載原理圖: st.com

Tip
如果GPIO引腳可讀取,可以在TouchGFX Designer中將其用作事件的觸發器。

開發板搭建

下圖所示為STM32H7B3I-DK板的一部分原理圖,後面的範例使用STM32CubeMX配置合適的GPIO端口和引腳,以作為輸入讀取按鈕狀態。

基於STM32H7B3I-DK TouchGFX開發板設置開始新的應用。 使用者按鈕連接到GPIO端口C引腳13(PC13)。

在STM32CubeMX PC13中,引腳PC13可配置為輸入,也可以在 system core GPIO 的部分,將其配置為下拉(pull-down)。

下面的程式碼是STM32CubeMX基於引腳排列的圖示中所生成的名稱。

#define MCU_ACTIVE_GPIO_Port GPIOI
#define VSYNC_FREQ_Pin GPIO_PIN_12
#define VSYNC_FREQ_GPIO_Port GPIOA
#define BTN_USER_Pin GPIO_PIN_13
#define BTN_USER_GPIO_Port GPIOC
#define LED2_Pin GPIO_PIN_2
#define LED2_GPIO_Port GPIOG
#define LCD_INT_Pin GPIO_PIN_2
static void MX_GPIO_Init(void)
__HAL_RCC_GPIOJ_CLK_ENABLE();
__HAL_RCC_GPIOI_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
...
/*Configure GPIO pin : BTN_USER_Pin */
GPIO_InitStruct.Pin = BTN_USER_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(BTN_USER_GPIO_Port, &GPIO_InitStruct);
}

TouchGFX HAL開發

TouchGFX引擎渲染週期的一部分是檢查可能的輸入

在輸入狀態可讀取(外部事件)後,TouchGFX HAL可通過ButtonController介面讀取此事件,這是渲染週期的一部分。

#include <platform/driver/button/ButtonController.hpp>
class H7B3ButtonController : public touchgfx::ButtonController
{
virtual void init() { }
virtual bool sample(uint8_t& key)
{

if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) != GPIO_PIN_RESET)
{
key = 1;
return true;
}
return false;
}
private:

};

...
H7B3ButtonController bc;
void touchgfx_init()
{
...
hal.initialize();
hal.setButtonController(&bc);
}

TouchGFX Designer

為了在TouchGFX Designer中交互使用 ButtonController 採樣的值,必須在 .touchgfx 專案檔案中創建名稱或值映射(value-mapping)。

    "PhysicalButtons": [],
    "PhysicalButtons": [
{
"Key": 1,
"Name": "BTN_USER"
}
],

此後,在創建交互時,“硬體按鈕被點擊”可作為觸發器使用。 用戶可通過選擇.touchgfx檔中定義的“鍵”/“名稱”對來指定操作,如“變更螢幕”。

在目標上運行

在設計軟體中按下“生成程式碼”後,打開STM32CubeIDE專案,並配置Debug配置。

https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-mpu-eval-tools/stm32-mcu-mpu-eval-tools/stm32-discovery-kits/stm32h7b3i-dk.html#