メイン・コンテンツまでスキップ

トリガとしての外部イベント

このセクションでは、物理ボタンなどからの外部イベントを、TouchGFX Designerでトリガとして使用する方法について説明します。

物理ボタンなど、ペリフェラルからの入力にアプリケーションが応答するための要件として、マイクロコントローラ上のGPIOピンが基板の回路図に従って構成されている必要があります。

この例では、H7B3I-DKを使用して、物理ボタンの押下にUIを反応させる方法を示します。 この例ではポーリングを使用しますが、EXTIを代わりに使用することもできます。

回路図は次のサイトからダウンロードできます: st.com

Tip
GPIOピンが回路図にあれば、TouchGFX Designerでイベントへのトリガとして使用できます。

ボード立ち上げ

次の図はSTM32H7B3I-DKボードの回路図の一部を示しており、それ以降の例では、STM32CubeMXを使用して、ボタンの状態を読み取るために入力として適切なGPIOポートとピンを設定しています。

STM32H7B3I-DK TouchGFXボードの設定に基づいて、新しいアプリケーションを開始します。 この図では、ユーザ・ボタン(User Button)がGPIOポートCのピン13(PC13)に接続されています。

STM32CubeMXで、PC13を入力として設定し、System CoreカテゴリのGPIOセクションでプルダウンに設定できます。

以下のコードは、ピン配置ビュー(Pinout View)で指定された名前に基づいて、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プロジェクト・ファイル内に名前と値のマッピングを作成する必要があります。

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

これで、インタラクションの作成時に"Hardware Button is clicked"をトリガとして使用できるようになります。 .touchgfxファイルで定義された"Key"と"Name"のペアを選択すると、"Change screen"などのアクションを指定することができます。

ターゲット上で実行

Designerで"Generate code"を押すと、STM32CubeIDEプロジェクトが開くので、デバッグ設定を行います。

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#