|
初次接觸STM32,對GPIO的工作模式有時一臉懵(比51要復(fù)雜不少),在此作個簡記。
GPIO工作模式
STM32的GPIO有4種輸入模式(浮空輸入、上拉輸入、下拉輸入、模擬輸入),4種輸出模式(開漏輸出、復(fù)用開漏輸出、推挽輸出、復(fù)用推挽輸出)。
浮空輸入
在該模式下,I/O口的電平信號直接進入GPIO端口輸入數(shù)據(jù)寄存器(GPIOx_IDR),MCU直接讀取I/O口的電平,I/O口的電平狀態(tài)完全由外部輸入來決定;若該引腳懸空(無信號輸入),讀取到的電平狀態(tài)為不確定。
上拉輸入
I/O口內(nèi)部接上拉電阻,若引腳懸空或I/O口外部沒有信號輸入,I/O口默認為高電平;若I/O口輸入低電平,則引腳為低電平,MCU讀取到的就是低電平。
下拉輸入
I/O口內(nèi)部接下拉電阻,若引腳懸空或I/O口外部沒有信號輸入,I/O口默認為低電平;若I/O口輸入高電平,則引腳就為高電平,MCU讀取到的就是高電平。
模擬輸入
在該模式下,GPIOx_IDR為空,引腳的上拉/下拉電阻不起作用(即使配置了上拉/下拉模式)。
開漏輸出
在該模式下,若控制輸出為低電平,I/O口處于低電平狀態(tài);若控制輸出為高電平,I/O口的電平狀態(tài)由I/O口外部的上拉/下拉電阻來決定,若無上拉/下拉,I/O口處于懸空狀態(tài)。
在該模式下,輸入可用,可通過GPIOx_IDR讀取I/O口的實際狀態(tài),I/O口的電平不一定是輸出的電平。
復(fù)用開漏輸出
GPIO復(fù)用為其他外設(shè),GPIO端口輸出數(shù)據(jù)寄存器(GPIOx_ODR)無效;輸出的高/低電平來源于其它外設(shè),輸入可用,可通過GPIOx_IDR獲取I/O實際狀態(tài),除了輸出信號的來源改變外,其它與開漏輸出模式功能相同。
推挽輸出
在該模式下,若控制輸出為低電平,I/O口處于低電平狀態(tài);若控制輸出為高電平,I/O口處于高電平狀態(tài),外部上拉/下拉可控制在沒有輸出時I/O口的電平。
在該模式下,輸入可用,可通過GPIOx_IDR讀取I/O口的實際狀態(tài),I/O口的電平一定是輸出的電平。
復(fù)用推挽輸出
GPIO復(fù)用為其他外設(shè),GPIOx_ODR無效;輸出的高/低電平來源于其它外設(shè),輸入可用,可通過GPIOx_IDR獲取I/O實際狀態(tài),除了輸出信號的來源改變外,其它與推挽輸出模式功能相同。
補充
推挽輸出模式可以輸出強高/強低電平,連接數(shù)字器件;
開漏輸出模式可以輸出強低電平,需要外接上拉電阻才能實現(xiàn)輸出高電平;
任何一種開漏模式,都需要接上拉電阻,否則只能輸出低電平。
上拉輸入/下拉輸入可用于檢測外部信號(例如,按鍵);
開漏輸出一般應(yīng)用于IIC等需要線與功能的總線電路中;
復(fù)用開漏輸出/復(fù)用推挽輸出應(yīng)用于片內(nèi)外設(shè);
STM32的GPIO輸出,除了必須用開漏模式的場合,一般都使用推挽模式。
|
評分
-
查看全部評分
|