STM32CubeMX+HAL庫學習之三第二個實驗:按鍵輸入
????上面我們已經學會了如何通過引腳輸出電平。既然我們已經學會輸出,那接下來就是學怎么接受外界的電平輸入。接下來我們通過檢測按鍵輸入這一個例子來演示一下如何獲得引腳的外部電平輸入。
1.?選擇所需要輸入的引腳
通過查詢核心板的原理圖,我們知道開發(fā)板上的K0按鍵對應了STM32的PA0引腳,我們將其設置為GPIO_Input(即輸入模式)即可。同時保留上一個實驗中的LED輸出,用以觀察按下按鍵產生的效果。

?

?
2.調整輸入輸出設置
LED燈的輸出,仍然按照上一個工程的設置即可。而對于輸入引腳的設置,則有三種選擇:No pull-up and No pull-down(針腳不上下拉) ?Pull-up(上拉) ?Pull-down(下拉)。這里的選擇代表了針腳的電平設置。例如我們選擇了上拉,則針腳就會具備一個高電平,檢測不了外界的高電平,因為沒有電平差,而可以檢測外界的低電平,下拉也同理。不上下拉狀態(tài)理論上可以檢測到高低電平。這里我們只用檢測低電平,同時為了減輕外界干擾,我們選擇上拉。

?
配置完成,選擇生成代碼即可。
Keil5中的操作:
這次,我們同樣也在主函數的無限循環(huán)中編寫業(yè)務代碼。上一章講過,HAL_GPIO_ReadPin是用于讀取引腳電平的,所以我們這里直接使用這個函數,其返回值是引腳的電平GPIO_PIN_RESET或者GPIO_PIN_SET。從原理圖我們知道當按鍵按下的時候,其引腳會被接地,處于低電平。所以在if語句中我們選擇當其檢測到低電平時
,自動執(zhí)行下面的函數,用以處理按鍵按下的情況。而while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET);語句的作用是判斷按鍵是否已經被松開,用以消除按下按鍵時的抖動,以免影響檢測效果。當我們檢測到按鍵被按下,并且已經松開的時候,便會執(zhí)行HAL_GPIO_TogglePin函數,上面我們講過,這個函數的作用是翻轉該引腳的電平,即高低電平互換。此處的作用是改變LED燈的亮暗狀態(tài)。即,整個代碼的實現效果應該是,當按下按鍵后,LED燈的亮暗狀態(tài)將會改變,從亮到熄滅或者重新亮起。

?
編譯無誤后通過FlyMcu燒錄至核心板中即可。
實驗現象:


?
按下按鍵之后,LED燈的亮滅狀態(tài)發(fā)生改變。