產(chǎn)品詳情
11. 通用輸入輸出(GPIO)
11.1. 模塊介紹
每組 GPIO 端口有四個(gè) 32 位配置寄存器(GPIOx_MODE,GPIOx_OTYPE, GPIOx_OSPEED and GPIOx_PUPD),兩個(gè) 32 位數(shù)據(jù)寄存器(GPIOx_IDAT and GPIOx_ODAT),一個(gè) 32 位置位/復(fù)位寄存器(GPIOx_BSR)和一個(gè) 32 位翻轉(zhuǎn)寄存器(GPIOx_TGL)。另外,所有 GPIO 有兩個(gè)復(fù)用功能選擇寄存器(GPIOx_AFRH and GPIOx_AFRL)。
注:GPIOx 中的 x 表示 GPIO 組數(shù)。
11.2. 功能特點(diǎn)
? 輸出狀態(tài):推挽或開(kāi)漏(上下拉)
? 輸出寄存器狀態(tài)值(GPIOx_ODAT) 或者復(fù)用功能輸出
? 輸入狀態(tài):浮空、上下拉、模擬
? 輸入數(shù)據(jù)到數(shù)據(jù)寄存器(GPIOx_IDAT) 或復(fù)用功能輸入
? 獨(dú)立置位/復(fù)位/翻轉(zhuǎn) IO 狀態(tài)(GPIOx_ BSR、GPIOx_TGL)
? 模擬功能
? 復(fù)用功能(開(kāi)漏或推挽、上拉或下拉)
11.3. 功能說(shuō)明
GPIO 的每一個(gè)端口可以通過(guò)軟件獨(dú)立配置成下面狀態(tài)
? 輸入浮空
? 輸入上拉
? 輸入下拉
? 模擬功能
? 開(kāi)漏輸出(上拉或下拉)
? 推挽輸出
? 復(fù)用功能(開(kāi)漏或推挽、上拉或下拉)
11.3.1. 通用 IO(GPIO)
復(fù)位期間和剛復(fù)位后,復(fù)用功能未開(kāi)啟,IO 端口被配置成浮空輸入模式。
當(dāng)作為輸出配置時(shí),寫(xiě)到輸出數(shù)據(jù)寄存器上的值(GPIOx_ ODAT)輸出到相應(yīng)的 IO 引腳??梢砸酝仆旎蜷_(kāi)漏模式使用輸出驅(qū)動(dòng)器。
輸入數(shù)據(jù)寄存器(GPIOx_ IDAT)在每個(gè) APB 時(shí)鐘周期捕捉 IO 引腳上的數(shù)據(jù)。所有 GPIO 引腳有一個(gè)內(nèi)部弱上拉,當(dāng)配置為輸入時(shí),它們可以被激活也可以被斷開(kāi)。
11.3.2. 單獨(dú)的位操作
當(dāng)對(duì) GPIOx_ ODAT 的個(gè)別位編程時(shí),軟件不需要禁止中斷:在單次 APB 寫(xiě)操作里,可以只更改一個(gè)或多個(gè)位。只需要通過(guò)對(duì)“置位/復(fù)位寄存器”(GPIOx_BSR)或“取反寄存器”(GPIOx_TGL)中想要更改的位寫(xiě)“1”來(lái)實(shí)現(xiàn)。沒(méi)被選擇的位將不被更改。
11.3.3. 復(fù)用功能(AF)
芯片 IO 引腳通過(guò)多路選擇器連接到片內(nèi)外設(shè),每個(gè) IO 上同一時(shí)刻只能選通一個(gè)復(fù)用功能。每個(gè) IO引腳有一個(gè) 2 輸入的多路選擇器連接到復(fù)用功能(AF0~AF1),通過(guò)配置 GPIOx_AFRH/L 選擇功能。如果把端口配置成復(fù)用輸出功能,則引腳和輸出寄存器斷開(kāi),并和片上外設(shè)的輸出信號(hào)連接。如果軟件把一個(gè) GPIO 腳配置成復(fù)用輸出功能,但是外設(shè)沒(méi)有被激活,它的輸出將不確定。
11.3.4. 輸入配置
當(dāng) IO 端口配置為輸入時(shí)
? 輸出緩存器被禁止
? 施密特觸發(fā)輸入被激活
? 根據(jù)輸入配置(上拉、下拉或浮空)的不同,弱上拉和下拉電阻被連接
? 出現(xiàn)在 IO 腳上的數(shù)據(jù)在每個(gè) APB 時(shí)鐘被采樣到輸入數(shù)據(jù)寄存器
? 對(duì)輸入數(shù)據(jù)寄存器的讀訪(fǎng)問(wèn)可得到 IO 狀態(tài)
11.3.5. 輸出配置
當(dāng) IO 端口被配置為輸出時(shí)
? 輸出緩沖器被激活
開(kāi)漏模式:輸出寄存器上的“0”激活 N-MOS,而輸出寄存器上的“1”將端口置于高阻態(tài)(P-MOS 從不被激活)推挽模式:輸出寄存器上的“0”激活 N-MOS,而輸出寄存器上的“1”將激活 P-MOS。
? 施密特觸發(fā)輸入被激活
? 弱上拉和下拉電阻被禁止
? 出現(xiàn)在 IO 腳上的數(shù)據(jù)在每個(gè) APB 時(shí)鐘被采樣到輸入數(shù)據(jù)寄存器
? 在開(kāi)漏模式時(shí),對(duì)輸入數(shù)據(jù)寄存器的讀訪(fǎng)問(wèn)可得到 IO 狀態(tài)
? 在推挽模式時(shí),對(duì)輸出數(shù)據(jù)寄存器的讀訪(fǎng)問(wèn)得到一次寫(xiě)的值
11.3.6. 模擬輸入配置
當(dāng) IO 端口被配置為模擬輸入配置時(shí)
? 輸出緩存器被禁止
? 禁止施密特觸發(fā)輸入,實(shí)現(xiàn)了每個(gè)模擬 IO 引腳上的零消耗。施密特觸發(fā)輸出值被強(qiáng)制為“0”
? 弱上拉和下拉電阻被禁止
? 讀取輸入數(shù)據(jù)寄存器時(shí)數(shù)值為“0”
11.3.7. 復(fù)用功能配置
對(duì) IO 端口進(jìn)行編程作為復(fù)用功能時(shí)
? 在開(kāi)漏或推挽式配置中,輸出緩沖器被打開(kāi)
? 內(nèi)置外設(shè)的信號(hào)驅(qū)動(dòng)輸出緩沖器 (復(fù)用功能輸出)
? 施密特觸發(fā)輸入被激活
? 弱上拉和下拉電阻被禁止
? 在每個(gè) APB 時(shí)鐘周期,出現(xiàn)在 IO 腳上的數(shù)據(jù)被采樣到輸入數(shù)據(jù)寄存器
? 開(kāi)漏模式時(shí),讀輸入數(shù)據(jù)寄存器時(shí)可得到 IO 口狀態(tài)
? 在推挽模式時(shí),讀輸出數(shù)據(jù)寄存器時(shí)可得到一次寫(xiě)的值
11.4. 模塊框圖
沈陽(yáng)芯碩科技有限公司是華大電子專(zhuān)業(yè)代理商,有技術(shù)問(wèn)題可咨詢(xún)芯虎論壇