STM32F10x GPIO引腳說(shuō)明
此篇文章重點(diǎn)討論STM32的GPIO的配置種類(lèi)以及上拉輸入、下拉輸入、浮空輸入、模擬輸入的區(qū)別
經(jīng)過(guò)學(xué)習(xí)STM32發(fā)現(xiàn),GPIO有8種工作方式
輸入模式:輸入浮空、輸入上拉、輸入下拉、模擬輸入
輸出模式:開(kāi)漏輸出、開(kāi)漏復(fù)用功能、推挽式輸出、推挽式復(fù)用功能
輸入模式參照?qǐng)D片來(lái)講
浮空輸入:浮空輸入狀態(tài)下上拉電阻和下拉電阻都是斷開(kāi)的,信號(hào)經(jīng)過(guò)I/O端口——施密特觸發(fā)器——輸入數(shù)據(jù)寄存器——CPU讀取
上拉輸入:相比浮空輸入狀態(tài),就是上拉電阻閉合(下拉電阻仍然處于斷開(kāi)狀態(tài))
下拉輸入:相比浮空輸入狀態(tài),就是下拉電阻閉合(上拉電阻仍然處于斷開(kāi)狀態(tài))
模擬輸入:上拉電阻和下拉電阻都處于斷開(kāi)狀態(tài),并且信號(hào)不是經(jīng)過(guò)施密特觸發(fā)器,而是直接進(jìn)入施密特觸發(fā)器之前的模擬輸入通道
輸出模式也參照?qǐng)D片來(lái)講:
開(kāi)漏輸出模式:其中1號(hào)區(qū)域,兩個(gè)寄存器有兩種讀寫(xiě)方式,這個(gè)后面會(huì)介紹,這是關(guān)于寄存器的配置原因,對(duì)于輸出驅(qū)動(dòng)器部分,當(dāng)輸出控制電路輸出邏輯1(高電平)時(shí),外部的I/O端口輸出的電平由外部電路決定,如果外部連接有上拉電阻,則輸出高電平,如果接有下拉電阻,則輸出低電平;當(dāng)輸出控制電路輸出邏輯0(低電平)時(shí),外部的電路不管是否接有上拉電阻還是下拉電阻,都輸出低電平;所有應(yīng)用開(kāi)漏輸出模式的時(shí)候想要輸出高電平切記要加上拉電阻
開(kāi)漏復(fù)用功能輸出:此模式與開(kāi)漏輸出模式只有一個(gè)不同的地方,就是在1號(hào)區(qū)域,此模式是直接在復(fù)用功能輸出引輸出部分輸出的
推挽輸出模式:也是走的1、2、3、4號(hào)路線,其中在2號(hào)區(qū)域輸出控制電路部分,如果輸出邏輯1,則3號(hào)區(qū)域P-MOS導(dǎo)通,N-MOS截止,輸出高電平(不管外部有沒(méi)有上拉電阻);如果輸出邏輯0,則3號(hào)區(qū)域P-MOS截止,N-MOS導(dǎo)通,輸出低電平(不管外部有沒(méi)有上拉電阻和下拉電阻)
推挽復(fù)用功能輸出:此模式與推挽輸出模式不同的地方就是1號(hào)區(qū)域,此模式是直接在復(fù)用功能輸出部分輸出的
下面講解一下輸出模式與寄存器的關(guān)系
在STM32的參考手冊(cè)中我們可以找到GPIOx_CRL和GPIOx_CRH寄存器,這兩個(gè)寄存器功能相同,就是GPIOx_CRL是用來(lái)配置低8位(例:PA0_PA7)I/O口的,GPIOx_CRH是用來(lái)配置高8位(例:PA8_PA15)I/O口的
這是一個(gè)32位寄存器,每4位配置一個(gè)端口,例:第1位和第0位即MODE0[1:0],用來(lái)設(shè)置Px0(PA0%20or%20PB0%20or%20PC0%20and%20so%20on)是輸入還是輸出,第3位和第2位即CNF0[1:0],用來(lái)選擇Px0的輸入或者輸出的具體模式。
其中有一個(gè)地方值得注意,就是在輸入模式下,CNFx=10的狀態(tài):上拉/下拉輸入模式,到底是上拉輸入模式還是下拉模式就要用到另一個(gè)寄存器GPIOx_ODR,并且這個(gè)寄存器對(duì)輸入和輸出有著不同的作用
這是一個(gè)32位寄存器,高16位保留,低16位每位對(duì)應(yīng)Px的一個(gè)I/O口
在輸入模式下,如果對(duì)應(yīng)位置1,則為上拉輸入;如果對(duì)應(yīng)位置0,則為下拉輸入
在輸出模式下,如果對(duì)應(yīng)位置0,則是要求輸出端口輸出默認(rèn)輸出高電平,注意:此處,若為開(kāi)漏輸出模式,若想輸出高電平需要外界上拉電阻
具體對(duì)應(yīng)關(guān)系見(jiàn)下表:
還有一個(gè)寄存器需要介紹,端口位設(shè)置/清除寄存器(GPIOx_BSRR)
在輸出模式下,可以通過(guò)配置這個(gè)寄存器決定到底是輸出高電平還是低電平,低16位置1,則對(duì)應(yīng)端口輸出高電平,高16位置1,則對(duì)應(yīng)端口輸出低電平
這個(gè)寄存器就是上面講解輸出模式時(shí)的疑問(wèn)
配置輸出模式時(shí),可以通過(guò)配置寄存器GPIOx_BSRR然后映射到寄存器GPIOx_ODR,也可以直接配置寄存器GPIOx_ODR,但是對(duì)于運(yùn)行效率來(lái)說(shuō),還是通過(guò)GPIOx_BSRR映射到GPIOx_ODR效率更高。