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