一.GPIO的簡(jiǎn)介
GPIO (general purpose input output)是通用輸入輸出端口的簡(jiǎn)稱,簡(jiǎn)單來(lái)說(shuō)就是軟件可控制的引腳,STM32芯片的GPIO引腳與外部設(shè)備連接起來(lái),從而實(shí)現(xiàn)與外部通訊、控制以及數(shù)據(jù)采集的功能。
1.引腳全是GPIO嘛?
答案是否定的,不是所有引腳都是GPIO
STM32F103VET6引腳圖
STM32 芯片的 GPIO 被分成很多組,每組有 16 個(gè)引腳,如型號(hào)為 STM32F103VET6 型號(hào)的芯片有 GPIOA、GPIOB、GPIOC 至 GPIOE 共 5 組 GPIO,例如GPIOA(PA0~PA15 16個(gè)引腳)芯片一共 100 個(gè)引腳,其中GPIO 就占了一大部分,所有的 GPIO 引腳都有基本的輸入輸出功能
這100個(gè)引腳中除了GPIO還有特殊功能的引腳,例如復(fù)位引腳,電源引腳…
2.GPIO的輸入輸出模式
GPIO可配置8種模式
輸出模式下可控制端口的輸出高低電平,可用于驅(qū)動(dòng)LED、控制蜂鳴器、模擬通信協(xié)議輸出時(shí)序(SPI I2C 等)等
輸入模式下可讀取端口的高低電平或電壓,用于讀取按鍵輸入,外接模塊電平信號(hào)輸入,ADC電壓采集、模擬通信協(xié)議接收數(shù)據(jù)(SPI I2C 等)等
3.GPIO基本結(jié)構(gòu)
每個(gè)GPIO端口對(duì)應(yīng)16個(gè)引腳,例GPIOA(PA0~PA15)
內(nèi)核cpu就可以通過(guò)APB2總線對(duì)寄存器讀寫(xiě),完成輸出電平和讀取電平的功能
二.GPIO功能框圖
保護(hù)二極管
芯片的引腳電平0~3.3V,部分引腳可以5V,引腳的兩個(gè)保護(hù)二級(jí)管可以防止引腳外部過(guò)高或過(guò)低的電壓輸入
1.當(dāng)引腳電壓高于VDD 時(shí),上方的二極管導(dǎo)通
防止過(guò)高電壓進(jìn)入芯片內(nèi)部燒壞芯片
2.當(dāng)引腳電壓低于 VSS 時(shí),下方的二極管導(dǎo)通
防止電壓過(guò)低,從芯片內(nèi)部汲取電流
施密特觸發(fā)器
具有濾波的作用,就是讓通過(guò)的電平輸出穩(wěn)定的高低電平
三.GPIO的8種工作模式
1.浮空,上拉,下拉輸入
在輸入模式時(shí),施密特觸發(fā)器打開(kāi),輸出被禁止,可通過(guò)輸入數(shù)據(jù)寄存器 GPIOx_IDR讀取 I/O 狀態(tài)。
由于電阻阻值很大這里的上拉下拉輸入都是弱上拉 弱下拉,為了對(duì)外部輸入產(chǎn)生很大的影響
上拉輸入:給一個(gè)默認(rèn)的高電平也就是說(shuō)當(dāng)沒(méi)有外部輸入時(shí)默認(rèn)輸入高電平
下拉輸入:給一個(gè)默認(rèn)的低電平也就是說(shuō)當(dāng)沒(méi)有外部輸入時(shí)默認(rèn)輸入低電平
浮空輸入:如果輸入引腳啥都不接,此時(shí)輸入電平極易受外界的干擾導(dǎo)致輸入電平不確定,完全由外部的輸入決定。
2.模擬輸入
這模式主要為片上外設(shè)ADC而配置,從外部讀取模擬信號(hào)
模擬信號(hào):測(cè)試信號(hào)未經(jīng)過(guò)采樣前,均是時(shí)間和幅值均是連續(xù)的信號(hào)稱為模擬信號(hào),例如連續(xù)變化的電壓,電流,溫度等等。
數(shù)字信號(hào):模擬信號(hào)經(jīng)等間隔“采樣”及幅值量化以后,時(shí)間和幅值均是不連續(xù)的(離散)的信號(hào),例如0 /1
這里不需要經(jīng)過(guò)施密特濾波,人家本來(lái)就要連續(xù)變化的模擬量
3.推挽和開(kāi)漏輸出
● 施密特觸發(fā)輸入被激活
● 弱上拉和下拉電阻被禁止
● 出現(xiàn)在I/O腳上的數(shù)據(jù)在每個(gè)APB2時(shí)鐘被采樣到輸入數(shù)據(jù)寄存器
● 在開(kāi)漏模式時(shí),對(duì)輸入數(shù)據(jù)寄存器的讀訪問(wèn)可得到I/O狀態(tài)
● 在推挽式模式時(shí),對(duì)輸出數(shù)據(jù)寄存器的讀訪問(wèn)得到最后一次寫(xiě)的值
除了模擬輸入的這種模式會(huì)關(guān)閉數(shù)字輸入功能其他七種模式,都可以通過(guò)輸入寄存器讀取I/O狀態(tài),例:在模擬I2C實(shí)驗(yàn)中把GPIO的工作模式配置為開(kāi)漏輸出時(shí)同時(shí)也可以讀取引腳電平狀態(tài),現(xiàn)在不知道不要緊后面會(huì)詳細(xì)講解
在輸出模式中,推挽模式時(shí)雙 MOS 管以輪流方式工作,輸出數(shù)據(jù)寄存器 GPIOx_ODR可控制 I/O 輸出高低電平。開(kāi)漏模式時(shí),只有 N-MOS 管工作,輸出數(shù)據(jù)寄存器可控制 I/O輸出高阻態(tài)或低電平。
1.推挽輸出
當(dāng)輸出寄存器輸出高電平,則引腳也輸出高電平
當(dāng)輸出寄存器輸出低電平,則引腳也輸出低電平
2.開(kāi)漏輸出
當(dāng)輸出寄存器輸出高電平,則引腳輸出高阻態(tài)
當(dāng)輸出寄存器輸出低電平,則引腳輸出低電平
4.復(fù)用功能推挽開(kāi)漏輸出
復(fù)用功能模式中,輸出使能,輸出速度可配置,可工作在開(kāi)漏及推挽模式, 但是輸出信號(hào)源于其它外設(shè)
輸出數(shù)據(jù)寄存器 GPIOx_ODR 無(wú)效;輸入可用,通過(guò)輸入數(shù)據(jù)寄存器可獲取 I/O 實(shí)際狀態(tài),但一般直接用外設(shè)的寄存器來(lái)獲取該數(shù)據(jù)信號(hào)
這里以串口的發(fā)送TX和接收RX引腳為例
串口的發(fā)送引腳TX
串口的接收引腳RX
這里串口外設(shè)不知道是什么不要緊,以后會(huì)細(xì)講只要指到復(fù)用功能的推挽與開(kāi)漏輸出與普通的推挽與開(kāi)漏輸出只是輸出的寄存器換成外設(shè)的寄存器
四.GPIO的寄存器
通過(guò)對(duì) GPIO 寄存器寫(xiě)入不同的參數(shù),就可以改變 GPIO 的工作模式,要了解具體寄存器時(shí)一定要查閱《STM32F10X-中文參考手冊(cè)》中對(duì)應(yīng)外設(shè)的寄存器說(shuō)明。
端口配置低寄存器
在 GPIO 外設(shè)中,控制端口高低控制寄存器 CRH 和 CRL 可以配置每個(gè) GPIO 的工作模式和工作的速度,每 4 個(gè)位控制一個(gè) IO,CRH 控制端口的高八位,CRL 控制端口的低 8 位,具體的看 CRH 和 CRL 的寄存器描述
端口配置低寄存器
端口輸出寄存器
端口位設(shè)置/清除寄存器
端口位清除寄存器
端口位清除寄存器
總結(jié)
大家一定要把八種GPIO的模式都弄清楚原理,為后面學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ),本文就到這里。
來(lái)源:https://blog.csdn.net/k666499436/article/details/123845466
-
STM32
+關(guān)注
關(guān)注
2270文章
10895瀏覽量
355722 -
端口
+關(guān)注
關(guān)注
4文章
963瀏覽量
32051 -
引腳
+關(guān)注
關(guān)注
16文章
1193瀏覽量
50409 -
GPIO
+關(guān)注
關(guān)注
16文章
1204瀏覽量
52051
原文標(biāo)題:拒絕枯燥繁瑣!詳解STM32-GPIO端口的八種工作模式 這次真的學(xué)會(huì)了
文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論