公司自己做網(wǎng)站百度網(wǎng)站的網(wǎng)址
一、GPIO功能描述
每個(gè)GPIO端口有兩個(gè)32位配置寄存器(GPIOx_CRL,GPIOx_CRH) ,兩個(gè)32位數(shù)據(jù)寄存器 (GPIOx_IDR和GPIOx_ODR) ,一個(gè)32位置位/復(fù)位寄存器(GPIOx_BSRR),一個(gè)16位復(fù)位寄存器(GPIOx_BRR)和一個(gè)32位鎖定寄存器(GPIOx_LCKR)。 GPIO端口的每個(gè)位可以由軟件分別配置成多種模式。
-
輸入浮空
-
輸入上拉
-
輸入下拉
-
模擬輸入
-
開(kāi)漏輸出
-
推挽式輸出
-
推挽式復(fù)用功能
-
開(kāi)漏復(fù)用功能
每個(gè)I/O端口位可以自由編程,然而必須按照32位字訪問(wèn)I/O端口寄存器(不允許半字或字節(jié)訪 問(wèn))。GPIOx_BSRR和GPIOx_BRR寄存器允許對(duì)任何GPIO寄存器進(jìn)行讀/更改的獨(dú)立訪問(wèn)。這 樣,在讀和更改訪問(wèn)之間產(chǎn)生IRQ時(shí)不會(huì)發(fā)生危險(xiǎn)。
圖1 I/O端口位的基本結(jié)構(gòu)
圖2 端口位配置表
圖3 輸出模式位
二、通用I/O(GPIO)
復(fù)位期間和剛復(fù)位后,復(fù)用功能未開(kāi)啟,I/O端口被配置成浮空輸入模式(CNFx[1:0]=01b, MODEx[1:0]=00b)。 復(fù)位后,JTAG引腳被置于輸入上拉或下拉模式:
-
PA15:JTDI置于上拉模式
-
PA14:JTCK置于下拉模式
-
PA13:JTMS置于上拉模式
-
PB4: JNTRST置于上拉模式
當(dāng)作為輸出配置時(shí),寫(xiě)到輸出數(shù)據(jù)寄存器上的值(GPIOx_ODR)輸出到相應(yīng)的I/O引腳??梢砸酝仆炷J交蜷_(kāi)漏模式(當(dāng)輸出0時(shí),只有N-MOS被打開(kāi))使用輸出驅(qū)動(dòng)器。
輸入數(shù)據(jù)寄存器(GPIOx_IDR)在每個(gè)APB2時(shí)鐘周期捕捉I/O引腳上的數(shù)據(jù)。
所有GPIO引腳有一個(gè)內(nèi)部弱上拉和弱下拉,當(dāng)配置為輸入時(shí),它們可以被激活也可以被斷開(kāi)。
三、單獨(dú)的位設(shè)置或位清除
當(dāng)對(duì)GPIOx_ODR的個(gè)別位編程時(shí),軟件不需要禁止中斷:在單次APB2寫(xiě)操作里,可以只更改 一個(gè)或多個(gè)位。
這是通過(guò)對(duì)“置位/復(fù)位寄存器”(GPIOx_BSRR,復(fù)位是 GPIOx_BRR)中想要更改的位寫(xiě)’1’來(lái) 實(shí)現(xiàn)的。沒(méi)被選擇的位將不被更改。
四、外部中斷/喚醒線
所有端口都有外部中斷能力。為了使用外部中斷線,端口必須配置成輸入模式。
五、復(fù)用功能(AF)
使用默認(rèn)復(fù)用功能前必須對(duì)端口位配置寄存器編程。
-
對(duì)于復(fù)用的輸入功能,端口必須配置成輸入模式(浮空、上拉或下拉)且輸入引腳必須由外部驅(qū)動(dòng)
-
對(duì)于復(fù)用輸出功能,端口必須配置成復(fù)用功能輸出模式(推挽或開(kāi)漏)。
-
對(duì)于雙向復(fù)用功能,端口位必須配置復(fù)用功能輸出模式(推挽或開(kāi)漏)。這時(shí),輸入驅(qū)動(dòng)器被配置成浮空輸入模式。 如果把端口配置成復(fù)用輸出功能,則引腳和輸出寄存器斷開(kāi),并和片上外設(shè)的輸出信號(hào)連接。 如果軟件把一個(gè)GPIO腳配置成復(fù)用輸出功能,但是外設(shè)沒(méi)有被激活,它的輸出將不確定。
六、軟件重新映射I/O復(fù)用功能
為了使不同器件封裝的外設(shè)I/O功能的數(shù)量達(dá)到最優(yōu),可以把一些復(fù)用功能重新映射到其他一些 腳上。這可以通過(guò)軟件配置相應(yīng)的寄存器來(lái)完成(參考AFIO寄存器描述)。這時(shí),復(fù)用功能就不再映射到它們的原始引腳上了。
七、GPIO 鎖定機(jī)制
鎖定機(jī)制允許凍結(jié)IO配置。當(dāng)在一個(gè)端口位上執(zhí)行了鎖定(LOCK)程序,在下一次復(fù)位之前,將 不能再更改端口位的配置。
八、輸入配置
當(dāng)I/O端口配置為輸入時(shí):、
-
輸出緩沖器被禁止
-
施密特觸發(fā)輸入被激活
-
根據(jù)輸入配置(上拉,下拉或浮動(dòng))的不同,弱上拉和下拉電阻被連接
-
出現(xiàn)在I/O腳上的數(shù)據(jù)在每個(gè)APB2時(shí)鐘被采樣到輸入數(shù)據(jù)寄存器
-
對(duì)輸入數(shù)據(jù)寄存器的讀訪問(wèn)可得到I/O狀態(tài)
下圖給出了I/O端口位的輸入配置
九、輸出配置
當(dāng)I/O端口被配置為輸出時(shí):
- 輸出緩沖器被激活
-
開(kāi)漏模式:輸出寄存器上的’0’激活N-MOS,而輸出寄存器上的’1’將端口置于高阻狀態(tài)(PMOS從不被激活)。
-
推挽模式:輸出寄存器上的’0’激活N-MOS,而輸出寄存器上的’1’將激活P-MOS。
-
-
施密特觸發(fā)輸入被激活
-
弱上拉和下拉電阻被禁止
-
出現(xiàn)在I/O腳上的數(shù)據(jù)在每個(gè)APB2時(shí)鐘被采樣到輸入數(shù)據(jù)寄存器
-
在開(kāi)漏模式時(shí),對(duì)輸入數(shù)據(jù)寄存器的讀訪問(wèn)可得到I/O狀態(tài)
-
在推挽式模式時(shí),對(duì)輸出數(shù)據(jù)寄存器的讀訪問(wèn)得到最后一次寫(xiě)的值
下圖給出了I/O端口位的輸出配置
十、復(fù)用功能配置
當(dāng)I/O端口被配置為復(fù)用功能時(shí):
-
在開(kāi)漏或推挽式配置中,輸出緩沖器被打開(kāi)、
-
內(nèi)置外設(shè)的信號(hào)驅(qū)動(dòng)輸出緩沖器(復(fù)用功能輸出)
-
施密特觸發(fā)輸入被激活
-
弱上拉和下拉電阻被禁止
-
在每個(gè)APB2時(shí)鐘周期,出現(xiàn)在I/O腳上的數(shù)據(jù)被采樣到輸入數(shù)據(jù)寄存器
-
開(kāi)漏模式時(shí),讀輸入數(shù)據(jù)寄存器時(shí)可得到I/O口狀態(tài)
-
在推挽模式時(shí),讀輸出數(shù)據(jù)寄存器時(shí)可得到最后一次寫(xiě)的值
下圖給出了復(fù)用功能配置
十一、模擬輸入配置
當(dāng)I/O端口被配置為模擬輸入配置時(shí):
-
輸出緩沖器被禁止;
-
禁止施密特觸發(fā)輸入,實(shí)現(xiàn)了每個(gè)模擬I/O引腳上的零消耗。施密特觸發(fā)輸出值被強(qiáng)置 為’0’;
-
弱上拉和下拉電阻被禁止;
-
讀取輸入數(shù)據(jù)寄存器時(shí)數(shù)值為’0’。
下圖示出了I/O端口位的高阻抗模擬輸入配置:
一個(gè)專注于“嵌入式知識(shí)分享”、“DIY嵌入式產(chǎn)品”的技術(shù)開(kāi)發(fā)人員,關(guān)注我,一起共創(chuàng)嵌入式聯(lián)盟。