STM32筆記(11):控制按鍵讓LED燈閃爍

上一篇文章利用 CubeMX 將自動產生的原始程式碼,在 Keil 稍做修改後,上傳 STM32 讓 LED 閃爍:STM32筆記(10):第一個CubeMX與Keil程式讓LED閃爍。本篇實作將繼續使用 CubeMX 與 Keil 配合,將 GPIO 設定為輸入並接上按鍵,當按鍵被按下時讓 LED 燈閃爍。

[電路連接圖]

將 LED (+)的一腳接 PA11 ,另一腳(-)接電阻 220 歐姆,電阻另一端接地;按鈕一腳接 PA12 ,另一腳接地。

[執行步驟]

(1) 執行 STM32CubeMX 後,下拉選單[File],再選擇 [New Project],接著選擇正確的開發板型號,按下[Start Project]繼續:

(2) 設定 PA11 為 Output 當作 LED 輸出Pin,將右方的晶片接腳設為「GPIO_Output」,將「Maximun output speed」設為「High」,並將「User Label」改成「LED」。

(3) )設定 PA12 為 Input 當作按鈕輸入Pin,右方的晶片接腳設為「GPIO_Input」,GPIO Pull-up/Pull-down 設為「No pull-up and no pull down」,並將「User Label」改成「Button」。

(4) 設定 Debug 為「Serial Wire」。

(5) 設定外部時鐘 High Speed Clock(HSE)為「Crystal/Ceramic Resonator」
STM32CubeMX的外部時鐘配置可選類型為 Disable 、BYPASS Clock Source(旁路時鐘源)及Crystal/Ceramic Resonator(石英/陶瓷 晶振)三種類型。

(6) 按下「Clock Configuration」頁簽,設定HCLK(MHz)為72,72為最高速度。

(7) 設定專案名稱,修改輸出的範本「Toolchain /IDE」為「MDK-ARM」程式編輯/編譯工具,按下[CENERATE CODE]產生 C 語言原始程式碼。

(8) 執行 Keil,編輯程式
開啟剛剛產生的 Project檔,在放置的目錄內有個副檔名為.uvprojx的專案檔,編輯 main.c ,在 int main(void)那段副程式中的 while迴圈前,加入以下程式碼,將LED 的 GPIO_PIN 重置:
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11,GPIO_PIN_RESET);	
在 int main(void)那段副程式中的 while迴圈內,加入以下程式碼,判斷是否按下按鈕,讓 LED燈閃爍:
	    
if (!(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_12)))  {   // 判斷是否按下按鈕
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_11);   // 讓 LED 閃爍
    HAL_Delay(100);
   }
else {
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11,GPIO_PIN_RESET);
   }   
如下圖右方畫面:

[結果]


[參考資料]

Post a Comment

較新的 較舊