本文例子參考《STM32單片機開發實例——基於Proteus虛擬模擬與HAL/LL庫》 源代碼:https://github.com/LanLinnet/STM33F103R6 項目要求 STM32單片機控制單個LED燈亮滅,在PC0引腳控制LED燈以1s為周期閃爍。 硬體設計 在上一節的基礎上,在 ...
本文例子參考《STM32單片機開發實例——基於Proteus虛擬模擬與HAL/LL庫》
源代碼:https://github.com/LanLinnet/STM33F103R6
項目要求
STM32單片機控制單個LED燈亮滅,在PC0引腳控制LED燈以1s為周期閃爍。
硬體設計
- 在上一節的基礎上,在Proteus中添加電路如下圖所示。
- 打開CubeMX,按照建立工程,配置PC0引腳為GPIO_Output。點擊“Generator Code”生成Keil工程。
註意:我們這裡沒有選擇時鐘振蕩源,可以按照上一節中介紹的設置,也可以使用內部預設的RC振蕩器。同時我們使用預設的推輓輸出模式,也可以根據需要通過cubeMX修改GPIO引腳的輸出模式。
軟體編寫
- 點擊“Open Project”在Keil中打開工程,雙擊“main.c”文件。我們編寫的程式要儘量寫在
/* USER CODE BEGIN */
和/* USER CODE END */
之間,這樣我們如果後面在CubeMX中修改一些配置並重新“Generator Code”時就不會影響我們自己寫的代碼了。
- 我們在CubeMX配置硬體並生成工程時就已經添加了基於HAL/LL庫的初始代碼,其說明具體文檔可在ST官網下載。搜索GPIO可以看到與其相關的API函數有很多。
- 這裡我們使用
HAL_GPIO_TogglePin()
函數實現管腳電平反轉。
使用HAL_Delay()函數實現軟體延時。
在while(1)迴圈中輸入以下代碼HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_0); //翻轉PC0輸出狀態 HAL_Delay(500); //延時500ms
聯合調試
- 點擊運行,生成HEX文件。
- 在Proteus中載入相應HEX文件,點擊運行,可以看到LED燈不斷閃爍。
LED燈亮
LED燈滅