外部事件作為觸發器
本節描述如何在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配置。