單片機基礎——使用GPIO掃描檢測按鍵

  • 2020 年 3 月 14 日
  • 筆記

1. 準備工作

硬體準備

開發板
首先需要準備一個小熊派IoT開發板,並通過USB線與電腦連接。

軟體準備

需要安裝好Keil - MDK及晶片對應的包,以便編譯和下載生成的程式碼,可參考MDK安裝教程

2.生成MDK工程

選擇晶片型號

打開STM32CubeMX,打開MCU選擇器:

搜索並選中晶片STM32L431RCT6:

配置時鐘源

  • 如果選擇使用外部高速時鐘(HSE),則需要在System Core中配置RCC;
  • 如果使用默認內部時鐘(HSI),這一步可以略過;

這裡我都使用外部時鐘:

配置LED的GPIO引腳

查看小熊派開發板的原理圖,如下:

所以接下來我們選擇配置PC13引腳:

設置用戶標籤為LED:

配置按鍵的GPIO引腳

查看原理圖,確定控制按鍵引腳,這裡我們的F1按鍵接的是PB2,F2按鍵接的是PB3。

所以接下來我們選擇配置PB2引腳和PB3引腳:

因為沒有設置硬體上拉,所以我們配置開啟上拉電阻,並設置用戶標籤為KEY1和KEY2:

配置時鐘樹

STM32L4的最高主頻到80M,所以配置PLL,最後使HCLK = 80Mhz即可:

生成工程設置

程式碼生成設置

最後設置生成獨立的初始化文件:

生成程式碼

點擊GENERATE CODE即可生成MDK-V5工程:

3. 在MDK中編寫、編譯、下載用戶程式碼

編寫用戶程式碼

打開MDK工程,在main.c中的main函數中編寫簡單的用戶程式碼,這裡的程式碼意思為:一直循環讀取按鍵引腳的電平,當讀取到F1按鍵引腳為低電平時,LED燈引腳輸出高電平;當讀取到F2按鍵引腳為低電平時,LED燈引腳輸出低電平,所以當按下KEY1,LED點亮,按下KEY2,LED熄滅。

 1 int main(void)   2 {   3   4   HAL_Init();   5   6   SystemClock_Config();   7   8   MX_GPIO_Init();   9  10   while (1)  11   {  12     /* USER CODE BEGIN 3 */  13         if(0 == HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin))  14         {  15             HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET);  16         }  17         if(0 == HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin))  18         {  19             HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET);  20         }  21   }  22   /* USER CODE END 3 */  23 }

編譯程式碼

點擊如圖所示的按鈕編譯工程

編譯成功

設置下載器

點擊如圖所示按鈕打開設置頁面

進行下載設置,選擇“ST-Link Debugger”,並點擊“Settings”。

在“Flash Download”菜單下勾選“Reset and Run”選項,已達到燒錄程式後單片機自動複位並運行程式的目的。

下載運行

點擊"LOAD"按鈕即可燒錄程式碼到單片機中。

燒錄成功

實驗現象

下載運行後,實驗現象如下:

  • 上電複位時LED處於熄滅狀態;
  • 按下KEY1,LED點亮;
  • 按下KEY2,LED熄滅;

至此,我們已經學會了如何使用STM32CubeMX快速生成MDK的工程,以及如何使用 STM32CubeMX初始化GPIO進行按鍵檢測,下一節講述如何配置NVIC使用外部中斷檢測按鍵。

 

Tags: