stm32開發筆記(三):stm32系列的GPIO基本功能之輸出驅動LED燈、輸入按鍵KEY以及Demo


前言

  stm32系列是最常用的單片機之一,不同的版本對應除了引腳、外設、頻率、容量等’不同之外,其開發的方法是一樣的。
  本章講解使用GPIO引腳功能驅動LED燈和接收Key按鈕輸入。

 

STM32系列GPIO驅動LED燈

  先來筆者根據自己使用的開發板的電路來使用GPIO進行LED操作,下圖是筆者使用的開發板LED燈的電路圖:
  在這里插入圖片描述
  引腳PD6接LED1,PD12接LED2,PD13接LED3,電阻是限流電阻(計算方式高電平減去LED1的壓降,然后除以LED能流過的電流)。
  復制模版文件,更改名字為LEDtest1,啟動軟件Keil4,打開改名后的工程LEDtest1。
  在工程目錄下新建文件夾Dev,在Dev下新建文件夾LED,在LED下新建led.c和led.h文件,然后將路徑以及文件部署進去:
  在這里插入圖片描述
  在這里插入圖片描述
  部署成功后,我們工程如下:
  在這里插入圖片描述
  然后開始編寫程序,mian.c,led.c, led.h,編寫好后的程序內容如下:
  在這里插入圖片描述
  在這里插入圖片描述
  在這里插入圖片描述
  在這里插入圖片描述
  程序主要邏輯如下:打開LED1,延遲,打開LED2,延遲,打開LED3,延遲,關閉LED1 LED2 LED3,延遲,回頭循環開始。

 

LED的工程代碼在CSDN下載

  CSDN下載地址:https://download.csdn.net/detail/qq21497936/7998805
  QQ群免費下載:1047134658(點擊“文件”搜索“LEDtest1”,群內與博文同步更新)

 

STM32系列GPIO檢測按鍵KEY

現在我們來使用GPIO進行按鍵操作,按鍵最為常用的輸入,大多數以及筆者接觸到的經驗人士都是建議筆者采用輪詢(查詢)方式。下圖是筆者開發板的按鍵部分的電路圖:
在這里插入圖片描述
  從電路圖分析PE0,PE1,PE2,PE3,PE4這5個引腳未按鍵時是帶有上拉電阻的高電平,按鍵時有2個10K的電阻進行分壓,為1.65V查看芯片電平的電氣特性,你會發現低於高電平最低的電壓,輸入盡管有電壓但仍然是低電平,PC13則只有上拉電阻,至於為什么會這樣筆者暫時也不太清楚,那么我們復制LEDtest1的工程,改名為KEYtest1,然后繼續開始按鍵編寫,還是按照流程來,在Dev文件夾下建立KEY文件夾,在KEY文件夾下建立key.h,key.c兩個文件都部署進工程,路徑包括進去。
  我們繼續來使用幫助文檔進行參考,版本是V3.5(若未指明V3.4則是V3.5,建議使用文檔的時候兩個版本的都備好),打開下面這個源文件

  在這里插入圖片描述
  我們想象一下,與LEDtest1的GPIO配置為輸出,那么按鍵要配置成輸入,配置成什么輸入呢(大家可以參考八種IO模式),這里我們為初學者考慮,盡量只依靠幫助文檔,所以我們繼續使用幫助文檔來編寫,配置成輸入也有一個初始化,於是在源代碼中我們查找,看下圖
在這里插入圖片描述
  00067行是對按鈕進行初始化,我們點擊這個函數跳轉到源代碼
  在這里插入圖片描述
  再點擊255查看源代碼
  在這里插入圖片描述
  00257大家都知道,00258則是配置中斷的詳細信息(怎么樣才產生中斷),00259則是將中斷與中斷向量聯系起來(可以配置優先級和中斷響應函數),我們不使用中斷不管后面中斷這兩行,繼續往下走
  在這里插入圖片描述
  00265這是配置成浮空輸入,我們想這應該是我們想要的(不管對錯,暫時先這樣),繼續往下走
在這里插入圖片描述
  00316這個讀輸入數據的位,我們點開,以轉到它的說明
  在這里插入圖片描述
  這樣我們知道它主要是用來判斷哪個端口的哪個引腳現在的值,輸入的值不是0就是1,可以寫檢測代碼了,繼續寫代碼,寫完的代碼如下:
  在這里插入圖片描述
  在這里插入圖片描述
  在這里插入圖片描述
  調試運行成功。並且筆者在GPIO的模式上,配置了上拉,下拉,浮空輸入,都運行正常,包括UESR按鍵也正常。

KEY的工程代碼下載

  CSDN下載地址:https://download.csdn.net/detail/qq21497936/7998809
  QQ群免費下載:1047134658(點擊“文件”搜索“KEYtest1”,群內與博文同步更新)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM