STM32的I/O口的八种工作模式
生活随笔
收集整理的這篇文章主要介紹了
STM32的I/O口的八种工作模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
浮空,顧名思義就是浮在空中,上面用繩子一拉就上去了,下面用繩子一拉就沉下去了.??
開漏,就等于輸出口接了個NPN三極管,并且只接了e,b.?c極?是開路的,你可以接一個電阻到3.3V,也可以接一個電阻到5V,這樣,在輸出1的時候,就可以是5V電壓,也可以是3.3V電壓了.但是不接電阻上拉的時候,這個輸出高就不能實現了.??
推挽,就是有推有拉,任何時候IO口的電平都是確定的,不需要外接上拉或者下拉電阻.?
(1)GPIO_Mode_AIN?模擬輸入?
(2)GPIO_Mode_IN_FLOATING?浮空輸入?
(3)GPIO_Mode_IPD?下拉輸入?
(4)GPIO_Mode_IPU?上拉輸入?
(5)GPIO_Mode_Out_OD?開漏輸出?
(6)GPIO_Mode_Out_PP?推挽輸出?
(7)GPIO_Mode_AF_OD?復用開漏輸出?
(8)GPIO_Mode_AF_PP?復用推挽輸出?
推挽電路是兩個參數相同的三極管或MOSFET,以推挽方式存在于電路中,各負責正負半周的波形放大任務,電路工作時,兩只對稱的功率開關管每次只有一個導通,所以導通損耗小、效率高。輸出既可以向負載灌電流,也可以從負載抽取電流。推拉式輸出級既提高電路的負載能力,又提高開關速度。?
開漏輸出:輸出端相當于三極管的集電極.?要得到高電平狀態需要上拉電阻才行.?適合于做電流型的驅動,其吸收電流的能力相對強(一般20ma以內).?
開漏形式的電路有以下幾個特點:?
1.?利用外部電路的驅動能力,減少IC內部的驅動。當IC內部MOSFET導通時,驅動電流是從外部的VCC流經R?pull-up?,MOSFET到GND。IC內部僅需很下的柵極驅動電流。?
2.?一般來說,開漏是用來連接不同電平的器件,匹配電平用的,因為開漏引腳不連接外部的上拉電阻時,只能輸出低電平,如果需要同時具備輸出高電平的功能,則需要接上拉電阻,很好的一個優點是通過改變上拉電源的電壓,便可以改變傳輸電平。比如加上上拉電阻就可以提供TTL/CMOS電平輸出等。(上拉電阻的阻值決定了邏輯電平轉換的沿的速度?。阻值越大,速度越低功耗越小,所以負載電阻的選擇要兼顧功耗和速度。)?
3.?OPEN-DRAIN提供了靈活的輸出方式,但是也有其弱點,就是帶來上升沿的延時。因為上升沿是通過外接上拉無源電阻對負載充電,所以當電阻選擇小時延時就小,但功耗大;反之延時大功耗小。所以如果對延時有要求,則建議用下降沿輸出。?
4.?可以將多個開漏輸出的Pin,連接到一條線上。通過一只上拉電阻,在不增加任何器件的情況下,形成“與邏輯”關系。這也是I2C,SMBus等總線判斷總線占用狀態的原理。補充:什么是“線與”?:?
在一個結點(線)上,?連接一個上拉電阻到電源?VCC?或?VDD?和?n?個?NPN?或?NMOS?晶體管的集電極?C?或漏極?D,?這些晶體管的發射極?E?或源極?S?都接到地線上,?只要有一個晶體管飽和,?這個結點(線)就被拉到地線電平上.?因為這些晶體管的基極注入電流(NPN)或柵極加上高電平(NMOS),晶體管就會飽和,?所以這些基極或柵極對這個結點(線)的關系是或非?NOR?邏輯.?如果這個結點后面加一個反相器,?就是或?OR?邏輯.?
其實可以簡單的理解為:在所有引腳連在一起時,外接一上拉電阻,如果有一個引腳輸出為邏輯0,相當于接地,與之并聯的回路“相當于被一根導線短路”,所以外電路邏輯電平便為0,只有都為高電平時,與的結果才為邏輯1。?
由于浮空輸入一般多用于外部按鍵輸入,結合圖上的輸入部分電路,我理解為浮空輸入狀態下,IO的電平狀態是不確定的,完全由外部輸入決定,如果在該引腳懸空的情況下,讀取該端口的電平是不確定的。?
上拉輸入/下拉輸入/模擬輸入:這幾個概念很好理解,從字面便能輕易讀懂。?
復用開漏輸出、復用推挽輸出:可以理解為GPIO口被用作第二功能時的配置情況(即并非作為通用IO口使用)?
最后總結下使用情況:?
在STM32中選用IO模式?
(1)?浮空輸入_IN_FLOATING?——浮空輸入,可以做KEY識別,RX1?
(2)帶上拉輸入_IPU——IO內部上拉電阻輸入?
(3)帶下拉輸入_IPD——?IO內部下拉電阻輸入?
(4)?模擬輸入_AIN?——應用ADC模擬輸入,或者低功耗下省電?
(5)開漏輸出_OUT_OD?——IO輸出0接GND,IO輸出1,懸空,需要外接上拉電阻,才能實現輸出高電平。當輸出為1時,IO口的狀態由上拉電阻拉高電平,但由于是開漏輸出模式,這樣IO口也就可以由外部電路改變為低電平或不變??梢宰xIO輸入電平變化,實現C51的IO雙向功能?
(6)推挽輸出_OUT_PP?——IO輸出0-接GND,?IO輸出1?-接VCC,讀輸入值是未知的?
(7)復用功能的推挽輸出_AF_PP?——片內外設功能(I2C的SCL,SDA)?
(8)復用功能的開漏輸出_AF_OD——片內外設功能(TX1,MOSI,MISO.SCK.SS)?
STM32設置實例:?
(1)模擬I2C使用開漏輸出_OUT_OD,接上拉電阻,能夠正確輸出0和1;讀值時先GPIO_SetBits(GPIOB,?GPIO_Pin_0);拉高,然后可以讀IO的值;使用GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);?
(2)如果是無上拉電阻,IO默認是高電平;需要讀取IO的值,可以使用帶上拉輸入_IPU和浮空輸入_IN_FLOATING和開漏輸出_OUT_OD;
開漏,就等于輸出口接了個NPN三極管,并且只接了e,b.?c極?是開路的,你可以接一個電阻到3.3V,也可以接一個電阻到5V,這樣,在輸出1的時候,就可以是5V電壓,也可以是3.3V電壓了.但是不接電阻上拉的時候,這個輸出高就不能實現了.??
推挽,就是有推有拉,任何時候IO口的電平都是確定的,不需要外接上拉或者下拉電阻.?
(1)GPIO_Mode_AIN?模擬輸入?
(2)GPIO_Mode_IN_FLOATING?浮空輸入?
(3)GPIO_Mode_IPD?下拉輸入?
(4)GPIO_Mode_IPU?上拉輸入?
(5)GPIO_Mode_Out_OD?開漏輸出?
(6)GPIO_Mode_Out_PP?推挽輸出?
(7)GPIO_Mode_AF_OD?復用開漏輸出?
(8)GPIO_Mode_AF_PP?復用推挽輸出?
推挽電路是兩個參數相同的三極管或MOSFET,以推挽方式存在于電路中,各負責正負半周的波形放大任務,電路工作時,兩只對稱的功率開關管每次只有一個導通,所以導通損耗小、效率高。輸出既可以向負載灌電流,也可以從負載抽取電流。推拉式輸出級既提高電路的負載能力,又提高開關速度。?
開漏輸出:輸出端相當于三極管的集電極.?要得到高電平狀態需要上拉電阻才行.?適合于做電流型的驅動,其吸收電流的能力相對強(一般20ma以內).?
開漏形式的電路有以下幾個特點:?
1.?利用外部電路的驅動能力,減少IC內部的驅動。當IC內部MOSFET導通時,驅動電流是從外部的VCC流經R?pull-up?,MOSFET到GND。IC內部僅需很下的柵極驅動電流。?
2.?一般來說,開漏是用來連接不同電平的器件,匹配電平用的,因為開漏引腳不連接外部的上拉電阻時,只能輸出低電平,如果需要同時具備輸出高電平的功能,則需要接上拉電阻,很好的一個優點是通過改變上拉電源的電壓,便可以改變傳輸電平。比如加上上拉電阻就可以提供TTL/CMOS電平輸出等。(上拉電阻的阻值決定了邏輯電平轉換的沿的速度?。阻值越大,速度越低功耗越小,所以負載電阻的選擇要兼顧功耗和速度。)?
3.?OPEN-DRAIN提供了靈活的輸出方式,但是也有其弱點,就是帶來上升沿的延時。因為上升沿是通過外接上拉無源電阻對負載充電,所以當電阻選擇小時延時就小,但功耗大;反之延時大功耗小。所以如果對延時有要求,則建議用下降沿輸出。?
4.?可以將多個開漏輸出的Pin,連接到一條線上。通過一只上拉電阻,在不增加任何器件的情況下,形成“與邏輯”關系。這也是I2C,SMBus等總線判斷總線占用狀態的原理。補充:什么是“線與”?:?
在一個結點(線)上,?連接一個上拉電阻到電源?VCC?或?VDD?和?n?個?NPN?或?NMOS?晶體管的集電極?C?或漏極?D,?這些晶體管的發射極?E?或源極?S?都接到地線上,?只要有一個晶體管飽和,?這個結點(線)就被拉到地線電平上.?因為這些晶體管的基極注入電流(NPN)或柵極加上高電平(NMOS),晶體管就會飽和,?所以這些基極或柵極對這個結點(線)的關系是或非?NOR?邏輯.?如果這個結點后面加一個反相器,?就是或?OR?邏輯.?
其實可以簡單的理解為:在所有引腳連在一起時,外接一上拉電阻,如果有一個引腳輸出為邏輯0,相當于接地,與之并聯的回路“相當于被一根導線短路”,所以外電路邏輯電平便為0,只有都為高電平時,與的結果才為邏輯1。?
由于浮空輸入一般多用于外部按鍵輸入,結合圖上的輸入部分電路,我理解為浮空輸入狀態下,IO的電平狀態是不確定的,完全由外部輸入決定,如果在該引腳懸空的情況下,讀取該端口的電平是不確定的。?
上拉輸入/下拉輸入/模擬輸入:這幾個概念很好理解,從字面便能輕易讀懂。?
復用開漏輸出、復用推挽輸出:可以理解為GPIO口被用作第二功能時的配置情況(即并非作為通用IO口使用)?
最后總結下使用情況:?
在STM32中選用IO模式?
(1)?浮空輸入_IN_FLOATING?——浮空輸入,可以做KEY識別,RX1?
(2)帶上拉輸入_IPU——IO內部上拉電阻輸入?
(3)帶下拉輸入_IPD——?IO內部下拉電阻輸入?
(4)?模擬輸入_AIN?——應用ADC模擬輸入,或者低功耗下省電?
(5)開漏輸出_OUT_OD?——IO輸出0接GND,IO輸出1,懸空,需要外接上拉電阻,才能實現輸出高電平。當輸出為1時,IO口的狀態由上拉電阻拉高電平,但由于是開漏輸出模式,這樣IO口也就可以由外部電路改變為低電平或不變??梢宰xIO輸入電平變化,實現C51的IO雙向功能?
(6)推挽輸出_OUT_PP?——IO輸出0-接GND,?IO輸出1?-接VCC,讀輸入值是未知的?
(7)復用功能的推挽輸出_AF_PP?——片內外設功能(I2C的SCL,SDA)?
(8)復用功能的開漏輸出_AF_OD——片內外設功能(TX1,MOSI,MISO.SCK.SS)?
STM32設置實例:?
(1)模擬I2C使用開漏輸出_OUT_OD,接上拉電阻,能夠正確輸出0和1;讀值時先GPIO_SetBits(GPIOB,?GPIO_Pin_0);拉高,然后可以讀IO的值;使用GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);?
(2)如果是無上拉電阻,IO默認是高電平;需要讀取IO的值,可以使用帶上拉輸入_IPU和浮空輸入_IN_FLOATING和開漏輸出_OUT_OD;
總結
以上是生活随笔為你收集整理的STM32的I/O口的八种工作模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Verilog中的加法器(半加器,全加器
- 下一篇: 上拉输入与下拉输入