【STM32 |GPIO】GPIO結構、GPIO輸出

目錄

GPIO簡介

GPIO的基本結構

?GPIO位結構(每一位的具體電路結構)

輸入

上拉和下拉電阻

斯密特觸發器

?編輯?

輸出?

GPIO模式

?編輯?

浮空輸入、上拉輸入、下拉輸入

模擬輸入

?開漏輸出和推挽輸出

復用開漏輸出和復用推挽輸出?

LED和蜂鳴器介紹

LED和蜂鳴器的硬件電路

LED

蜂鳴器


GPIO簡介

GPIO(General Purpose Input Output)通用輸入輸出口

可配置為8種輸入輸出模式

引腳電平:0V~3.3V,部分引腳可容忍5V

輸出模式下可控制端口輸出高低電平,用以驅動LED、控制蜂鳴器、模擬通信協議輸出時序等

輸入模式下可讀取端口的高低電平或電壓,用于讀取按鍵輸入、外接模塊電平信號輸入、ADC電壓采集、模擬通信協議接收數據等


GPIO的基本結構

左邊的是APB2外設總線;在stm32中所有的GPIO都是掛載在APB2外設總線上的,其中GPIO外設的名稱都是按照GPIOA、GPIOB等等這樣來命名的

每個GPIO外設,總共有16個引腳,編號是從0到15,GPIO的第0號引腳,我們一般把它稱為PA0,接著第一號就是PA1..PA15以此來命名;

STM32是32位單片機,所以STM32內部的寄存器都是32位的,但這個端口只有16位,所以這個寄存器只有低16位對應的有端口,高16位是沒有用的

在每個GPIO模塊內,組要包含了寄存器和驅動器,寄存器就是一段特殊的存儲器,內核可以通過APB2總線對寄存器進行讀寫,這樣就可以完成輸出電平和讀取電平的功能了,寄存器的每一位對應一個引腳,其中,輸出寄存器寫1,對應的引腳就會輸出高電平,寫0就會輸出低電平,輸入寄存器讀取為1,就證明對應的端口目前是高電平,讀取為0,就是低電平;

驅動器是用來增加信號的驅動能力,寄存器只負責存儲數據


?GPIO位結構(每一位的具體電路結構)

如下圖為,stm32參考手冊中的GPIO位結構的電路圖。

?左邊三個就是寄存器,中間部分是驅動器,右邊是某一個IO口的引腳,如下三個紅圈里的內容

?整體結構可以分為兩個部分,上面是輸入部分,下面是輸出部分。

?


輸入

首先是這個IO引腳,這里接了兩個保護二極管,這個是對輸入電壓進行限幅的

上面二極管接VDD,3.3V,下面二極管接VSS,0V;

  • 如果輸入電壓比3.3v還要高,那上方這個二極管就會導通,輸入電壓產生的電流就會直接流入VDD而不會流入內部電路,這樣就可以避免過高的電壓對內部電路產生傷害,
  • 輸入電壓比0v還要低,這個電壓是相對與VSS的電壓,所以是可以有負電壓的,那這時下方這個二極管就會導通,電流會從VSS直接流出來,電流會從VSS直接流出去,而不會從內部電路汲取電流,也是可以保護內部電路的
  • 輸入電壓在0-3.3v之間,那兩個保護二極管均不會導通,這時二極管對電路沒有影響,這就是保護二極管的用途


上拉和下拉電阻

上拉和下拉的作用是為了給輸入提供一個默認的輸入電平,因為對應一個數字的端口,輸入不是高電平就是低電平;如果輸入引腳哈都不接,這時輸入就會處于一個浮空狀態,引腳的輸入電平極易受外界干擾而改變;為了避免引腳懸空導致的輸入數據不穩定

上拉電阻至VDD,下拉電阻至VSS,這個開關是可以通過程序進行配置的。

上面導通、下面斷開,就是上拉輸入模式;上面斷開、下面導通,就是下拉輸入模式;上面斷開、下面斷開,就是浮空輸入模式。

如果接入上拉電阻,當引腳懸空時,還有上拉電阻來保證引腳的高電平,所以上拉輸入是默認為高電平的輸入模式,下拉也是同理。

上拉電阻和下拉電阻的阻值都是比較大的,是一種弱上拉和弱下拉 ,目的是盡量不影響正常的輸入操作。


斯密特觸發器

是對輸入電壓進行整形,輸入電壓大于某一閾值,輸出就會瞬間升為高電平,如果輸入電壓小于某一閾值,輸出就會瞬間降為低電平。

?

有效的避免因信號波動造成的輸出抖動現象。?

?

面還有兩路線路,是連接到片上外設的一些端口;其中一個是模擬輸入,這個可以連接到ADC上,因為ADC需要接受模擬量,所以這根線是接到施密特觸發器前面的,另一個是復用功能輸入,這個是連接到其他需要讀取端口的外設上的(比如,串口的輸入引腳等),這根線接受的是數字量,所以在施密特觸發器后面


輸出?

輸出部分由輸出數據寄存器或片上外設控制,兩種控制方式通過這個數據選擇器接到輸出控制部分;如果選擇通過輸出數據寄存器進行控制,就是普通的IO口輸出,寫這個輸出數據寄存器的某一位就可以操作對應的某個端口了。左邊還有個叫做位設置/清除寄存器,這個可以用來單獨操作輸出寄存器的某一位,而不影響其它位

數據選擇器

輸出控制之后就接到了兩個MOS管,上面是P-MOS,下面是N-MOS,這個MOS管就是一種電子開關,我們的信號來來控制開關的導通和關閉

在推挽輸出模式下,P-MOS和N-MOS均有效,這種模式下,高低電平均有較強的驅動能,所以推挽輸出模式也可以叫強推輸出模式,在推挽輸出模式下,stm32對IO口具有絕對的控制權,高低電平都由stm32說的算

數據寄存器為1時。上管導通,下管斷開,輸出直接接到VDD,就是輸出高電平

?數據寄存器為0時。上管斷開,下管導通,輸出直接接到VSS,就是輸出低電平。

在開漏輸出模式下,這個P-MOS是無效的,只有N-MOS在工作

數據寄存器為1時。下管斷開,這時輸出相當于斷開,也就是高阻模式

?

?數據寄存器為0時。下管導通,輸出直接接到VSS,也就是輸出低電平

關閉狀態輸出方式

這個是當引腳配置為輸入模式的時候,這兩個MOS管都無效,也就是輸出關閉,端口的電平由外部信號來控制。


GPIO模式

?


浮空輸入、上拉輸入、下拉輸入

這三個模式的電路結構基本是一樣的,區別就是上拉電阻和下拉電阻的連接,它們都屬于數字的輸入口,特征就是,都可以讀取端口的高低電平;當使用浮空輸入時,端口一定要接上一個連續的驅動源,不能出現懸空狀態。

在輸入模式下,輸出驅動器是斷開的,端口只能輸入而不能輸出;上面這兩個電阻可以選擇位上拉工作、下拉工作或者都不工作,對應的就是上拉輸入、下拉輸入和浮空輸入,然后輸入通過施密特觸發器進行波形整形后,連接到輸入數據寄存器,另外這個輸入保護這里寫的是VDD或VDD_FT(這就是3.3v端口和容忍5v端口(它的上面保護二極管要做一下處理,要不然直接接VDD3.3v的話,外部再接入5v電壓就會導致上邊二極管開啟,并且產生比較大的電流,這個是不太妥當的)的區別)


模擬輸入

這個模擬輸入,可以說是ADC模數轉換器的專屬配置了,模擬輸入的結構如下。

這里輸出是斷開的,輸入的施密特觸發器也是關閉的無效狀態,所以整個GPIO大部分都是無效的,只有下圖的紅色線有效,也就是從引腳直接接入片上外設,也就是ADC。


?開漏輸出和推挽輸出

這兩個電路結構也基本一樣,數字輸出,可以用于輸出高低電平,區別就是開漏輸出的高電平呈現的是高阻態,沒有驅動能力,而推挽輸出的高低電平都是具有驅動能力的

輸出是由輸出數據寄存器控制的,這個P-MOS無效就是開漏輸出,如果P-MOS和N-MOS都有效,就是推挽輸出;另外,在輸出模式下,輸入模式也是有效的


復用開漏輸出和復用推挽輸出?

這兩模式和普通的開漏輸出和推挽輸出差不多,只不過是復用的輸出,引腳電平是由片上外設控制的,模式結構如下:

通用的輸出是沒有連接的,引腳的控制權轉移到了片上外設,由片上外設控制,在輸入部分,片上外設也可以讀取引腳的電平,同時普通的輸入也是有效的,順便接收一下電平信號。


LED和蜂鳴器介紹

?LED:發光二極管,正向通電點亮,反向通電不亮

有源蜂鳴器:內部自帶振蕩源,將正負極接上直流電壓即可持續發聲,頻率固定

無源蜂鳴器:內部不帶振蕩源,需要控制器提供振蕩脈沖才可發聲,調整提供振蕩脈沖的頻率,可發出不同頻率的聲音

左邊是正級,右邊是負極

長腳為正極,短腳為負極

有源蜂鳴器內部電路,這里用了一個三極管開關進行驅動,我們將VCC和GND分別接上正負極的供電,然后中間引腳2接低電平,蜂鳴器就會響,接高電平,蜂鳴器就關閉


LED和蜂鳴器的硬件電路

LED

限流電阻一般都是要接的,一方面它可以防止LED因為電流過大而燒毀,另一方面它可以調整LED的亮度,如果你覺得LED太亮可以適當的增大限流電阻的阻值。

高電平驅動的電路。LED負極接到GND,正極通過一個限流電阻接到PA0上,這時就是高電平點亮,低電平熄滅。

低電平驅動的電路,LED正極接3.3v,負極通過一個限流電阻接到PA0上,當PA0輸出低電平時,LED兩端就會產生電壓差,就會形成正向導通的電流,這樣LED就會點亮了;當PA0輸出高電平時,因為LED兩端都是3.3v的電壓,不會形成電流,所以高電平LED就會熄滅。

?


蜂鳴器

這里使用了三極管開關的驅動方案,三極管開關是最簡單的驅動電路了,對于功率稍微大一點的 ,直接用IO口驅動會導致STM32負擔過重,這時可以用一個三極管驅動電路來完成驅動任務

需要注意,PNP的三極管最好接在上邊,NPN的三極管最好接到下邊,這是因為三極管的通斷是需要在發射極和基極產生一定的開啟電壓的,如果將負載接在發射極這邊,可能會導致三極管不能開啟。

下圖為PNP三極管的驅動電路,三極管的左邊是基極,帶箭頭的是發射極,剩下的是集電極。左邊的基極給低電平,三極管就會導通,再通過3.3V和GND就可以給 蜂鳴器提供驅動電流了。基極給高電平,三極管截止,蜂鳴器沒有電流。

?下圖為NPN三極管的驅動電路,同樣,左邊是基極,帶箭頭的是發射極,剩下的是集電極;它的驅動邏輯和上面的是相反的,基極給高電平導通,低電平斷開。

?


希望對你有幫助

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11211.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11211.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11211.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

簡述線程同步和線程通信及如何實現線程間的同步

一、線程同步和線程通信是多線程編程中的兩個重要概念。 線程同步: 線程同步是指當有一個線程在對內存進行操作時(如讀取、寫入等),其他線程都不可以對該內存地址進行操作,直到該線程完成操作,其他線程才…

FFmpeg開發筆記(二十七)APP無法訪問ZLMediaKit的HLS直播地址

上一篇文章介紹了如何通過ZLMediaKit實現視頻推拉流,并使用VLC播放器驗證視頻直播地址。即使不用VLC播放器,直接在Qt工程的C代碼中調用FFmpeg的API,也能訪問ZLMediaKit的直播地址,并正常渲染視頻畫面。關于如何在Qt工程中引入FFmp…

【資源分享】完勝谷歌翻譯的Deepl翻譯

::: block-1 “時問桫欏”是一個致力于為本科生到研究生教育階段提供幫助的不太正式的公眾號。我們旨在在大家感到困惑、痛苦或面臨困難時伸出援手。通過總結廣大研究生的經驗,幫助大家盡早適應研究生生活,盡快了解科研的本質。祝一切順利!—…

【數據結構與算法】力扣 111. 二叉樹的最小深度

題目描述 給定一個二叉樹,找出其最小深度。 最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。 說明: 葉子節點是指沒有子節點的節點。 示例 1: 輸入: root [3,9,20,null,null,15,7] 輸出: 2示例 2&#…

長事務的理解和預防

我們常常聽說數據庫發生了“長事務”而導致很嚴重的后果。那么何為長事務?長事務是如何產生的?長事務對數據庫有什么影響?如何防止長事務的產生?以下對這幾方面進行闡述和說明,以加深對SinoDB長事務的理解。 1&#x…

Python-VBA函數之旅-super函數

目錄 一、super函數的常見應用場景 二、super函數使用注意事項 三、如何用好super函數? 1、super函數: 1-1、Python: 1-2、VBA: 2、推薦閱讀: 個人主頁: https://myelsa1024.blog.csdn.net/ 一、su…

AI代理和AgentOps生態系統的剖析

1、AI代理的構成:AI代理能夠根據用戶的一般性指令自行做出決策和采取行動。 主要包含四個部分: (1)大模型(LLM) (2)工具:如網絡搜索、代碼執行等 (3&#x…

探索未來:IT行業的革新脈動與明日圖景

你眼中的IT行業現狀與未來趨勢 隨著技術的不斷進步,IT行業已成為推動全球經濟和社會發展的關鍵力量。從云計算、大數據、人工智能到物聯網、5G通信和區塊鏈,這些技術正在重塑我們的生活和工作方式。你眼中IT行業的現狀及未來發展趨勢是怎么樣的&#xf…

開散列哈希桶

通過上面這幅圖,讀者應該能較為直觀地理解何為開散列,以及閉散列與開散列的區別在哪里 —— 數據的存儲形式不同,至于其他的,如確定每個元素的哈希地址等一概相同。 與閉散列相比,開散列能夠更好地處理發生沖突的元素 …

Taro + React + Tailwind 開發微信小程序問題匯總(持續更新中...)

搞小程序也有兩周了,踩了很多坑,有些問題很難搜索到,在這里記錄一下問題和自己的解決方案,希望能幫助到需要的小伙伴~ 1. 真機調試報錯:Error: module ‘babel/runtime/helpers/Arrayincludes.js’ is not …

Transformers 加速的一些常用技巧

Transformers 是一個強大的架構,但模型因其采用的自注意力機制,雖然能夠有效地處理序列數據并捕獲長距離依賴關系,但同時也容易導致在訓練過程中出現OOM(Out of Memory,內存不足)或者達到GPU的運行時限制。…

AI大模型探索之路-訓練篇22: ChatGLM3微調實戰-從原理到應用的LoRA技術全解

系列篇章💥 AI大模型探索之路-訓練篇1:大語言模型微調基礎認知 AI大模型探索之路-訓練篇2:大語言模型預訓練基礎認知 AI大模型探索之路-訓練篇3:大語言模型全景解讀 AI大模型探索之路-訓練篇4:大語言模型訓練數據集概…

MPLAB X IDE編譯attiny1616工程報錯卻無報錯信息

MPLAB X IDE(XC-8編譯器)編譯報錯,無具體錯誤內容,僅顯示需要xc-8 pro的警告。 內存占用率顯示為81%,未超標。 原因:軟件使用了microchip的bootloader功能。應用程序起始地址(也是bootloader結束地址)設置錯…

社交巨頭:探索Facebook的震撼力量

Facebook作為社交媒體領域的巨頭,不僅在數字化社會中占據著重要地位,更是影響了人們的生活、工作和社交方式。本文將深入探索Facebook的震撼力量,從多個角度解讀其在當今社會中的重要性和影響。 1. 全球用戶覆蓋的壯觀規模 Facebook作為全球…

軟件定義汽車七大典型應用場景

隨著軟件定義汽車典型應用場景的落地,用戶將明顯體驗到汽車從交通工具向智能移動終端的轉變。幾十年前主要用高性能的底盤操穩與動力系統定義一臺好車,幾年前主要用智能化系統與智能交互滿足終端用戶的用車體驗,未來將調度全車傳感器與數據驅…

c 數組遍歷

#include <stdio.h> #include <stdlib.h> int main() { printf(“指針數組練習&#xff01;&#xff01;&#xff01;\n”); /* 數組名就是數組的首地址 數組存在一段連續的內存空間中 */ double score[] {60, 70, 80, 90, 100}; double *ptr_score; i…

docker安裝時報錯:Error: Nothing to do

安裝docker時報以下錯誤 解決方法&#xff1a; 1.下載關于docker的相關依賴環境 yum -y install yum-utils device-mapper-persistent-data lvm22.設置下載Docker的鏡像源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3…

FMEA存在的五個主要不足及改進措施——FMEA軟件

免費試用FMEA軟件-免費版-SunFMEA 在制造業和產品設計領域&#xff0c;失效模式與影響分析&#xff08;Failure Modes and Effects Analysis&#xff0c;簡稱FMEA&#xff09;被廣泛運用&#xff0c;用于預防潛在的設計或制造缺陷。然而&#xff0c;盡管FMEA在風險管理方面發揮…

開發者集結號:大灣區 Open Source Day 邀您共探技術前沿

開源技術正以其開放、協作的特性&#xff0c;引領著軟件開發的新潮流&#xff0c;是推動社會進步的重要力量。作為開發者&#xff0c;您是否渴望深入了解開源項目的前沿動態&#xff1f;由ALC深圳與2024中國互聯網發展創新與投資大賽聯合舉辦、FISCO金鏈盟深度參與的大灣區 Ope…