淺析STM32中GPIO的上/下拉電阻
開啟上拉電阻或下拉電阻的作用
STM32內(nèi)部的上拉其實(shí)是一個(gè)弱上拉,也就是說通過此上拉電阻輸出的電流很小,如果想要輸出一個(gè)大電流。那么就需要外接上拉電阻了,其實(shí)就是增加導(dǎo)線的輸出電流。
下拉電阻情況相反,讓STM32的CPU引腳輸出低電平,結(jié)果由于后續(xù)電路影響輸出的低電平達(dá)不到GND。所以接個(gè)下拉電阻,其實(shí)就是為了降低導(dǎo)線的輸出電流。
另外當(dāng)上下拉電阻都不開啟,此時(shí)是浮空模式,引腳的電壓是不確定的,此模式下的管腳電壓會(huì)時(shí)不時(shí)改變。
所以為了防止引腳懸空,產(chǎn)生積累電荷、靜電荷,造成電路不穩(wěn)定。一般情況下,我們都會(huì)給引腳設(shè)置成上拉或者下拉模式,使它有一個(gè)確定的默認(rèn)電平狀態(tài)。
以上拉電阻舉例,在STM32剛上電的時(shí)候,芯片引腳電平是不確定的。特別引腳是接按鍵的時(shí)候,必須給他個(gè)確定的電平。下拉電阻的作用就是,強(qiáng)制讓電平保持在低電平。
STM32中的GPIO及其上/下拉電阻功能
在STM32微控制器中,GPIO(General Purpose Input/Output,通用輸入輸出)是一個(gè)至關(guān)重要的功能模塊。它不僅提供了靈活的輸入輸出能力,還支持配置上拉和下拉電阻,以實(shí)現(xiàn)對(duì)輸入信號(hào)的預(yù)處理和穩(wěn)定。通過合理配置GPIO的上/下拉電阻,用戶可以有效地控制信號(hào)的電平狀態(tài),從而滿足不同的電路需求。

以STM32中的GPIO為例,其結(jié)構(gòu)如圖所示。關(guān)于GPIO的工作原理,可以參考相關(guān)文章進(jìn)行詳細(xì)了解。在GPIO的結(jié)構(gòu)圖中,我們可以看到上拉和下拉電阻上各有一個(gè)開關(guān),通過配置這些開關(guān),我們可以控制引腳的默認(rèn)電平。具體來說,開啟上拉電阻將使引腳默認(rèn)電壓為高電平,而開啟下拉電阻則會(huì)使引腳默認(rèn)電壓為低電平。若上拉和下拉電阻都不開啟,則引腳處于浮空模式,其電壓狀態(tài)是不確定的。
為了確保引腳的穩(wěn)定性和避免電路不穩(wěn)定,我們通常會(huì)將引腳配置為上拉或下拉模式。這樣,即使在沒有外部輸入信號(hào)的情況下,引腳也能保持一個(gè)確定的默認(rèn)電平狀態(tài)。例如,在STM32剛上電時(shí),芯片引腳電平是不確定的。特別是在引腳接按鍵時(shí),必須給予它一個(gè)確定的電平。此時(shí),下拉電阻的作用就至關(guān)重要,它能確保電平保持在低電平狀態(tài),從而防止引腳懸空和積累電荷的問題。
另外,根據(jù)拉電阻的阻值大小,我們可以將其分為強(qiáng)拉或弱拉。阻值越小,表示電平能力越強(qiáng),同時(shí)也能增強(qiáng)抵抗外部噪聲的能力,但相應(yīng)的功耗也會(huì)有所增加。
按鍵的上拉電阻,常見的選擇有3k、7k、1k以及10k等。然而,電阻值越小,意味著通過的電流越大,同時(shí)功耗也會(huì)相應(yīng)增加。通常,10k的上拉電阻所提供的電流是大多數(shù)芯片能夠正常識(shí)別的引腳電流范圍。若電阻值過大,導(dǎo)致電流過小,芯片可能無法正常識(shí)別引腳狀態(tài)。因此,10k的電阻值被視為一種折中的選擇。這里的電流大小,可以通過簡(jiǎn)單的公式VDD/R拉電阻進(jìn)行計(jì)算得出。
入門題:1)什么是開漏輸出,什么是推挽輸出?
2)芯片空余的引腳如何處理,接地?接電源?懸空?
進(jìn)階題:軟件工程師說按鍵按下,CPU一直檢測(cè)不到低電平,一直都是高電平,一口咬定是硬件問題,實(shí)測(cè)CPU的引腳確實(shí)也是3V左右的高電平。請(qǐng)問是軟件問題還是硬件問題,原因是什么?
高級(jí)題:控制器輸出0~10V電壓,控制風(fēng)扇的轉(zhuǎn)速。目前該控制器存在這個(gè)問題:控制一上電,端口處就會(huì)輸出400mS/5V左右的脈沖,導(dǎo)致上電瞬間風(fēng)扇突然轉(zhuǎn)動(dòng),客戶不可接受,需整改。怎么解決?
骨灰題:下項(xiàng)目組一共開發(fā)了2款電表,高端版和低端版,主板是完全一樣的,區(qū)別在于高端版帶顯示器,低端版不帶顯示器。兩款設(shè)備在做EMC的ESD測(cè)試中,低端版設(shè)備做完實(shí)驗(yàn)后無法啟動(dòng),高端版則正常,請(qǐng)問可能的原因在哪里?
一、GPIO的基礎(chǔ)知識(shí)GPIO(General Purpose I/O Ports)意思為通用輸入/輸出端口,通俗地說,就是一些引腳,可以通過它們輸出高低電平或者通過它們讀入引腳的狀態(tài)-是高電平或是低電平。GPIO口一是個(gè)比較重要的概念,用戶可以通過GPIO口和硬件進(jìn)行數(shù)據(jù)交互(如UART),控制硬件工作(如LED、蜂鳴器等),讀取硬件的工作狀態(tài)信號(hào)(如中斷信號(hào))等。幾乎所有的CPU、MCU都會(huì)具GPIO功能,以下是作者統(tǒng)計(jì)的GPIO的種類,幾乎囊括了所有的MCU的GPIO類型。
1) 輸入浮空:即輸入端口既不上拉也不下拉,電平由外部輸入決定;這種模式較少,一般模擬量輸入、按鍵掃描輸入使用該模式。
2) 輸入上:即輸入端口配置一個(gè)電阻到電源端,該電阻可以使芯片內(nèi)置,也可以是外部電阻。
3) 輸入下:即輸入端口配置一個(gè)電阻到地,該電阻可以使芯片內(nèi)置,也可以是外部電阻。
4) 模擬輸入:模擬量信號(hào)輸入,需要芯片內(nèi)部支持AD轉(zhuǎn)換功能才可以。
5) 開輸出: 漏極開路輸出(OD) 和集電極開路輸出(OC)十分相似,都是無法輸出高電平,只能輸出低電平,需要高電平時(shí)需要外接上拉電阻。
6) 推挽式輸出:推挽輸出既可以輸出高電平也可以輸出低電平,無需外配置電阻。
7) 推挽式復(fù)用功能:即推挽式輸出和輸入功能,使用時(shí)需要配置具體使用哪一種。
8) 開復(fù)用功能:即開漏輸出和輸入功能,使用時(shí)需要配置具體使用哪一種。
很多人看到上面一堆IO引腳的功能種類,肯定都是云里霧里的。先不急,看完下面這張“葵花寶典”,可以肯定市面上99%的CPU的GPIO功能都囊括了,拿著這張表,硬件工程師可以說服驅(qū)動(dòng)工程師,驅(qū)動(dòng)工程師可以忽悠軟件工程師,就可以責(zé)任清晰,和平共處了。
二、上下拉電阻作用1) 上拉就是將不確定的信號(hào)通過一個(gè)電阻嵌位在高電平!電阻同時(shí)起限流作用!下拉同理,下拉就是將不確定的信號(hào)通過一個(gè)電阻嵌位在低電平!電阻同時(shí)起限流作用!
2) 上拉是對(duì)器件注入電流,下拉是輸出電流。
3) 弱強(qiáng)只是上拉電阻的阻值不同,沒有什么嚴(yán)格區(qū)分。
4) 對(duì)于非集電極(或漏極)開路輸出型電路(如普通門電路)提升電流和電壓的能力是有限的,上拉電阻的功能主要是為集電極開路輸出型電路輸出電流通道。
5) 一般作單鍵觸發(fā)使用時(shí),如果IC本身沒有內(nèi)接電阻,為了使單鍵維持在不被觸發(fā)的狀態(tài)或是觸發(fā)后回到原狀態(tài),必須在IC外部另接一電阻。
6) 數(shù)字電路有三種狀態(tài):高電平、低電平、和高阻狀態(tài),有些應(yīng)用場(chǎng)合不希望出現(xiàn)高阻狀態(tài),可以通過上拉電阻或下拉電阻的方式使處于穩(wěn)定狀態(tài),具體視設(shè)計(jì)要求而定!
7) 一般說的是I/O端口,有的可以設(shè)置,有的不可以設(shè)置,有的是內(nèi)置,有的是需要外接。
8) 上拉電阻是用來解決總線驅(qū)動(dòng)能力不足時(shí)提供電流的。一般說法是拉電流,下拉電阻是用來吸收電流的,也就是我們通常所說的灌電流。
9) 在I/O引腳懸空時(shí),接電阻就是為了防止輸入端懸空,從而提高系統(tǒng)的抗干擾能力。減弱外部電流對(duì)芯片產(chǎn)生的干擾。
10) 通過上拉或下拉來增加或減小驅(qū)動(dòng)電流。
11) 上下拉電阻改變電平的電位,常用在TTL-CMOS匹配。
12) 上拉電阻可以為OC門或者OD門提供電流。
上下拉電阻阻值的大小
根據(jù)拉電阻的阻值大小,可以分為強(qiáng)拉或弱拉(weak pull-up/down)。拉電阻阻值越小則表示電平能力越強(qiáng),為強(qiáng)拉,可以抵抗外部噪聲的能力也越強(qiáng),相應(yīng)的功耗也越大。