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

10. 物理ボタン

動機

物理ボタンは、アプリケーション開発中にTouchGFX Designerからのトリガとして使用できる外部イベントとして機能したり、単にアプリケーションのバックエンドのイベントとして使用できます。

Note
ボードの立ち上げに物理ボタンが関係しない場合は、このステップをスキップしてください。

目標

このセクションの目標は、後続のTouchGFX HALやアプリケーションの開発で使用できるコードを開発することです。

検証

次の表に、このセクションの検証ポイントを示します。

検証ポイント検証内容
マイクロコントローラが設定されている接続された物理ボタンの状態を読み出せるようにマイクロコントローラのGPIOが設定されている必要があります。
接続されたGPIOを読み出せるGPIOから物理ボタンの状態を読み出すコードが開発されると、それを後続のTouchGFX HALの開発に使用できます。
期待される読出し性能が得られるポーリングは、アプリケーションのレンダリング時間に含まれます。 ポーリングに長時間を要する場合は、別のスレッドに移動するか、割込みに基づく動作に変更する必要があります。

前提条件

  • 物理ボタンは、マイクロコントローラのGPIOに接続する必要があります

作業内容

下図は、物理ボタンの回路図およびマイクロコントローラとの接続の回路図です。

STM32CubeMXで、GPIOポートCのピン13(PC13)を、[System Core]カテゴリの[GPIO]セクションで入力に設定します。

下のダイアログでは、GPIOの内部プルダウンも設定されています。 (上の図のように)外部プルダウン抵抗がある場合、この設定は必要ありません。 この場合は、[No pull-up and no pull-down]を選択できます。

STM32CubeMXが生成するコードによって、該当するGPIOポートが設定されます。 入力ピンは次のようになります。

main.c
uint8_t key;
if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) != GPIO_PIN_RESET)
{
key = 1;
}

期待通りの性能が得られること

TouchGFXアプリケーションと同じスレッドでコードを実行する場合、1 ms以内に物理ボタンの状態をポーリングできる必要があります。 そうでない場合、描画が大幅に遅れます。 このことは、GPIOに直接接続されているボタンを使用する場合には問題になりませんが、I2Cなどでシフトレジスタを使用するような場合には問題が生じる可能性があります。 サンプリングの速度が不足している場合は、後の段階で、コードを独立したタスクに移動するか、割込みに基づく動作に変更することを検討してください。