浮空輸入_IN_FLOATING
帶上拉輸入_IPU
帶下拉輸入_IPD
開(kāi)漏輸出_OUT_OD
推挽輸出_OUT_PP
開(kāi)漏復(fù)用輸出_AF_OD
推挽復(fù)用輸出_AF_PP
4輸入 + 2 輸出 + 2 復(fù)用輸出,一共是8種模式,以下是八種模式的工作原理:
GPIO浮空輸入_IN_FLOATING模式工作原:
以上截圖就是浮空輸入模式的原理圖,圖中陰影的部分在浮空輸入模式下是處于不工作狀態(tài)的,尤其是下半部分的輸出電路,實(shí)際上這時(shí)的輸出電路與輸入的端口處于隔離狀態(tài)。
黃色的高亮部分顯示了數(shù)據(jù)傳輸通道,外部的電平信號(hào)通過(guò)左邊編號(hào)1的I/O 端口進(jìn)入STM32內(nèi)部經(jīng)過(guò)編號(hào)2的施密特觸發(fā)器整形以后送入編號(hào)為3的“輸入數(shù)據(jù)寄存器”在“輸入數(shù)據(jù)寄存器”的另一端(編號(hào)4) ,CPU通過(guò)內(nèi)部的數(shù)據(jù)總線可以隨時(shí)讀出I/O 端口的電平變化的狀態(tài)。
GPIO帶上拉輸入_IPU 模式工作原理:
上圖是STM32的GPIO帶上拉輸入模式的原理圖。
與前面介紹的浮空輸入模式相比,僅僅是在數(shù)據(jù)通道上面,接入了一個(gè)上拉電阻,根據(jù)STM32的數(shù)據(jù)手冊(cè),這個(gè)上拉電阻阻值介于30K~50K 歐姆。同樣,CPU可以隨時(shí)在“輸入數(shù)據(jù)寄存器”的另一端,通過(guò)內(nèi)部的數(shù)據(jù)總線讀出I/O 端口的電平變化的狀態(tài)。
GPIO帶下拉輸入_IPD 模式工作原理:
對(duì)于輸入下拉模式的輸入,是在數(shù)據(jù)通道的下部,接入了一個(gè)下拉電阻。
根據(jù)STM32的數(shù)據(jù)手冊(cè),這個(gè)下拉電阻阻值也是介于30K~50K 歐姆。
對(duì)于要加上拉或下拉電阻:
1.當(dāng)作單片機(jī)作為輸入時(shí),假設(shè)我們直接在IO端口接一個(gè)按鍵到地(或電源)。
因?yàn)榘存I按,于不按管腳都是懸空的。單片機(jī)就很難檢測(cè)按鍵是否按下。
所以人為的接一個(gè)上拉(或下拉)。以確定未按下的時(shí)候IO輸入電平的狀態(tài)
2.可以提高芯片的抗干擾能
3.當(dāng)單片機(jī)的IO口作輸出時(shí),如果不接上拉電阻只能提供灌電流。無(wú)法輸出電流驅(qū)動(dòng)外接設(shè)備。這時(shí)也需要考慮上拉電阻。這樣才可以使IO輸出高電平
GPIO模擬輸入_AIN 模式工作原理:
如果把STM32配置為模擬輸入模式時(shí),工作原理就比較簡(jiǎn)單了,信號(hào)從左邊編號(hào)為1 的端口進(jìn)從右邊編號(hào)為2的一端直接進(jìn)入STM32單片機(jī)的AD模塊。
細(xì)心的朋友可以看到數(shù)據(jù)通道中上拉、下拉電阻和施密特觸發(fā)器,這時(shí)均處于關(guān)斷的狀態(tài),“輸入數(shù)據(jù)寄存器”就不能反映IO端口上的電平變化的狀態(tài)了,換句話說(shuō),也就是在模擬輸入狀態(tài)下,CPU不能通過(guò)“輸入數(shù)據(jù)寄存器”讀到IO端口變化的數(shù)據(jù)了。
以上分析的是GPIO模塊IO引腳的輸入模式的工作原理,下面介紹一下GPIO輸出模式的工作原理
GPIO開(kāi)漏輸出_OUT_OD 模式工作原理
上圖是GPIO開(kāi)漏輸出模式的工作原理圖
當(dāng)CPU 在編號(hào)1 端通過(guò)“位設(shè)置/ 清除寄存器”或“輸出數(shù)據(jù)寄存器”寫(xiě)入數(shù)據(jù)后
該數(shù)據(jù)位將通過(guò)編號(hào)2的輸出控制電路傳送到編號(hào)4 的I/O端口。
如果CPU 寫(xiě)入的是邏輯“1 ”,則編號(hào)3 的N-MOS管將處于關(guān)閉狀態(tài)
此時(shí)I/O 端口的電平將由外部的上拉電阻決定
如果CPU 寫(xiě)入的是邏輯“0 ”,則編號(hào)3的N-MOS管將處于開(kāi)啟狀態(tài)
此時(shí)I/O端口的電平被編號(hào)3 的N-MOS管拉到了“地”的零電位。
在圖中的上半部,施密特觸發(fā)器處于開(kāi)啟狀態(tài)
這意味著CPU 可以在“輸入數(shù)據(jù)寄存器”的另一端,隨時(shí)可以監(jiān)控I/O端口的狀態(tài)
通過(guò)這個(gè)特性,還可以實(shí)現(xiàn)了虛擬的I/O端口雙向通信:假如CPU 輸出邏輯“1 ”
由于編號(hào)3 的N-MOS管處于關(guān)閉狀態(tài),I/O 端口的電平將完全由外部電路決定
因此,CPU 可以在“輸入數(shù)據(jù)寄存器”讀到外部電路的信號(hào),而不是它自己輸出的邏輯“1 ”
GPIO口的輸出模式下,有3 種輸出速度可選(2MHz 、10MHz和50MHz)
這個(gè)速度是指GPIO口驅(qū)動(dòng)電路的響應(yīng)速度,而不是輸出信號(hào)的速度
輸出信號(hào)的速度與程序有關(guān)(芯片內(nèi)部在I/O口的輸出部分安排了多個(gè)響應(yīng)速度不同的輸出驅(qū)動(dòng)電路用戶(hù)可以根據(jù)自己的需要選擇合適的驅(qū)動(dòng)電路)。
通過(guò)選擇速度來(lái)選擇不同的輸出驅(qū)動(dòng)模塊,達(dá)到最佳的噪聲控制和降低功耗的目的。
高頻的驅(qū)動(dòng)電路,噪聲很高
當(dāng)我們的項(xiàng)目不需要比較高的輸出頻率時(shí),請(qǐng)選用低頻驅(qū)動(dòng)電路,這樣非常有利于提高系統(tǒng)的EMI 性能。
當(dāng)然如果我們的項(xiàng)目要求輸出較高頻率的信號(hào),但卻選用了較低頻率的驅(qū)動(dòng)模塊,很可能會(huì)得到比較失真的輸出信號(hào)
GPIO推挽輸出_OUT_PP模式工作原理
GPIO的推挽輸出模式是在開(kāi)漏輸出模式的基礎(chǔ)上,在“輸出控制電路”之后,增加了一個(gè)P-MOS管
當(dāng)CPU輸出邏輯“1 ”時(shí),編號(hào)3 處的P-MOS管導(dǎo)通,而下方的N-MOS管截止,達(dá)到輸出高電平的目的
當(dāng)CPU輸出邏輯“0 ”時(shí),編號(hào)3 處的P-MOS管截止,而下方的N-MOS管導(dǎo)通,達(dá)到輸出低電平的目的
在這個(gè)模式下,CPU 仍然可以從“輸入數(shù)據(jù)寄存器”讀到該IO端口電壓變化的信號(hào)
GPIO開(kāi)漏復(fù)用輸出_AF_OD模式工作原理
GPIO的開(kāi)漏復(fù)用輸出模式與開(kāi)漏輸出模式的工作原理基本相同
不同的是編號(hào)為2 的輸入的源不同,它是和復(fù)用功能的輸出端相連
此時(shí)的“輸出數(shù)據(jù)寄存器”被輸出通道給斷開(kāi)了。
從上面的這個(gè)圖,我們還可以看到CPU同樣可以從“輸入數(shù)據(jù)寄存器”讀取到外部IO端口變化的電平信號(hào)。
GPIO推挽復(fù)用輸出_AF_PP模式工作原理
最后介紹一下GPIO推挽復(fù)用輸出模式的工作原理
編號(hào)2“輸出控制電路” 輸入是與復(fù)用功能的輸出端相連
此時(shí)“輸出數(shù)據(jù)寄存器”被從輸出通道斷開(kāi)了,片上外設(shè)的輸出信號(hào)直接與“輸出控制電路”的輸入端想連接。
我們將GPIO配置成復(fù)用輸出功能后,假如相應(yīng)的外設(shè)模塊沒(méi)有被激活,那么此時(shí)IO端口的輸出將不確定。
其它部分原理與前面敘述的模式一樣,包括對(duì)“輸入數(shù)據(jù)寄存器”的讀取方式也是一樣的。
-
GPIO
+關(guān)注
關(guān)注
16文章
1216瀏覽量
52266 -
STM32單片機(jī)
+關(guān)注
關(guān)注
59文章
549瀏覽量
58758
原文標(biāo)題:STM32單片機(jī)GPIO的八種工作模式詳解!
文章出處:【微信號(hào):fcsde-sh,微信公眾號(hào):fcsde-sh】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論