本文例子參考《STM32單片機開發實例——基於Proteus虛擬模擬與HAL/LL庫》 源代碼:https://github.com/LanLinnet/STM33F103R6 項目要求 按下按鈕控制LED燈的亮滅。 硬體設計 在第一節的基礎上,在Proteus中添加電路如下圖所示。 打開CubeM ...
本文例子參考《STM32單片機開發實例——基於Proteus虛擬模擬與HAL/LL庫》
源代碼:https://github.com/LanLinnet/STM33F103R6
項目要求
按下按鈕控制LED燈的亮滅。
硬體設計
- 在第一節的基礎上,在Proteus中添加電路如下圖所示。
- 打開CubeMX,按照建立工程,配置PC0引腳為GPIO_Output,PC1引腳為GPIO_Input。點擊“Generator Code”生成Keil工程。
軟體編寫
- 點擊“Open Project”在Keil中打開工程,雙擊“main.c”文件。
- 本次模擬我們新用到讀引腳狀態函數
HAL_GPIO_ReadPin()
,其官方文檔API介紹如下圖所示。
- 由於按鍵按下時,其內部金屬箔通斷瞬間在機械振動的作用下會出現10ms左右的通斷不穩定狀態,我們在這裡採用軟體消抖(延時)的方式消除其影響。
在while(1)迴圈中輸入以下代碼if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_1)==0) //判斷按鍵是否被按下,按下為低電平 { HAL_Delay(20); //軟體消抖 if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_1)==0) //再次判斷按鍵是否被按下,按下為低電平 { HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_0); //PC0電平反轉 while(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_1)==0); //阻塞 HAL_Delay(20); //軟體消抖 } }
聯合調試
- 點擊運行,生成HEX文件。
- 在Proteus中載入相應HEX文件,點擊運行,可以看到LED燈點亮。
按下按鈕,LED燈熄滅