羅定市政府公眾網(wǎng)建設局網(wǎng)站軟文技巧
GPIO是general purpose input output,即通用輸入輸出端口,作用是負責外部器件的信息和控制外部器件工作。
GPIO有如下幾個特點:1.不同型號的IO口數(shù)量不同;2,反轉(zhuǎn)快速,每次翻轉(zhuǎn)最快只需要兩個時鐘周期,以STM32F1系列為例,最快速度可達50MHz;3.每個IO口都可以做中斷。
接下來介紹GPIO的電氣特性:1.工作電壓范圍為:[2, 3.3]V ;2.識別電壓范圍(CMOS端口):-0.3V <= VIL <= 1.164V , 1.833V <= VIH <= 3.6V;3.輸出電流單個IO口最大25mA。
下圖為GPIO的結構圖:
?GPIO的上半部分為輸入部分,下半部分為輸出部分。
接下來簡要介紹其工作流程
1.輸入:信號從IO腳輸入,經(jīng)過保護電路后進入GPIO內(nèi)部,然后進入上下拉電路(只是在輸入狀態(tài)時候設置,因此在芯片處在輸出狀態(tài)時不需要設置上下拉,比如我們的LED實驗),然后兵分兩路,上面的是模擬輸入(ADC/DAC),下面再分為兩路,上面是復用輸入至片上外設,下面進入輸入寄存器(IDR),CPU就能讀取其中的信號獲得信息。
2.輸出:
i) 執(zhí)行機構:如果需要輸出高電平,就使PMOS管導通,從VDD接進高電平輸出3.3V,如果需要輸出低電平就使NMOS管導通將VSS(0V)導通至外部。
ii)控制機構:上面的是連接輸出寄存器(ODR),可以通過位清除寄存器(BSRR)對ODR進行讀寫,也可以直接進行讀寫操作,然后進入二選一選擇器,再進入輸出控制器。
接下來介紹幾個重要的元件:
1.保護二極管:當輸入過高的電壓(比如5V,PS:必須串聯(lián)一個電阻,不然會燒)的時候,下面的保護二極管截止,上面的保護二極管導通,因為保護二極管的壓降為0.3V,VDD為3.3V,所以實際輸入的電壓為3.6V,防止了過高的電壓輸入;如果輸入一個過低的電壓(比如-5V,同理要接電阻),上面的保護二極管截止,下面的保護二極管導通,因為VSS為0V,所以實際輸入的電壓為0.3V。
2.內(nèi)部上下拉電阻:內(nèi)部上下拉電阻值為30~50kOhm,當未接入的時候處于高阻態(tài),電平由外部狀態(tài)控制,是非穩(wěn)定的狀態(tài)。當該器件初始狀態(tài)是高電平的時候,需要一個穩(wěn)定的高電位來維護這個狀態(tài),于是我們選用上拉電阻(如KEY0);當該器件的初始狀態(tài)是低電平的時候,需要一個穩(wěn)定的低電位來維護這個狀態(tài),于是我們選用下拉電阻(如WAKE_UP_KEY)。
3.施密特觸發(fā)器:為一種整形電路,可以將非標準波整形成方波。如圖,施密特觸發(fā)器有一個正向閾值電壓和一個負向閾值電壓。當電壓高于正向閾值電壓,輸出為高電平;當電壓低于負向閾值電壓的時候,輸出為低電平;當電壓處于正向和負向閾值電壓之間的時候,輸出不改變。
?
4.P/N-MOS管:MOS管是壓控型元件,通過控制柵源電壓實現(xiàn)導通或關閉。
?G:柵極;S:源極;D:漏極
對PMOS管來說,當Vgs<0時導通,因為VDD為3.3V,所以G極必須低于3.3V,即G輸出低電平時,PMOS管才導通。
對NMOS管來說,當Vgs>0時導通,因為VDD為0V,所以G極必須高于3.3V,即G輸出高電平時,NMOS管才導通。
接下來詳細介紹八種模式分析
GPIO_MODE_INPUT:前三種都屬于
1.輸入浮空(GPIO_NOPULL):輸入用,完全浮空,狀態(tài)不定。
上下拉電阻關閉,施密特觸發(fā)器打開,模擬輸入關閉,雙MOS管不導通??臻e時(高阻態(tài)),IO狀態(tài)不穩(wěn)定,由外部環(huán)境決定。
2.輸入上拉(GPIO_PULLUP):輸入用,用內(nèi)部上拉,默認為高電平。
使用上拉電阻,下拉電阻關閉,施密特觸發(fā)器打開,模擬輸入關閉,MOS管不導通??臻e時,IO呈現(xiàn)高電平。
3.輸入下拉(GPIO_PULLDOWN):輸入用,用內(nèi)部下拉,默認為低電平。
使用下拉電阻,上拉電阻關閉,施密特觸發(fā)器打開,模擬輸入關閉,MOS管不導通??臻e時,IO呈現(xiàn)低電平。
PS:GPIO_NOPULL,GPIO_PULLUP,GPIO_PULLDOWN都是在GPIO_PULL中進行設置的。
4.模擬(復用)輸入(GPIO_MODE_AF_INPUT):ADC/DAC
上下拉電阻關閉,施密特觸發(fā)器關閉,模擬輸入打開,雙MOS管不導通。專門用于模擬信號輸入。
5.開漏輸出(GPIO_MODE_OUTPUT_OD):軟件IIC的SDL,SCL等。
上下拉電阻關閉,施密特觸發(fā)器打開,PMOS管關閉,在ODR對應位寫0時,NMOS管導通,輸出低電平,寫1時不導通,不導通時為高阻態(tài)。不能輸出高電平,必須有外部上拉電阻才能輸出高電平。
6.推挽輸出(GPIO_MODE_OUTPUT_PP):驅(qū)動能力強,25mA(MAX),通用輸出。
上下拉電阻關閉,施密特觸發(fā)器打開,ODR對應位寫0時,NMOS管導通,輸出低電平,寫1則PMOS管導通,輸出高電平??奢敵龈叩碗娖?#xff0c;驅(qū)動能力強。
7.開漏復用輸出(GPIO_MODE_AF_OD):片上外設(軟件IIC的SDL,SCL等)
上下拉電阻關閉,施密特觸發(fā)器打開,PMOS管關閉,在外設復用輸出寫0時,NMOS管導通,寫1時不導通,不導通時為高阻態(tài)。不能輸出高電平,必須有外部上拉電阻才能輸出高電平。
8.推挽復用輸出(GPIO_MODE_AF_PP):片上外設(SPI的SCK,MISO,MOSI等)
上下拉電阻關閉,施密特觸發(fā)器打開,外設復用功能寫0時,NMOS管導通,輸出低電平,寫1則PMOS管導通,輸出高電平??奢敵龈叩碗娖?#xff0c;驅(qū)動能力強。
至此,對GPIO的簡單介紹就完成了。