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