大家一定遇到過上電或者復(fù)位時(shí)外部的MOS電路或者芯片使能信號(hào)意外開啟,至此有經(jīng)驗(yàn)的工程師就會(huì)經(jīng)常關(guān)心一個(gè)問題,MCU復(fù)位時(shí)GPIO是什么狀態(tài)?什么電路需要外部加上下拉?
首先MCU上電過程到POR復(fù)位前,數(shù)字電路邏輯還沒復(fù)位,GPIO處于高阻狀態(tài),NMOS、PMOS、上下拉電阻都處于關(guān)閉狀態(tài),此時(shí)GPIO處于高阻狀態(tài)。
當(dāng)MCU POR復(fù)位后,復(fù)位引腳拉高,寄存器全部加載復(fù)位值,此時(shí)IO口狀態(tài)我們可以從GPIO寄存器中看到:
可以看到JTAG和SWD相關(guān)的引腳默認(rèn)狀態(tài)都是復(fù)用模式,且其中部分有配置默認(rèn)的內(nèi)部上下拉:

所以當(dāng)MCU復(fù)位后,GPIO初始化前一些特殊GPIO是會(huì)有內(nèi)部上下拉或者輸出狀態(tài)的,我們需要根據(jù)電路電平要求來合理選用GPIO,避免復(fù)位時(shí)IO口出現(xiàn)誤輸出。
程序啟動(dòng)后執(zhí)行初始化時(shí)會(huì)配置想要的GPIO模式和狀態(tài),此時(shí)一樣也可能出現(xiàn)誤輸出,我們來看下GPIO輸出寄存器默認(rèn)值:

因?yàn)閺?fù)位值是全0,所以如果一個(gè)希望默認(rèn)為高的IO先初始化GPIO為輸出模式再配置默認(rèn)狀態(tài),那么GPIO會(huì)先輸出低電平再馬上拉高,通過示波器會(huì)看到復(fù)位后MCU IO口出現(xiàn)一個(gè)低電平毛刺,那么合理可靠的配置時(shí)序是:
1、先打開GPIO時(shí)鐘;2、設(shè)置GPIO輸出高還是低;3、設(shè)置GPIO模式;
這樣就不會(huì)在初始化過程出現(xiàn)毛刺,需要嚴(yán)格遵守。
那么我們現(xiàn)在知道了,除去一些特殊IO和軟件配置時(shí)序我們需要注意,在MCU IO口初始化前其他IO都是高阻狀態(tài),那么高阻狀態(tài)是什么電壓?需不需要上下拉,那我們則需要根據(jù)外圍電路來判斷,請(qǐng)關(guān)注我們,后續(xù)視頻我們繼續(xù)分享。