詳細了解STM32----GPIO

提示:永遠支持免費開源知識文檔,喜歡的點個關注吧!謝謝!

文章目錄

  • 一、什么是GPIO?
  • 二、GPIO基本結構
  • 三、GPIO的輸入輸出模式
    • 1、推挽輸出
    • 2、開漏輸出
    • 3、復用推挽
    • 4、復用開漏
    • 1、浮空輸入
    • 2、上拉輸入
    • 3、下拉輸入
    • 3、模擬輸入
  • 總結


一、什么是GPIO?

GPIO是單片機上的通用輸入輸出端口的簡稱,可以通過軟件來控制其輸入輸出。STM32芯片的GPIO引腳與外部設備連接起來,從而實現與外部通訊、控制以及數據采集的功能。

關于芯片引腳的分類:電源管腳、晶振管腳、復位管腳、下載管腳、BOOT管腳、GPIO管腳。

如下圖(STM32系統板原理圖)中的帶P什么的都是STM32的引腳,其中大部分引腳都是用作GPIO,不過也可以用作其它作用,比如說PA9既可以用作GPIO,也可以用作USART1_TX引腳,具體用作什么需要我們后期自己去配置。
在這里插入圖片描述

二、GPIO基本結構

如下圖是GPIO的內部電路構成:
在這里插入圖片描述
沒有學過硬件的同學看到這張圖也不用擔心,王老師帶你們看,首先我們從右向左看,最右邊是不是有兩個二極管,這個是保護二極管,二極管的作用是不是單向導通,那它是怎么起保護作用的呢?我們先來看上面的二極管。

在這里插入圖片描述

眾所周知,STM32的運行電壓一般是3.3V,有些引腳也能接受5V的電壓,當然,除了某些AD引腳之外,AD是什么?AD就是我們單片機中的一個模數轉換器。現在假設我們輸入一個Vc電壓,Vc是大于STM32的可接受的電壓范圍,此時,我們可以發現上面的那個二極管是接了一個VDD的,VDD是什么?VDD是一般外接了一個3.3V的電壓,好,看到這里我們怎么去看了呢?別著急,我們可以用整體法,如下圖:
在這里插入圖片描述
我們可以把這個分為兩個部分,第一個是內部的電路,第二個是那個保護二極管,我們可以發現,這兩個部分是不是構成了一個并聯電路呀?并聯電路的特點是什么?電壓相等吧,還有分流,此時,當我們輸入一個VDD時,1部分的電壓就會被2部分的電壓拉低,從而起到了一個保護作用。下面的二極管亦是如此。

三、GPIO的輸入輸出模式

GPIO一共有八種輸入輸出模式,其中有四種輸出模式:推挽輸出、開漏輸出、復用推挽以及復用開漏,四種輸入模式:浮空輸入上拉輸入、下拉輸入以及模擬輸入。下面我們來一一介紹一下GPIO的各種模式。

1、推挽輸出

在這里插入圖片描述
如圖黃色部分是推挽輸出的電路,我們從左往右看。輸出嘛,肯定能輸出一個高低電平,但這個是如何在我們寫1的時候輸出高電平,寫0的時候輸出一個低電平的呢?
假設我們現在寫了一個1,1被輸入到輸出數據寄存器,然后被輸入到了輸出控制電路,重點來了,輸出控制電路中有一個反相器,什么是反相器?反相器就是當我們寫1的時候經過反相器輸出的是一個0,當我們寫0的時候經過反相器輸出的是一個1,好,知道這一點之后我們回到剛剛我們寫1。此時經過反相器,兩條支路都輸出了一個0,好,此時我們又要了解P·MOS管和N·MOS管,其中P·MOS管是低電平導通,N·MOS管是高電平導通,P·MOS管接了一個VDD,上面我們說過,VDD是外接了一個3.3V的電壓,此時IO端口連接到P·MOS管,而P·MOS管又連了一個VDD,故此時IO端口就會輸出一個高電平,同理我們寫0的時候N·MOS管導通,而N·MOS管連接了VSS,而VSS是接地的,所以此時我們IO端口輸出一個低電平。

2、開漏輸出

在這里插入圖片描述
通過上圖我們可以發現,開漏輸出和推挽輸出的電路有所區別,區別就是在開漏輸出中,我們的P·MOS管是沒有參與開漏輸出這整個過程的。所以開漏輸出有一個特點,就是不能輸出一個高電平,當我們寫1的時候開漏輸出是沒有任何輸出的,此時的IO端口狀態我們稱之為高阻態。

3、復用推挽

在這里插入圖片描述
從上圖我們可以發現,推挽和復用推挽的區別就在于復用推挽沒有經過輸出數據寄存器,而是來自片上外設模塊,什么是片上外設呢?就是GPIO啊,ADC啊,IIC等等一些ST公司拿到ARM公司給的內核之后往上面添加的一些外設設備。好,知道這些之后,其它的就跟推挽輸出差不多了,也能輸出一個高低電平。

4、復用開漏

在這里插入圖片描述
復用開漏和復用推挽一樣,都是來自片上外設模塊,而且沒有經過輸出數據寄存器,其它的也和普通開漏輸出模式一樣,這里我們也不詳細介紹了。

介紹完輸出模式之后我們來介紹一下輸入模式。

1、浮空輸入

在這里插入圖片描述
如圖黃色部分就是浮空輸入的電路了,我們可以從右往左看,輸入嘛,也就是外接了一個什么設備,然后IO端口讀取這個外設輸入進來的高低電平,我們看浮空輸入,顧名思義,當我們既沒有輸入高電平也沒有輸入低電平的時候,此時IO端口的狀態是浮空的,在空閑狀態IO端口的電平既不是高電平也不是低電平。
然后這個還經過了一個TTL施密特觸發器,眾所周知,STM32板子是識別TTL信號的,什么是TTL信號呢?就像是0101這種高低電平的信號,如下圖
在這里插入圖片描述
我們輸入到IO端口的一般是模擬信號,而單片機只識別TTL信號,故我們需要經過一個TTL施密特觸發器來將模擬信號轉化為TTL信號,然后再輸入到輸入數據寄存器中

2、上拉輸入

在這里插入圖片描述
上拉輸入和浮空輸入的區別就是有一個接了VDD開關的上拉電阻,當我們IO端口沒有輸入任何高低電平的時候IO端口的默認狀態是高電平。

3、下拉輸入

在這里插入圖片描述
我們可以看到,下拉輸入有一個接了VSS開關的下拉電阻,當我們IO端口沒有輸入任何高低電平的時候IO端口的默認狀態就是低電平。

3、模擬輸入

在這里插入圖片描述
如圖,模擬輸入和以上三種輸入的最大區別就是沒有經過TTL施密特觸發器,然后直接輸入到片上外設模塊,這個模式我們一般在用到ADC數據采集的時候會把引腳配置成模擬輸入。

總結

GPIO端口一共有八種輸入輸出模式:
其中輸出模式有:
推挽輸出,開漏輸出,復用推挽,復用開漏
輸入模式有:
浮空輸入,上拉輸入,下拉輸入,模擬輸入

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

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

相關文章

FastAPI之嵌套模型

請求體 - 嵌套模型 使用 FastAPI,你可以很隨意的實現模型的嵌套、定義、校驗、記錄文檔,并使用任意深度嵌套的模型,這其實都是FastAPI的核心模塊P一單提成進行做的。。 List 字段 from fastapi import FastAPI from pydantic import BaseM…

基于JavaWeb+SSM+Vue童裝商城小程序系統的設計和實現

基于JavaWebSSMVue童裝商城小程序系統的設計和實現 源碼獲取入口Lun文目錄前言主要技術系統設計功能截圖訂閱經典源碼專欄Java項目精品實戰案例《500套》 源碼獲取 源碼獲取入口 Lun文目錄 目 錄 摘 要 III Abstract 1 1 系統概述 2 1.1 概述 3 1.2課題意義 4 1.3 主要內容 5…

BearPi Std 板從入門到放棄 - 先天篇(1)(階段 : 智慧城市 - 智慧路燈)

簡介 對前面幾篇整合, 做個小小匯總試驗, 使用BearPi E53_SC1擴展板主芯片: STM32L431RCT6串口: Usart1擴展板與主板連接: I2C : I2C1 (光照強度傳感器:BH1750)LED: PB9步驟 創建項目 參考 BearPi Std 板從入門到放棄 - 引氣入體篇(1)(由零創…

【測試人生】數據同步和遷移的變更注意事項

數據同步或者遷移操作也算是線上數據變更的一種類型。由于涉及的數據量非常大,一旦發生故障,會直接影響線上業務,并且較難止損。從變更風險管控的角度考慮,數據同步或遷移操作也需要走合理的發布窗口,并且在操作前也需…

淺談Google Play ASO 優化

什么是ASO ASO即APP Store Optimization,是用于提高APP在應用市場排名的工具,其實也就是移動產品的SEO工作。 ASO是為了提高該產品的搜索結果成績,提升APP的下載量,針對Google Play來說,ASO就是優化APP頁面。 為什么…

Linux升級nginx版本

處于漏洞修復目的服務器所用nginx是1.16.0版本掃出來存在安全隱患,需要我們升級到1.17.7以上。 一般nginx默認在 /usr/local/ 目錄,這里我的nginx是自定義的路徑安裝在 /app/weblogic/nginx 。 1.查看生產環境nginx版本 cd /app/weblogic/nginx/sbin/…

Redis基礎入門

第1章:引言 大家好!我是小黑,今天咱們來聊聊Redis。Redis,這個名字你可能在不少地方聽過,尤其是在后端開發領域,它可是個大名鼎鼎的角色。,Redis是一個開源的內存中數據結構存儲系統&#xff0…

放棄原生SQL:Python中更優雅的數據庫操作

概要 在Python中,通過原生SQL語句進行數據庫操作是一種傳統的方式,但現代的Python開發中,使用ORM(Object-Relational Mapping)工具和數據庫連接庫可以更加高效和優雅地進行增刪改查操作。本文將詳細介紹Python中放棄原…

解決IDEA中多個項目不在同一窗口下顯示的問題和添加新的git的URL

以上是添加顯示多個項目 以下是給新添加的項目添加git

LeetCode算法題解(單調棧)|LeetCode84. 柱狀圖中最大的矩形

一、LeetCode84. 柱狀圖中最大的矩形 題目鏈接:84. 柱狀圖中最大的矩形 題目描述: 給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。 求在該柱狀圖中,能夠勾勒出來的矩形的最大…

做外貿很多時候還是要學會隨機應變

馬上又要到年底了,相信已經有一部分小伙伴開啟了催單模式,希望客戶盡量在春節前將訂單落實下來,自然也有很多客戶會在春節前的這一段時間開始陸續拜訪自己觀望了很久的工廠。 其實對于貿易公司來說,對于來看工廠的客戶&#xff0…

ChatGPT,作為一種強大的自然語言處理模型,具備顯著優勢,能夠幫助您在各個領域取得突破

2023年隨著OpenAI開發者大會的召開,最重磅更新當屬GPTs,多模態API,未來自定義專屬的GPT。微軟創始人比爾蓋茨稱ChatGPT的出現有著重大歷史意義,不亞于互聯網和個人電腦的問世。360創始人周鴻祎認為未來各行各業如果不能搭上這班車…

Kotlin 作用域函數:理解 apply, let, 和 with

Kotlin提供了幾個作用域函數來優化和簡化代碼的結構。 本文將對比分析 apply, let, 和 with 三個函數。 一、對比分析: apply:在其接收者的上下文中執行代碼塊,并返回接收者對象。let:在其接收者的上下文中執行代碼塊&#xff…

Kotlin:內置函數let、also、with、run、apply

前言 在Kotlin中,有一些用于擴展 & 方便開發者編碼的內置函數,能大大提高開發者的開發效率。今天,我將主要講解的是: let函數also函數with函數run函數apply函數 基礎知識:接口回調中Lambda使用 在Kotlin中可使用…

棧和隊列的互相實現

用隊列實現棧 OJ鏈接 請你僅使用兩個隊列實現一個后入先出(LIFO)的棧,并支持普通棧的全部四種操作(push、top、pop 和 empty)。 實現 MyStack 類: void push(int x) 將元素 x 壓入棧頂。int pop() 移除并返…

Mybatis XML增刪操作(結合上文)

先來"增"操作 在UserInfoXMLMapper.xml里面寫 <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <…

nginx多端口部署

1.配置nginx.conf文件 有幾個端口需要部署就寫幾個server&#xff0c;我這里只部署了兩個端口分別為80和81端口&#xff0c;所以有兩個server文件。80端口項目入口在根目錄的test文件中&#xff0c;81端口項目入口在根目錄的test1文件夾中。 2.準備項目文件html文件 在/test1…

Dockerfile部署Java項目掛載使用外部配置文件

Dockerfile部署Java項目掛載使用外部配置文件 技術博客 http://idea.coderyj.com/ 需求是由于java項目使用的是nacos 而且每次部署nacos服務器ip不一樣導致要重新打包,想引入外部配置文件進行打包 1.需求是由于java項目使用的是nacos 而且每次部署nacos服務器ip不一樣導致要重新…

數據結構和算法專題---5、調度算法與應用

本章我們會對調度算法做個簡單介紹&#xff0c;包括常用的調度算法&#xff08;FCFS、SJF、RR、HPF&#xff09;的概述、實現方式、典型場景做個說明。 什么是調度算法 調度算法常見于操作系統中&#xff0c;因為系統資源有限&#xff0c;當有多個進程&#xff08;或多個進程…

Oracle 怎樣修改DB_NAME

DBNEWID 是一個數據庫實用程序&#xff0c;用于更改 Oracle 數據庫的 DBNAME 和 DBID。可以更改 DBID 或 DBNAME 或兩者。 DBNAME 是在創建數據庫時指定的數據庫名稱&#xff0c;DBID 是創建數據庫時分配給數據庫的唯一編號。 以下步驟演示如何使用 DBNEWID 實用程序更改 Oracl…