跳轉到主要內容

10. 按鈕

動機

Physical buttons can function as external events usable as triggers from TouchGFX Designer during application development, or simply used as events in the application backend.

Note
如果您的開發板無按鈕,請跳過此步。

目標

本節的目標是開發可用於後續TouchGFX HAL和/或相關應用開發中的程式碼。

驗證

以下是本節的驗證點:

驗證點基本原理
設定MCU必須配置MCU的 GPIO,以讀取按鈕狀態。
可讀取已連線的GPIO一旦開發了用於從GPIO讀取按鈕狀態的程式碼,就可以在隨後的TouchGFX HAL開發中使用該程式碼。
讀取操作按預期進行輪詢是應用程式渲染算圖時間的一部分。 如果輪詢時間太長,則應將其移至其他線程,或產生中斷。

先決條件

  • 按鍵必須連接到MCU的GPIO

執行

下圖顯示了按鈕的電路圖及與MCU的連線

在STM32CubeMX的System Core類別中的GPIO部分,可將 GPIO port C的腳位13(PC13)配置為輸入。

在下面的對話方塊中,我們還為GPIO配置了一個內部下拉清單。 如果您有一個外部下拉電阻器(如上圖所示),則不需要。 這種情況下,您可以選擇“無上拉和無下拉(No pull-up and no pull-down)”。

STM32CubeMX生成的程式碼將設置相應的GPIO port。 現在可以讀取輸入腳位:

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

性能符合預期

如果按鍵輪詢程式碼與TouchGFX應用程式在相同的執行緒中執行,可以在1 ms內輪詢按鈕的狀態。 否則,渲染將延遲過多。 如果您使用直接連接到GPIO的按鈕,不會有問題,但如果您使用I2C或類似的移位暫存器,可能會出現問題。 如果抽樣速度不夠快,可用考慮在後期將輪詢程式碼調整為獨立任務,或基於中斷讀取按鍵狀態。