11.通用輸入輸出(GPIO)
11.1.模塊介紹
每組 GPIO端口有四個 32位配置寄存器(GPIOx_MODE,GPIOx_OTYPE, GPIOx_OSPEED and GPIOx_PUPD),兩個 32位數(shù)據(jù)寄存器(GPIOx_IDAT and GPIOx_ODAT),一個 32位置位/復位寄存器(GPIOx_BSR)和一個 32位翻轉寄存器(GPIOx_TGL)。另外,所有 GPIO有兩個復用功能選擇寄存器(GPIOx_AFRH and GPIOx_AFRL)。
注:GPIOx中的 x表示 GPIO組數(shù)。
11.2.功能特點
? 輸出狀態(tài):推挽或開漏(上下拉)
? 輸出寄存器狀態(tài)值(GPIOx_ODAT)或者復用功能輸出
? 輸入狀態(tài):浮空、上下拉、模擬
? 輸入數(shù)據(jù)到數(shù)據(jù)寄存器(GPIOx_IDAT)或復用功能輸入
? 獨立置位/復位/翻轉 IO狀態(tài)(GPIOx_ BSR、GPIOx_TGL)
? 模擬功能
? 復用功能(開漏或推挽、上拉或下拉)
11.3.功能說明
GPIO的每一個端口可以通過軟件獨立配置成下面狀態(tài)
? 輸入浮空
? 輸入上拉
? 輸入下拉
? 模擬功能
? 開漏輸出(上拉或下拉)
? 推挽輸出
? 復用功能(開漏或推挽、上拉或下拉)
11.3.1. 通用 IO(GPIO)
復位期間和剛復位后,復用功能未開啟,IO端口被配置成浮空輸入模式。
當作為輸出配置時,寫到輸出數(shù)據(jù)寄存器上的值(GPIOx_ ODAT)輸出到相應的 IO引腳??梢砸酝仆旎蜷_漏模式使用輸出驅動器。
輸入數(shù)據(jù)寄存器(GPIOx_ IDAT)在每個 APB時鐘周期捕捉 IO引腳上的數(shù)據(jù)。所有 GPIO引腳有一個內(nèi)部弱上拉,當配置為輸入時,它們可以被激活也可以被斷開。
11.3.2. 單獨的位操作
當對 GPIOx_ ODAT的個別位編程時,軟件不需要禁止中斷:在單次 APB寫操作里,可以只更改一個或多個位。只需要通過對“置位/復位寄存器”(GPIOx_BSR)或“取反寄存器”(GPIOx_TGL)中想要更改的位寫“1”來實現(xiàn)。沒被選擇的位將不被更改。
11.3.3. 復用功能(AF)
芯片 IO引腳通過多路選擇器連接到片內(nèi)外設,每個 IO上同一時刻只能選通一個復用功能。每個 IO引腳有一個 2輸入的多路選擇器連接到復用功能(AF0~AF1),通過配置 GPIOx_AFRH/L選擇功能。如果把端口配置成復用輸出功能,則引腳和輸出寄存器斷開,并和片上外設的輸出信號連接。如果軟件把一個 GPIO腳配置成復用輸出功能,但是外設沒有被激活,它的輸出將不確定。
11.3.4. 輸入配置
當 IO端口配置為輸入時
? 輸出緩存器被禁止
? 施密特觸發(fā)輸入被激活
? 根據(jù)輸入配置(上拉、下拉或浮空)的不同,弱上拉和下拉電阻被連接
? 出現(xiàn)在 IO腳上的數(shù)據(jù)在每個 APB時鐘被采樣到輸入數(shù)據(jù)寄存器
? 對輸入數(shù)據(jù)寄存器的讀訪問可得到 IO狀態(tài)
11.3.5. 輸出配置
當 IO端口被配置為輸出時
? 輸出緩沖器被激活
開漏模式:輸出寄存器上的“0”激活 N-MOS,而輸出寄存器上的“1”將端口置于高阻態(tài)(P-MOS從不被激活)推挽模式:輸出寄存器上的“0”激活 N-MOS,而輸出寄存器上的“1”將激活 P-MOS。
? 施密特觸發(fā)輸入被激活
? 弱上拉和下拉電阻被禁止
? 出現(xiàn)在 IO腳上的數(shù)據(jù)在每個 APB時鐘被采樣到輸入數(shù)據(jù)寄存器
? 在開漏模式時,對輸入數(shù)據(jù)寄存器的讀訪問可得到 IO狀態(tài)
? 在推挽模式時,對輸出數(shù)據(jù)寄存器的讀訪問得到最后一次寫的值
11.3.6. 模擬輸入配置
當 IO端口被配置為模擬輸入配置時
? 輸出緩存器被禁止
? 禁止施密特觸發(fā)輸入,實現(xiàn)了每個模擬 IO引腳上的零消耗。施密特觸發(fā)輸出值被強制為“0”
? 弱上拉和下拉電阻被禁止
? 讀取輸入數(shù)據(jù)寄存器時數(shù)值為“0”
11.3.7. 復用功能配置
對 IO端口進行編程作為復用功能時
? 在開漏或推挽式配置中,輸出緩沖器被打開
? 內(nèi)置外設的信號驅動輸出緩沖器 (復用功能輸出)
? 施密特觸發(fā)輸入被激活
? 弱上拉和下拉電阻被禁止
? 在每個 APB時鐘周期,出現(xiàn)在 IO腳上的數(shù)據(jù)被采樣到輸入數(shù)據(jù)寄存器
? 開漏模式時,讀輸入數(shù)據(jù)寄存器時可得到 IO口狀態(tài)
? 在推挽模式時,讀輸出數(shù)據(jù)寄存器時可得到最后一次寫的值
11.4.模塊框圖
-
單片機
+關注
關注
6037文章
44569瀏覽量
636133 -
mcu
+關注
關注
146文章
17172瀏覽量
351554 -
GPIO
+關注
關注
16文章
1205瀏覽量
52162 -
華大電子
+關注
關注
0文章
35瀏覽量
11834
發(fā)布評論請先 登錄
相關推薦
評論