網(wǎng)站交互式網(wǎng)站推廣引流最快方法
文章目錄
- 一.GPIO輸入
- 1.1GPIP簡介
- 1.2GPIO基本結(jié)構(gòu)
- 1.3GPIO位結(jié)構(gòu)
- 1.4GPIO的八種模式
- 1.4.1浮空/上拉/下拉輸入
- 1.4.2 模擬輸入
- 1.4.3 推挽輸出\開漏輸出
- 二.GPIO輸入
- 2.1.按鍵介紹
- 2.2傳感器模塊介紹
- 2.3按鍵電路
一.GPIO輸入
1.1GPIP簡介
- GPIO「General Purpose Input Output」:通用輸入和輸出口
- 可配置為8種輸入和輸出模式
- 引腳電平:0V~3.3V,部分引腳可以容忍5V「在引腳分布圖中,帶FT的是可以容忍5V的」
- 輸出模式下可控制端口輸出高電平,用以驅(qū)動LED,控制蜂鳴器,模擬通信協(xié)議輸出時序等「只要是用高低電平來使用控制的地方,都可以用GPIO來完成;如果是控制功率比較大的設(shè)備,只需要加入驅(qū)動電路即可。我們還可以使用GPIO來模擬通信協(xié)議,比如I2C,SPI或者某個芯片特定的協(xié)議,我們都可以使用GPIO的輸出模式來模擬其中中輸出時序部分」
1.2GPIO基本結(jié)構(gòu)
-
在STM32中,所有的GPIO都是掛載在APB2外設(shè)總線上的,其中GPIO外設(shè)的名稱是按照GPIOA,GPIOB,GPIOC等等這樣來命名的。
-
每個GPIO外設(shè)一共16個引腳,編號是從0到15,比如:GPIO的第0號引腳我們一般稱之為PA0,接著就是PA1…一直到PA15
-
輸入模式下可讀取端口的高低電平或電壓,用于讀取按鍵輸入「這是最常見的一種方式」,外接模塊電平信號輸入,ADC電壓采集,模擬通信協(xié)議接收數(shù)據(jù)等等。
-
在每個GPIO的模塊內(nèi),主要包含驅(qū)動器和寄存器這些東西,寄存器就是一段特殊的存儲器,內(nèi)核可以通過APB2總線對寄存器進行讀寫,這樣就可以實現(xiàn)輸出電平和讀取電平的功能了。
-
寄存器的每一位對應(yīng)一個輸出引腳,其中輸出寄存器寫1,對應(yīng)的引腳就會輸出高電平;寫0,就會輸出低電平。輸入寄存器讀取為1,就證明對應(yīng)的端口目前是高電平,讀取為0,就是低電平
-
因為STM32是32位的單片機,所以STM32內(nèi)部都是32位的,但是這個端口只有16位,所以這個寄存器只有低16位對應(yīng)的有端口,高16位是沒有用到的
-
這個驅(qū)動器是用來增加信號的驅(qū)動能力的,寄存器只負(fù)責(zé)存儲數(shù)據(jù),如果要用來點燈操作的話,還是要驅(qū)動器來負(fù)責(zé)增大驅(qū)動的能力的
1.3GPIO位結(jié)構(gòu)
- 上拉輸入,默認(rèn)是高電平的輸入模式,下拉輸入,默認(rèn)是低電平的輸入模式。這個上拉電阻和下拉電阻的阻值都是比較大的,是一種弱上拉和弱下拉,目的是不影響正常的輸入操作。
- 肖特基觸發(fā)器是翻譯錯誤,正確的名字應(yīng)該是斯密特觸發(fā)器「作用是對輸入電壓進行整形的」,這個觸發(fā)器的執(zhí)行邏輯是:如果收入電壓大于某一閾值,輸出就會瞬間升為高電平,如果輸入電壓小于某一閾值,輸出就會瞬間升為低電平。「舉個例子:因為這個引腳的波形是外界輸入的,雖然是數(shù)字信號,實際情況下可能會產(chǎn)生某些失真」
- 因為這個輸出寄存器同時控制機16個端口,并且這個寄存器只能整體的讀寫,所以如果想單獨控制某一個端口而不影響其他端口的話就需要一些特殊的方式。第①種方式是先讀出這個寄存器,然后用按位與和按位或的方式更改某一位,最后再將更改后的數(shù)據(jù)寫回去,在C語言中就是&=和|=的操作,這種方式比較麻煩,效率不高,對于IO的話,操作的效率不高。第②種方式是通過設(shè)置這個位設(shè)置和位清除寄存器,如果我們要對某一位進行置1的操作,在位設(shè)置的寄存器的對應(yīng)的位寫1即可,剩下不需要操作的位寫0,這樣他內(nèi)部就會有電路,自動將輸出寄存器中對應(yīng)的位置寫1,而剩下寫0的位則保持不變。如果想對某一位進行清0操作,在清除寄存器對應(yīng)的位寫1即可。第二種方式就是利用這個位設(shè)置和位清除寄存器的作用。第③種方式就是讀寫STM32中的
位帶
區(qū)域,這個位帶的作用就和STM32中的位尋址的作用差不多,在STM32中,有一段區(qū)域映射了RAM和外設(shè)寄存器所有的位,讀寫這段地址中的區(qū)域,就相當(dāng)于讀寫所映射位置的某一位一樣 - 在接下來輸出控制之后,就接在了兩個MOS管上,上面是P-MOS,下面是N-MOS。這個MOS管就是一種電子開關(guān),我們的信號負(fù)責(zé)導(dǎo)通開關(guān)的導(dǎo)通和關(guān)閉,開關(guān)負(fù)責(zé)將IO口接到VDD和VSS,在這里可以選擇推挽開漏和關(guān)閉三種輸出方式,①在推挽模式下:P—–MOS和N-MOS都打開,數(shù)據(jù)寄存器為1時,上管導(dǎo)通,下管斷開,輸入寄存器直接接住VDD,就是就是輸出高電平,輸出寄存器為0時,上管導(dǎo)通,下管斷開,輸出寄存器直接接到VSS,就是輸出低電平,這種模式下高低電平均有較強的驅(qū)動能力,所以推挽輸出模式也可以叫做強推輸出模式,在推挽輸出模式下,STM32對IO口有絕對的控制權(quán),高低電平都對STM32說的算,②在開漏模式下,這個P-MOS是無效的,只有N-MOS在工作,數(shù)據(jù)寄存器為1時,下管斷開,這時輸出寄存器相當(dāng)于斷開,這就是高阻模式;數(shù)據(jù)寄存器為0時,下管導(dǎo)通,輸出直接接到VSS,也就是輸出低電平,這種模式下,只有低電平有驅(qū)動能力,高電平是沒有驅(qū)動能力的,這個開漏模式有什么用呢?這個開漏模式可以作為通信協(xié)議的驅(qū)動方式,比如I2C通信的引腳,就是使用的是開漏沒事,在多機通信的模式下,這種模式可以避免多個設(shè)備之間互相干擾,開漏模式還可以用于輸出5V的電平信號,用于兼容一些5V的通信設(shè)備
1.4GPIO的八種模式
通過配置GPIO的端口配置寄存器,端口可以配置成以下幾種模式:
模式編號 | 模式名稱 | 描述 |
---|---|---|
0 | 輸入浮空 (Input Floating) | GPIO引腳被配置為高阻態(tài),既不拉高也不拉低,適合用于檢測外部電平變化。 |
1 | 輸入上拉 (Input Pull-up) | 內(nèi)部上拉電阻使引腳在沒有外部信號時呈現(xiàn)高電平。 |
2 | 輸入下拉 (Input Pull-down) | 內(nèi)部下拉電阻使引腳在沒有外部信號時呈現(xiàn)低電平。 |
3 | 輸出推挽 (Output Push-Pull) | 引腳可以主動驅(qū)動高電平或低電平,適用于驅(qū)動LED等負(fù)載。 |
4 | 輸出開漏 (Output Open-Drain) | 引腳只能主動拉低,需要外部上拉電阻來提供高電平。 |
5 | 復(fù)用推挽 (Alternate Function Push-Pull) | 將引腳配置為復(fù)用功能,如UART、I2C等,并以推挽方式輸出。 |
6 | 復(fù)用開漏 (Alternate Function Open-Drain) | 將引腳配置為復(fù)用功能,如UART、I2C等,并以開漏方式輸出。 |
7 | 模擬 (Analog) | 引腳被配置為模擬輸入,用于ADC等模擬信號處理。 |
每種模式都有其特定的應(yīng)用場景,選擇正確的模式對于確保電路正確工作至關(guān)重要。例如,如果要使用GPIO引腳作為數(shù)字輸入來讀取按鈕狀態(tài),可以選擇輸入上拉或下拉模式;如果要用作LED驅(qū)動,則輸出推挽模式可能是更好的選擇。對于像I2C這樣的通信協(xié)議,通常會使用輸出開漏或復(fù)用開漏模式,因為這些協(xié)議通常需要外部上拉電阻來確??偩€處于正確的電平。
1.4.1浮空/上拉/下拉輸入
在輸入模式下,輸出功能關(guān)閉
1.4.2 模擬輸入
模擬輸入:ADC模數(shù)轉(zhuǎn)換器的專屬配置,其他時候一般用不到模擬輸入
1.4.3 推挽輸出\開漏輸出
- 開漏輸出:可輸出引腳電平,高電平為高阻態(tài),低電平接VSS,高電平?jīng)]有驅(qū)動能力
- 推挽輸出:可輸出引腳電平,高電平接VDD,低電平接VSS,高低電平均有較強的驅(qū)動能力
在輸出模式下:也是可以進行輸入的
引腳的控制權(quán)轉(zhuǎn)移到了片上外設(shè),由片上外設(shè)來控制,在輸入部分,片上外設(shè)也可以讀取引腳的電平,同時普通的輸入也是有效的,順便接收一下信號
在GPIO的八種模式中,除了模擬信號這個模式會關(guān)閉數(shù)字的輸入功能,在其他的7個模式中,所有的輸入都是有效的
二.GPIO輸入
2.1.按鍵介紹
- 按鍵:常見的輸入設(shè)備,按下導(dǎo)通,松手?jǐn)嚅_。
- 按鍵抖動:由于按鍵內(nèi)部使用的是機械式的彈簧片來進行通斷的,所以在按下和松手的瞬間會伴隨有一連串的抖動
所以我們要對這個抖動進行過濾,否則就會出現(xiàn)按鍵按一下,單片機會反應(yīng)多次的現(xiàn)象。另外在按鍵松手時,也會有抖動的現(xiàn)象,這個我們在程序中也要學(xué)會過濾。最簡單的過濾方法就是加一段延時,把震蕩的一段時間給延時過去
2.2傳感器模塊介紹
傳感器模塊:傳感器元件(光敏電阻/熱敏電阻/紅外接收管等)的電阻會隨外界模擬量的變化而變化,通過與定值電阻分壓即可得到模擬電壓輸出,再通過電壓比較器進行二值化即可得到數(shù)字電壓輸出
2.3按鍵電路
- 在第一幅圖中,必須要求PA0是上拉輸入模式,否則就會出現(xiàn)引腳不確定的情況,引腳懸空的情況下,就是高電平,
- 在第二副圖中,引腳需要配置成上拉輸入或者浮空輸入,對應(yīng)的高電平就更加的穩(wěn)定,這樣的話,當(dāng)引腳強行拉到低時,對應(yīng)的損耗就會大一些
- 第三個圖中,要求PA0必須配置成下拉輸入模式,當(dāng)按鍵按下時,引腳為高電平,松手時,引腳回到默認(rèn)低電平,一般的單片機不一定有下拉輸入模式,
- 在第四個圖中,PA0需要配置為下拉輸入模式或者浮空輸入模式