99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

GPIO的定義和GPIO不同模式間的區(qū)別與實(shí)現(xiàn)方式

電子工程師 ? 來源:嵌入式悅翔園 ? 作者:嵌入式悅翔園 ? 2022-08-08 10:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、前言

GPIO全稱General Purpose Input Output 即通用輸入/輸出,其實(shí)GPIO的本質(zhì)就是芯片的一個引腳,通常在ARM中所有的I/O都是通用的。不過由于每個開發(fā)板上都會設(shè)計不同的外圍電路,這就造成GPIO的功能可能有所不同,大部分GPIO都是有復(fù)用功能的,比如有些GPIO可能是串口的TXRX,也可能是I2CSCLSDA線。

所以我們不僅要知道GPIO能夠輸出高低電平,還要理解為什么有些GPIO可以復(fù)用某些功能,而其他的不可以。

二、GPIO內(nèi)部結(jié)構(gòu)

d086b12a-16c2-11ed-ba43-dac502259ad0.png

我們在使用GPIO的時候可能不會去想為什么我們通過寫代碼或者操作寄存器就可以控制一個引腳的高低電平。

今天就讓我們一起來看看為什么我們通過操作寄存器(其實(shí)寫代碼的過程就是在操作寄存器)就能控制引腳輸入或者輸出。

我們想要想控制一個GPIO口的需要操作7個寄存器,分別是CRL,CRH,IDR,ODR,BRR,BSRR,LCKR 我們對GPIO的操作本質(zhì)上就是在對這些寄存器進(jìn)行讀寫操作,以下是這些寄存器的名稱:

GPIOx_CRL(x=A..E)端口配置低寄存器32位寄存器
GPIOx_CRH(x=A..E)端口配置高寄存器32位寄存器
GPIOx_IDR(x=A..E)端口輸入數(shù)據(jù)寄存器32位寄存器但僅用低16位
GPIOx_ODR(x=A..E)端口輸出數(shù)據(jù)寄存器32位寄存器但僅用低16位
GPIOx_BRR(x=A..E)端口位清除寄存器16位寄存器
GPIOx_BSRR(x=A..E)端口位設(shè)置/清除寄存器16位寄存器
GPIOx_LCKR(x=A..E)端口配置鎖定寄存器32位寄存器

我們首先分析上面的結(jié)構(gòu)電路:

1、保護(hù)二極管 保護(hù)二極管從它的名字就不難想到他是用來對系統(tǒng)進(jìn)行保護(hù)的,通過兩個二極管的導(dǎo)通可以防止引腳外部輸入電壓過低或過高。當(dāng)電壓過高時,上方的保護(hù)二極管導(dǎo)通。當(dāng)電壓過低時,下方的二極管導(dǎo)通,防止不正常電壓導(dǎo)入到芯片內(nèi)部造成芯片燒毀。

2、P·MOS管和N·MOS管: GPIO經(jīng)過兩個二極管的保護(hù)后向上流入輸入模式,向下流入輸出模式,而輸出模式的控制是由一個由P·MOS管和N·MOS管組成的單元電路,該電路主要是控制輸出的模式,由該結(jié)構(gòu)狗策劃給你的單元電路具有推挽輸出開漏輸出兩種模式。

當(dāng)系統(tǒng)配置為推挽輸出模式時:

  • 若向該結(jié)構(gòu)中輸入高電平,經(jīng)過反向后,上方的P-MOS導(dǎo)通,下方的N-MOS關(guān)閉,對外輸出高電平;

  • 若向該結(jié)構(gòu)中輸入低電平時,經(jīng)過反向后,下方的N-MOS管導(dǎo)通,上方的P-MOS關(guān)閉,對外輸出低電平。

  • 當(dāng)引腳高低電平切換時,兩個MOS管輪流導(dǎo)通,P管負(fù)責(zé)灌電流,N管負(fù)責(zé)拉電流,使其負(fù)載能力和開關(guān)速度都比普通的方式有很大的提高。**推挽輸出的低電平為0V,高電平為3.3V**。

當(dāng)系統(tǒng)配置為開漏輸出模式時:

  • 上方的P-MOS管完全不工作;

  • 如果我們控制輸出為0,低電平,則P-MOS管關(guān)閉,N-MOS管導(dǎo)通,使輸出接地;

  • 若控制輸出為1(它無法直接輸出高電平)時,則P-MOS管和N-MOS管都關(guān)閉,所以開漏輸出模式下引腳既不輸出高電平,也不輸出低電平,為高阻態(tài)

推挽輸出模式一般應(yīng)用在輸出電平為0和3.3V而且需要高速切換開關(guān)狀態(tài)的場合。開漏輸出模式一般應(yīng)用在I2C、SMBUS通信等需要 線與功能的總線電路中

單片機(jī)中除了必須用開漏模式的場合,一般習(xí)慣使用推挽輸出模式

3、輸出數(shù)據(jù)寄存器:前面我們知道雙了MOS管結(jié)構(gòu)電路的輸入信號,是由GPIO輸出數(shù)據(jù)寄存器GPIOx_ODR提供的,因此我們可以通過修改輸出數(shù)據(jù)寄存器的值,就可以修改GPIO引腳的輸出電平。而置位/復(fù)位寄存器GPIOx_BSRR可以通過修改輸出數(shù)據(jù)寄存器的值,從而影響電路的輸出。

4、復(fù)用功能輸出:復(fù)用功能輸出中的復(fù)用是指STM32的其他片上外設(shè)對GPIO引腳進(jìn)行控制,此時GPIO引腳用作該外設(shè)功能的一部分,算是第二用途。從其他外設(shè)引出來的復(fù)用功能輸出信號與GPIO本身的數(shù)據(jù)寄存器都連接到雙MOS管結(jié)構(gòu)的輸入中。

三、輸入輸出模式

GPIO共有8中輸入輸出模式,分別是:上拉輸入、下拉輸入、浮空輸入、模擬輸入、開漏輸出、推挽輸出、開漏復(fù)用輸出、推挽復(fù)用輸出 ,下面我們詳細(xì)介紹以下上面的八種輸入輸出模式。

  • 上拉輸入: GPIO_Mode_IPU
  • 下拉輸入: GPIO_Mode_IPD
  • 浮空輸入: GPIO_Mode_IN_FLOATING
  • 模擬輸入: GPIO_Mode_AIN
  • 開漏輸出: GPIO_Mode_Out_OD
  • 推挽輸出: GPIO_Mode_Out_PP
  • 開漏復(fù)用: GPIO_Mode_AF_OD
  • 推完復(fù)用: GPIO_Mode_AF_PP

這里詳細(xì)講一下幾個常用的模式:

3.1 浮空輸入

浮空輸入模式下,I/O端口的電平信號直接進(jìn)入輸入數(shù)據(jù)寄存器。也就是說,I/O的電平狀態(tài)是不確定的,完全由外部輸入決定;如果在該引腳懸空(在無信號輸入)的情況下,讀取該端口的電平是不確定的,通常用于IIC、USART等總線設(shè)備上。

d0b249a2-16c2-11ed-ba43-dac502259ad0.png

3.2 上拉輸入模式

上拉輸入模式下,I/O端口的電平信號直接進(jìn)入輸入數(shù)據(jù)寄存器。但是在I/O端口懸空(在無信號輸入)的情況下,輸入端的電平保持在高電平(并且在I/O端口輸入為低電平的時候,輸入端的電平也是低電平)

d0d96cb2-16c2-11ed-ba43-dac502259ad0.png

3.3 下拉輸入模式

下拉輸入模式下,I/O端口的電平信號直接進(jìn)入輸入數(shù)據(jù)寄存器。但是在I/O端口懸空(在無信號輸入)的情況下,輸入端的電平保持在低電平;并且在I/O端口輸入為高電平的時候,輸入端的電平也是高電平。

d0fd4e52-16c2-11ed-ba43-dac502259ad0.png

3.4 模擬輸入模式

模擬輸入模式下,I/O端口的模擬信號(電壓信號,而非電平信號)直接模擬輸入到片上外設(shè)模塊,比如ADC模塊等。

d122b57a-16c2-11ed-ba43-dac502259ad0.png

3.5 開漏輸出模式

見上面二中的詳細(xì)介紹;

3.6 開漏復(fù)用輸出模式

開漏復(fù)用輸出模式,與開漏輸出模式很是類似。只是輸出的高低電平的來源,不是讓CPU直接寫輸出數(shù)據(jù)寄存器,取而代之利用片上外設(shè)模塊的復(fù)用功能輸出來決定的,一般用于片內(nèi)外設(shè)功能:TX1,MOSI,MISO,SCK,SS

3.7 推挽輸出模式

見上面二中的詳細(xì)介紹;

3.8 推挽復(fù)用輸出模式

推挽復(fù)用輸出模式,與推挽輸出模式很是類似。只是輸出的高低電平的來源,不是讓CPU直接寫輸出數(shù)據(jù)寄存器,而是利用片上外設(shè)模塊的復(fù)用功能輸出來決定的,常見采用推挽輸出模式的一般為片內(nèi)外設(shè)功能IICSCL、SDL。

d146c4ce-16c2-11ed-ba43-dac502259ad0.png

四、開漏輸出和推挽輸出的區(qū)別

開漏輸出和推挽輸出模式的區(qū)別主要是開漏輸出只可以輸出強(qiáng)低電平,高電平得靠外部電阻拉高。輸出端相當(dāng)于三極管的集電極,適合于做電流型的驅(qū)動,其吸收電流的能力相對強(qiáng)(一般20ma以內(nèi));推挽輸出可以輸出強(qiáng)高、低電平,連接數(shù)字器件。

d159db7c-16c2-11ed-ba43-dac502259ad0.png

五、STM32中GPIO的配置

在固件庫開發(fā)中,操作寄存器 CRHCRL 來配置 IO 口的模式和速度是通過 GPIO 初始化函數(shù)完成:

voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);
/*第一個參數(shù)是用來指定 GPIO,取值范圍為 GPIOA~GPIOG。
*第二個參數(shù)為初始化參數(shù)結(jié)構(gòu)體指針,結(jié)構(gòu)體類型為GPIO_InitTypeDef
*/

初始化 GPIO 的常用格式是:

GPIO_InitTypeDefGPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;//LED0--PB.5端口配置

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//速度50MHz

GPIO_Init(GPIOB,GPIO_InitStructure);//根據(jù)設(shè)定參數(shù)配置GPIO

IO 口速度設(shè)置有三個可選值:

typedefenum

{

GPIO_Speed_10MHz,

GPIO_Speed_2MHz,

GPIO_Speed_50MHz

}GPIOSpeed_TypeDef;

模式則有8個可選定義如下:

typedefenum

{GPIO_Mode_AIN=0x0,//模擬輸入

GPIO_Mode_IN_FLOATING=0x04,//浮空輸入

GPIO_Mode_IPD=0x28,//下拉輸入

GPIO_Mode_IPU=0x48,//上拉輸入

GPIO_Mode_Out_OD=0x14,//開漏輸出

GPIO_Mode_Out_PP=0x10,//通用推挽輸出

GPIO_Mode_AF_OD=0x1C,//復(fù)用開漏輸出

GPIO_Mode_AF_PP=0x18//復(fù)用推挽

}GPIOMode_TypeDef;

六、總結(jié)

本文主要介紹了GPIO的定義和GPIO不同模式間的區(qū)別與實(shí)現(xiàn)方式,觀看完本文相信你對于GPIO會有一個更深的理解,我們?nèi)绻亲鲕浖目梢圆挥锰P(guān)注于GPIO是如何實(shí)現(xiàn)的,但是我們需要知道每個模式下GPIO的特點(diǎn)和應(yīng)用場合,只有這樣我們在實(shí)際應(yīng)用中才能更好的配置出最合適的那個。

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 芯片
    +關(guān)注

    關(guān)注

    460

    文章

    52520

    瀏覽量

    441154
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5434

    瀏覽量

    124572
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1280

    瀏覽量

    54125

原文標(biāo)題:關(guān)于GPIO你真的懂了嗎?這篇文章都給你整理好了!

文章出處:【微信號:嵌入式悅翔園,微信公眾號:嵌入式悅翔園】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    迅為RK3568驅(qū)動指南GPIO子系統(tǒng) GPIO操作函數(shù)實(shí)驗

    迅為電子RK3568開發(fā)板驅(qū)動指南GPIO子系統(tǒng) GPIO操作函數(shù)實(shí)驗
    的頭像 發(fā)表于 05-28 15:24 ?420次閱讀
    迅為RK3568驅(qū)動指南<b class='flag-5'>GPIO</b>子系統(tǒng) <b class='flag-5'>GPIO</b>操作函數(shù)實(shí)驗

    基于小凌派RK2206開發(fā)板:OpenHarmony如何使用IoT接口控制GPIO中斷

    1、實(shí)驗簡介本實(shí)驗將演示如何在小凌派-RK2206開發(fā)板上使用IOT庫的GPIO中斷模式,進(jìn)行GPIO編程開發(fā)。例程將創(chuàng)建一個任務(wù),通過配置GPIO引腳為中斷
    的頭像 發(fā)表于 04-21 10:39 ?447次閱讀
    基于小凌派RK2206開發(fā)板:OpenHarmony如何使用IoT接口控制<b class='flag-5'>GPIO</b>中斷

    為什么GPIO配置總是出問題?

    在STM32開發(fā)中,GPIO(通用輸入輸出)配置看似簡單,但在實(shí)際開發(fā)中,很多人常常會遇到這些困惑:明明按照教程配置了GPIO,為什么LED燈就是不亮?為什么有時候按鍵無法響應(yīng),或者響應(yīng)很慢
    的頭像 發(fā)表于 04-07 11:59 ?691次閱讀
    為什么<b class='flag-5'>GPIO</b>配置總是出問題?

    GPIO使用教程 GPIO接口應(yīng)用

    交互,實(shí)現(xiàn)外部設(shè)備的控制和數(shù)據(jù)傳輸。 一、GPIO的基本概念 GPIO的全稱是General-Purpose Input/Output,即通用輸入/輸出。它是一種在電子設(shè)備中常見的接口,允許控制和讀取
    的頭像 發(fā)表于 01-31 10:10 ?3381次閱讀

    GPIO模塊與其他外設(shè)的連接方法

    在嵌入式系統(tǒng)設(shè)計中,GPIO模塊是實(shí)現(xiàn)設(shè)備與外部世界交互的關(guān)鍵接口。它們提供了一種靈活的方式來控制和監(jiān)測外部設(shè)備。 GPIO模塊的基本概念 GPIO
    的頭像 發(fā)表于 01-09 09:48 ?981次閱讀

    GPIO錯誤排查與解決

    。輸入模式下,GPIO可以讀取外部信號;輸出模式下,GPIO可以控制外部設(shè)備。正確配置GPIO對于系統(tǒng)的正常運(yùn)行至關(guān)重要。 2. 常見的
    的頭像 發(fā)表于 01-09 09:46 ?2337次閱讀

    GPIO在嵌入式系統(tǒng)中的作用

    的基本橋梁。 1. GPIO定義 GPIO是微控制器上的一組引腳,可以被配置為輸入或輸出模式。在輸入模式下,
    的頭像 發(fā)表于 01-09 09:45 ?939次閱讀

    GPIO在樹莓派中的應(yīng)用

    直接控制和讀取外部硬件設(shè)備的狀態(tài)。 1. GPIO簡介 GPIO是樹莓派上用于與外部世界交互的一組引腳。這些引腳可以被配置為輸入或輸出模式,從而實(shí)現(xiàn)對外部設(shè)備的控制和數(shù)據(jù)讀取。樹莓派的
    的頭像 發(fā)表于 01-09 09:41 ?854次閱讀

    如何配置GPIO引腳

    在嵌入式系統(tǒng)設(shè)計中,GPIO(通用輸入/輸出)引腳是連接微控制器與外部世界的重要橋梁。它們可以被配置為輸入或輸出模式,用于讀取傳感器數(shù)據(jù)、控制LED燈、驅(qū)動電機(jī)等。 GPIO引腳的基本概念 G
    的頭像 發(fā)表于 01-09 09:39 ?1262次閱讀

    STM32 GPIO的八種工作模式

    GPIO (general purpose input output)是通用輸入輸出端口的簡稱,簡單來說就是軟件可控制的引腳,STM32芯片的GPIO引腳與外部設(shè)備連接起來,從而實(shí)現(xiàn)與外部通訊、控制以及數(shù)據(jù)采集的功能。
    的頭像 發(fā)表于 11-06 09:40 ?2010次閱讀
    STM32 <b class='flag-5'>GPIO</b>的八種工作<b class='flag-5'>模式</b>

    SOC GPIO操作

    sapphire Soc提供了兩個GPIO組每組有4個GPIO定義GPIO[3:0],其中只有GPIO[1:0]可以支持中斷。中斷在程序
    的頭像 發(fā)表于 11-01 11:06 ?489次閱讀

    gpio接口是干什么的 gpio四種輸入輸出模式怎么選擇

    GPIO接口的作用 GPIO(General Purpose Input/Output)接口,即通用輸入輸出接口,是一種用于連接和控制各種外部設(shè)備的數(shù)字接口。它由一組引腳組成,可以通過編程的方式控制
    的頭像 發(fā)表于 10-06 16:07 ?7724次閱讀

    GPIO各種配置模式

    不會處于不確定狀態(tài),提高信號的抗干擾能力。 (P:相比較浮空模式,當(dāng)外接電阻過大時,可能存在弱上拉,輸出高電平能力不夠。) 3. 輸入下拉 定義:輸入下拉是指GPIO引腳內(nèi)部連接了一個下拉電阻到
    發(fā)表于 07-24 07:29

    STM32 GPIO八種模式及工作原理詳解

    一. 前言 ??GPIO全稱General Purpose Input Output,是微控制數(shù)字輸入/輸出的基本模塊,可以實(shí)現(xiàn)微控制器與外部環(huán)境的數(shù)字進(jìn)行交換。借助GPIO微控制器可以實(shí)現(xiàn)
    的頭像 發(fā)表于 07-22 09:32 ?8956次閱讀
    STM32 <b class='flag-5'>GPIO</b>八種<b class='flag-5'>模式</b>及工作原理詳解

    CKS32F107xx系列MCU的GPIO內(nèi)部硬件結(jié)構(gòu)和工作模式

    GPIO是通用輸入輸出端口的簡稱,也是CKS32可控制的引腳,CKS32芯片的GPIO引腳與外部設(shè)備連接起來,從而實(shí)現(xiàn)與外部通訊、控制以及數(shù)據(jù)采集的功能。CKS32芯片的GPIO被分成
    的頭像 發(fā)表于 07-22 09:23 ?1276次閱讀
    CKS32F107xx系列MCU的<b class='flag-5'>GPIO</b>內(nèi)部硬件結(jié)構(gòu)和工作<b class='flag-5'>模式</b>