1 綜述
I/O口是單片機(jī)中非常常用的外設(shè),STM32的I/O口有8種狀態(tài),雖然一直在使用過(guò)程中沒(méi)有遇到什么問(wèn)題,但是一直都不是很清楚,因此這里做一個(gè)總結(jié)(實(shí)際上這里的概念也是和STM8等其他單片機(jī),理解了這8中狀態(tài),也就基本上理解了大部分I/O口)。
2 廬山真面目
我們?cè)趲?kù)文件中的"stm32f10x_gpio.h"中可以看到如下代碼:
typedefenum
{
GPIO_Mode_AIN = 0x0,
GPIO_Mode_IN_FLOATING = 0x04,
GPIO_Mode_IPD = 0x28,
GPIO_Mode_IPU = 0x48,
GPIO_Mode_Out_OD = 0x14,
GPIO_Mode_Out_PP = 0x10,
GPIO_Mode_AF_OD = 0x1C,
GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;
上面因?yàn)槭怯⑽模簧跚逦?,下面下面翻譯一下:
typedefenum
{
GPIO_Mode_AIN = 0x0, /* 模擬輸入 */
GPIO_Mode_IN_FLOATING = 0x04, /* 浮空輸入,復(fù)位后的狀態(tài) */
GPIO_Mode_IPD = 0x28, /* 下拉輸入,這里的下拉是指單片機(jī)內(nèi)部的電阻 */
GPIO_Mode_IPU = 0x48, /* 上拉輸入,這里的上拉是指單片機(jī)內(nèi)部的電阻 */
GPIO_Mode_Out_OD = 0x14, /* 開(kāi)漏輸出 */
GPIO_Mode_Out_PP = 0x10, /* 推挽輸出 */
GPIO_Mode_AF_OD = 0x1C, /* 復(fù)用開(kāi)漏輸出 */
GPIO_Mode_AF_PP = 0x18 /* 復(fù)用推挽輸出 */
}GPIOMode_TypeDef;
在芯片資料中我們可以看到,I/O口的基本結(jié)構(gòu)如下(5V兼容I/O位的基本結(jié)構(gòu)圖省略):
由于我們使用函數(shù)庫(kù)開(kāi)發(fā),因此本文就不再接掃具體的位操作了。
3 分別介紹
3.1 模擬輸入(Analog input)
顧名思義,就是這個(gè)I/O口(input/output口)當(dāng)作input使用,并且是模擬輸入。模擬輸入狀態(tài)下用來(lái)接受模擬量(電壓值),一般用于AD采集。
3.2 浮空輸入(Floating input)
也叫懸浮輸入,一般把浮空輸入和上拉輸入做類(lèi)比學(xué)習(xí)。上拉輸入的時(shí)候,引腳內(nèi)部有一個(gè)上拉電阻通過(guò)開(kāi)關(guān)連接到電源VDD,當(dāng)引腳沒(méi)有和外部電路連接時(shí),設(shè)置上拉輸入方式的I/O引腳電平是確定的高電平(相同的,下拉輸入就是確定的低電平)。而浮空輸入則不同,它的電瓶水hi不確定的,即使外部的一個(gè)很小的輸入信號(hào)都會(huì)使其發(fā)生改變。如果引腳設(shè)置為懸空的情況下,讀取該端口的電平是不確定的。
3.3 下拉輸入(Input down)
顧名思義,很好理解,可以參見(jiàn)3.2 浮空輸入。
3.4 上拉輸入(Input up)
顧名思義,很好理解,可以參見(jiàn)3.2 浮空輸入。
3.5 開(kāi)漏輸出(Open Collector Output)
輸出端相當(dāng)于三極管的集電極,要得到高電平狀態(tài)需要上拉電阻才行。適合于做電流型的驅(qū)動(dòng),其吸收電流的能力相對(duì)強(qiáng)(一般20mA以內(nèi))。開(kāi)漏形式的電路有以下幾個(gè)特點(diǎn):
1、利用外部電路的驅(qū)動(dòng)能力,減少I(mǎi)C內(nèi)部的驅(qū)動(dòng)。當(dāng)IC內(nèi)部MOSFET導(dǎo)通時(shí),驅(qū)動(dòng)電流是從外部的VCC流經(jīng)上拉電阻、MOSFET到GND。IC內(nèi)部?jī)H需很小的柵極驅(qū)動(dòng)電流。
2、一般來(lái)說(shuō),開(kāi)漏是用來(lái)連接不同電平的器件,匹配電平用的,因?yàn)殚_(kāi)漏引腳不連接外部的上拉電阻時(shí),只能輸出低電平,如果需要同時(shí)具備輸出高電平的功能,則需要接上拉電阻,很好的一個(gè)優(yōu)點(diǎn)是通過(guò)改變上拉電源的電壓,便可以改變傳輸電平。比如加上上拉電阻就可以提供TTL/CMOS電平輸出等。(上拉電阻的阻值決定了邏輯電平轉(zhuǎn)換的速度。阻值越大,速度越低功耗越小,所以負(fù)載電阻的選擇要兼顧功耗和速度。)
3、開(kāi)漏輸出提供了靈活的輸出方式,但是也有其弱點(diǎn),就是帶來(lái)上升沿的延時(shí)。因?yàn)樯仙厥峭ㄟ^(guò)外接上拉無(wú)源電阻對(duì)負(fù)載充電,所以當(dāng)電阻選擇小時(shí)延時(shí)就小,但功耗大;反之延時(shí)大功耗小。所以如果對(duì)延時(shí)有要求,則建議用下降沿輸出。
4、可以將多個(gè)開(kāi)漏輸出連接到一條線上。通過(guò)一只上拉電阻,在不增加任何器件的情況下,形成"與邏輯"關(guān)系,即"線與"??梢院?jiǎn)單的理解為:在所有引腳連在一起時(shí),外接一上拉電阻,如果有一個(gè)引腳輸出為邏輯0,相當(dāng)于接地,與之并聯(lián)的回路"相當(dāng)于被一根導(dǎo)線短路",所以外電路邏輯電平便為0,只有都為高電平時(shí),與的結(jié)果才為邏輯1。
開(kāi)漏輸出就是不輸出電壓,低電平時(shí)接地,高電平時(shí)不接地。如果外接上拉電阻,則在輸出高電平時(shí)電壓會(huì)拉到上拉電阻的電源電壓。這種方式適合在連接的外設(shè)電壓比單片機(jī)電壓低的時(shí)候。輸出端出跟集電極開(kāi)路十分相似,工作原理也是一樣的。不同的是,開(kāi)漏輸出使用的場(chǎng)效應(yīng)管,使用時(shí)要加上拉電阻。(挺繞的,有機(jī)會(huì)用具體工程來(lái)介紹)
3.6 推挽輸出(Push-Pull Output)
推挽輸出可以輸出高、低電平,連接數(shù)字器件;推挽結(jié)構(gòu)一般是指兩個(gè)三極管分別受兩個(gè)互補(bǔ)信號(hào)的控制,總是在一個(gè)三極管導(dǎo)通的時(shí)候另一個(gè)截止。高低電平由IC的電源決定。
推挽電路是兩個(gè)參數(shù)相同的三極管或MOSFET,以推挽方式存在于電路中,各負(fù)責(zé)正負(fù)半周的波形放大任務(wù),電路工作時(shí),兩只對(duì)稱(chēng)的功率開(kāi)關(guān)管每次只有一個(gè)導(dǎo)通,所以導(dǎo)通損耗小、效率高。輸出既可以向負(fù)載灌電流,也可以從負(fù)載抽取電流。推拉式輸出級(jí)既提高電路的負(fù)載能力,又提高開(kāi)關(guān)速度。
關(guān)于推挽輸出和開(kāi)漏輸出,用一幅最簡(jiǎn)單的圖形來(lái)概括:該圖中左邊的便是推挽輸出模式,其中比較器輸出高電平時(shí)下面的PNP三極管截止,而上面NPN三極管導(dǎo)通,輸出電平VS+;當(dāng)比較器輸出低電平時(shí)則恰恰相反,PNP三極管導(dǎo)通,輸出和地相連,為低電平。右邊的則可以理解為開(kāi)漏輸出形式,需要接上拉。
3.7 復(fù)用開(kāi)漏輸出
可以理解為GPIO口被用作第二功能時(shí)的配置情況(即并非作為通用IO口使用)。
3.8 復(fù)用推挽輸出
與復(fù)用開(kāi)漏輸出一樣,可以理解為GPIO口被用作第二功能時(shí)的配置情況(即并非作為通用IO口使用)。
4 使用場(chǎng)景總結(jié)
1、浮空輸入GPIO_IN_FLOATING ——浮空輸入,可以做KEY識(shí)別,RX1。
2、帶上拉輸入GPIO_IPU——IO內(nèi)部上拉電阻輸入,有時(shí)也用作KEY是些。
3、帶下拉輸入GPIO_IPD—— IO內(nèi)部下拉電阻輸入,有時(shí)也用作KEY是些。
4、模擬輸入GPIO_AIN ——應(yīng)用ADC模擬輸入,或者低功耗下省電。
5、開(kāi)漏輸出GPIO_OUT_OD ——IO輸出0接GND,IO輸出1,懸空,需要外接上拉電阻,才能實(shí)現(xiàn)輸出高電平。當(dāng)輸出為1時(shí),IO口的狀態(tài)由上拉電阻拉高電平,但由于是開(kāi)漏輸出模式,這樣IO口也就可以由外部電路改變?yōu)榈碗娖交虿蛔儭?梢宰xIO輸入電平變化,實(shí)現(xiàn)C51的IO雙向功能。
6、推挽輸出GPIO_Mode_Out_PP ——IO輸出0-接GND, IO輸出1 -接VCC,讀輸入值是未知的。用的最多了。
使用SPI芯片等的時(shí)候,片選引腳就是該模式。
7、復(fù)用功能的推挽輸出GPIO_AF_PP ——片內(nèi)外設(shè)功能(I2C的SCL,SDA)
8、復(fù)用功能的開(kāi)漏輸出GPIO_AF_OD——片內(nèi)外設(shè)功能(TX1,MOSI,MISO.SCK.SS)
在使用SPI芯片的時(shí)候,SCK MISO MOSI管教就是該模式
5 STM32項(xiàng)目實(shí)例
1、作為普通GPIO輸入:根據(jù)需要配置該引腳為浮空輸入、帶弱上拉輸入或帶弱下拉輸入,同時(shí)不要使能該引腳對(duì)應(yīng)的所有復(fù)用功能模塊。
2、作為普通GPIO輸出:根據(jù)需要配置該引腳為推挽輸出或開(kāi)漏輸出,同時(shí)不要使能該引腳對(duì)應(yīng)的所有復(fù)用功能模塊。
3、作為普通模擬輸入:配置該引腳為模擬輸入模式,同時(shí)不要使能該引腳對(duì)應(yīng)的所有復(fù)用功能模塊。
4、作為內(nèi)置外設(shè)的輸入:根據(jù)需要配置該引腳為浮空輸入、帶弱上拉輸入或帶弱下拉輸入,同時(shí)使能該引腳對(duì)應(yīng)的某個(gè)復(fù)用功能模塊。
5、作為內(nèi)置外設(shè)的輸出:根據(jù)需要配置該引腳為復(fù)用推挽輸出或復(fù)用開(kāi)漏輸出,同時(shí)使能該引腳對(duì)應(yīng)的所有復(fù)用功能模塊。
注意如果有多個(gè)復(fù)用功能模塊對(duì)應(yīng)同一個(gè)引腳,只能使能其中之一,其它模塊保持非使能狀態(tài)。比如要使用STM32F103VBT6的47、48腳的USART3功能,則需要配置47腳為復(fù)用推挽輸出或復(fù)用開(kāi)漏輸出,配置48腳為某種輸入模式,同時(shí)使能USART3并保持I2C2的非使能狀態(tài)。如果要使用STM32F103VBT6的47腳作為T(mén)IM2_CH3,則需要對(duì)TIM2進(jìn)行重映射,然后再按復(fù)用功能的方式配置對(duì)應(yīng)引腳。
上一篇:使用STM32GPIO讀取按鍵實(shí)現(xiàn)按鍵操作
下一篇:STM32 GPIO使用超強(qiáng)總結(jié)
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- 基于單片機(jī)的LED自適應(yīng)調(diào)光系統(tǒng)
- 智能小車(chē)主控系統(tǒng)電路設(shè)計(jì)
- Microchip 升級(jí)數(shù)字信號(hào)控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無(wú)線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開(kāi)發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹(shù)莓派進(jìn)行 ESP32 Jtag 調(diào)試
- 威世推出適用于下一代電動(dòng)汽車(chē)?yán)鋮s系統(tǒng)的緊湊型熱敏電阻
- 通過(guò)vmRT-Thread和vSOME/IP支持車(chē)載SOA開(kāi)發(fā)
- “唯算力論”是誤區(qū)!堆滿硬件也不一定靠譜!如何才能邁入自動(dòng)駕駛?
- 賦能工業(yè)視覺(jué):Teledyne Bumblebee X 5GigE 立體視覺(jué)相機(jī)
- 這款“逆天”電池充滿電僅需18秒!背后藏著什么黑科技?
- 動(dòng)力電池的2025中場(chǎng)戰(zhàn)事
- 高算力支持下,端側(cè)AI模型能給座艙帶來(lái)哪些變化?
- Allotrope Energy開(kāi)發(fā)超級(jí)電容器 使混合動(dòng)力應(yīng)用的性能提高一倍
- 福特汽車(chē)申請(qǐng)新專(zhuān)利 或?qū)⑴鋫淇梢苿?dòng)桌子的控制臺(tái)
- 長(zhǎng)城汽車(chē)攜手南京藝術(shù)學(xué)院及超高清聯(lián)盟,共推車(chē)載音視頻技術(shù)革新
- 下載有好禮!羅姆帶您學(xué)習(xí)電源設(shè)計(jì)應(yīng)用小技巧(功率器件篇)
- EEWorld邀你來(lái)拆解(第10期)——玩具總動(dòng)員
- Microchip直播:?jiǎn)纹瑱C(jī)編程不再難, 利用MPLAB®代碼配置器(MCC)實(shí)現(xiàn)快速開(kāi)發(fā)
- 【搜集令】曬曬你收藏的經(jīng)典模擬電路!??!
- 答題贏京東卡|《安森美和安富利物聯(lián)網(wǎng)創(chuàng)新設(shè)計(jì)大賽作品集》
- TI C2000精品課暑期伴你行 學(xué)習(xí)好禮送不停
- 有獎(jiǎng)直播|相約Keysight World 2019“汽車(chē)電子及新能源汽車(chē)測(cè)試”論壇
- 話說(shuō)我接觸的ADI實(shí)驗(yàn)室電路“評(píng)估板”
- 了解PI高性能AC-DC產(chǎn)品,答題贏好禮
- S3C2440 Nand Flash驅(qū)動(dòng)(分析MTD層并制作NAND驅(qū)動(dòng))(二十三)
- S3C2440 DM9000C網(wǎng)卡移植(二十六)
- S3C2440 I2C總線協(xié)議 和 I2C總線下的AT24C02存儲(chǔ)芯片分析 二十七
- S3C2440 Linux2.6 I2C驅(qū)動(dòng)程序之框架和編寫(xiě)(二十八)
- S3C2440 字符設(shè)備的另一種寫(xiě)法register_chrdev_region()來(lái)注冊(cè)
- 美華盛頓警局采用亞馬遜面部識(shí)別軟件,引發(fā)公共安全問(wèn)題
- 禁令之后 中興或?qū)p失30億美元
- 第一版5G標(biāo)準(zhǔn)將于下月公布 中國(guó)有多大話語(yǔ)權(quán)?
- 惠普3D打印專(zhuān)題:3D打印批量化將成為趨勢(shì)
- 北斗增強(qiáng)系統(tǒng):引導(dǎo)用戶走完“最后一厘米”
- 樹(shù)莓派Pico出來(lái)了~本來(lái)說(shuō)好年前不推測(cè)評(píng)的我,又給大家來(lái)推這款板子了~~
- 數(shù)據(jù)存儲(chǔ)技術(shù)與實(shí)踐
- 單片機(jī)做PLC...請(qǐng)有經(jīng)驗(yàn)的大俠指點(diǎn)一下(關(guān)于梯形圖轉(zhuǎn)為單片機(jī)C51的問(wèn)題)
- 真心想學(xué)4、6、8層PCB畫(huà)法,求大家的PCB圖拿來(lái)參考學(xué)習(xí)。
- 基于Ipetronik和Kvaser模塊的測(cè)試系統(tǒng)
- PyBoard W5500固件編譯問(wèn)題
- 討論加求助
- 怎樣用msp430f415的TA實(shí)現(xiàn)外來(lái)脈沖計(jì)數(shù)
- 版版設(shè)計(jì)了一款MSP430的BOOSTERPACK,已經(jīng)投板
- 熱電阻軟擊穿的原因及熱電阻軟擊穿故障處理