以前gpio上接的電路都是低電平觸發的那種,新畫了個板子有乙個按鍵設計的是高電平觸發,結果io口設定成上拉輸入後,怎麼讀都不正確,按鍵電路如圖1。無奈只能去除錯一下,發現當設定為上拉輸入後,其odr(gpio輸出資料暫存器)相應的也置為1,百思不得其解。
圖1 按鍵電路
於是去看一下gpio的結構圖:
i/o引腳結構圖
由圖可以發現其實輸出暫存器與輸入暫存器之間在i/o引腳處是線與狀態,在gpio設定成上位輸入時,其上拉電阻閉合,這時如果輸出暫存器設定為0那麼在io口內部就會自己損耗電流,而這些電流的損耗是會增加功耗的。因此當gpio設定成上拉輸入時,相應的輸出暫存器也設定為1.
將按鍵電路與i/o引腳結構圖連起來看,就清晰多了,當gpio設定為上位輸入時,上拉電阻與按鍵的330歐、220k歐串聯,這時io口所讀到的電平就是330歐與220k歐電阻分壓的總合,由於這兩個電阻阻值過大,因引讀出的電壓大於邏輯'1'的閥值。ok問題找到了,於是將io設定成下拉輸入,問題就解決了。因此這裡得出乙個結論,io口是上拉還是下拉要根據,io口外部接的空閒電平有關,如按鍵不按下時是低電平,則應該設定為下拉輸入。
在除錯時還發現另一種方法可以讓**正常執行,就是當設定上拉輸入時,將其輸出值設定為0,這樣電平就被直接拉低了,按鍵的接地電路基本就不起作用了,但這樣做有乙個壞處,前面已經說過了,這種情況會導致上拉電阻直接接地了,增加了不必要功耗,而且將3.3v電壓直接加在了輸出驅動器的n-mos上,時間長了之後可能會造成晶元損壞!
STM32微控制器GPIO的配置
1.gpio mode ain 模擬輸入 adc輸入模擬訊號時,專用的模擬輸入模式 2.gpio mode in floating 浮空輸入 3.gpio mode ipd 下拉輸入 4.gpio mode ipu 上拉輸入 5.gpio mode out od 開漏輸出 6.gpio mode o...
微控制器學習(一) 微控制器基礎 STM32
io四種輸入工作模式 io四種輸出工作模 stm32有8個16位定時器 stm32具有強大的異常響應系統,它把能夠打斷當前 執行流程的事件分為異常 exception 和中斷 interrupt 並把它們用乙個表管理起來,編號為 3 6的中斷向量定義為系統異常,編號從7到19的為外部中斷。中斷向量控...
微控制器 STM32庫開發
1.stm32庫開發是什麼?st公司推出的基於cortex m3核心的mcu 微控制器,也就是通常所說的微控制器 倡導使用韌體庫開發,僅通過呼叫庫裡面的api 應用程式介面 就可以迅速搭建乙個程式,寫出各種使用者需要的應用。庫開發方式自頂向下,可以避免對底層暫存器的繁瑣操作,能大大降低學習門檻和開發...