30天學會STM32的HAL庫使用——第三天GPIO輸入篇

一 前言

之前兩天學習了系統時鐘配置、GPIO輸出控制LED的學習後,我們來到了第三天,今天我們來學習GPIO的輸入,瞭解如何透過GPIO口來檢測輸入訊號的電平或事件。透過板子上的一個按鍵來實現點亮LED燈或熄滅LED燈。

二 工程配置

利用CubeMX軟體配置系統時鐘、GPIO口的方式,系統時鐘配置略過,GPIO輸出控制LED的配置略過,下面看按鍵輸入GPIO口的配置,GPIO口配置成輸入Input模式,上拉還是下拉根據自己硬體來選擇,這裡我們選擇上拉,因為我們的按鍵設定是按下鍵後等於零,未按下鍵為1,所以初始化配置時選擇上拉。按鍵也可以用外部中斷觸發事件來判斷,本次實驗,我們分別用兩種方式實現按鍵檢測。

30天學會STM32的HAL庫使用——第三天GPIO輸入篇

按鍵的硬體原理

30天學會STM32的HAL庫使用——第三天GPIO輸入篇

按鍵輸入檢測配置

30天學會STM32的HAL庫使用——第三天GPIO輸入篇

外部中斷檢測模式配置

三 功能實現

1 工程修改

上述配置完成後,生成IAR工程檔案,開啟工程檔案,將除錯口選擇為J-LINK,SWD介面模式。開啟工程後,在GPIO。c的檔案中對生成的程式碼進行修改,使得可以透過宏定義來選擇按鍵檢測模式:輸入檢測還是外部中斷檢測。

30天學會STM32的HAL庫使用——第三天GPIO輸入篇

按鍵GPIO初始化程式碼修改

2 新增應用程式碼

輪詢按鍵方式:

初始化完成後,新增按鍵控制的應用程式碼,實現按鍵按下後,奇數次LED燈點亮,偶數次LED燈熄滅的功能。具體程式碼如下:

然後在主函式中輪詢這個按鍵函式就可以實現按鍵功能。

30天學會STM32的HAL庫使用——第三天GPIO輸入篇

按鍵掃描函式

30天學會STM32的HAL庫使用——第三天GPIO輸入篇

主函式的主迴圈中新增按鍵輪詢函式

2 中斷按鍵方式:

在HAL庫提供的GPIO中斷服務函式中新增自己的程式碼,該函式HAL庫中已定義,使用者只需完善自己的程式碼即可,不需要重新定義,在這裡我們判斷是否有鍵按下,若有中斷產生,按鍵標誌位置1,啟動定時器去計時,判斷按鍵是否有效。

30天學會STM32的HAL庫使用——第三天GPIO輸入篇

GPIO的外部中斷服務回撥函式

按鍵有效性判斷計時回撥函式,將該函式新增到Systick的中斷服務函式中。

30天學會STM32的HAL庫使用——第三天GPIO輸入篇

按鍵計時回撥函式

30天學會STM32的HAL庫使用——第三天GPIO輸入篇

新增GPIO按鍵中斷服務函式

四 實驗結果

將上述幾點修改的地方完善後,編譯下載到開發板中,就可以實現按鍵功能了,奇數次按鍵LED1會點亮,偶數次按鍵LED1會熄滅。這只是演示了GPIO口作為輸入的一個demo,僅供學習參考。