国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

GPIO的定義和GPIO不同模式間的區別與實現方式

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

掃碼添加小助手

加入工程師交流群

一、前言

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

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

二、GPIO內部結構

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

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

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

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

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

我們首先分析上面的結構電路:

1、保護二極管 保護二極管從它的名字就不難想到他是用來對系統進行保護的,通過兩個二極管的導通可以防止引腳外部輸入電壓過低或過高。當電壓過高時,上方的保護二極管導通。當電壓過低時,下方的二極管導通,防止不正常電壓導入到芯片內部造成芯片燒毀。

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

當系統配置為推挽輸出模式時:

  • 若向該結構中輸入高電平,經過反向后,上方的P-MOS導通,下方的N-MOS關閉,對外輸出高電平;

  • 若向該結構中輸入低電平時,經過反向后,下方的N-MOS管導通,上方的P-MOS關閉,對外輸出低電平。

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

當系統配置為開漏輸出模式時:

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

  • 如果我們控制輸出為0,低電平,則P-MOS管關閉,N-MOS管導通,使輸出接地;

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

推挽輸出模式一般應用在輸出電平為0和3.3V而且需要高速切換開關狀態的場合開漏輸出模式一般應用在I2C、SMBUS通信等需要 線與功能的總線電路中

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

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

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

三、輸入輸出模式

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

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

這里詳細講一下幾個常用的模式:

3.1 浮空輸入

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

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

3.2 上拉輸入模式

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

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

3.3 下拉輸入模式

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

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

3.4 模擬輸入模式

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

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

3.5 開漏輸出模式

見上面二中的詳細介紹;

3.6 開漏復用輸出模式

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

3.7 推挽輸出模式

見上面二中的詳細介紹;

3.8 推挽復用輸出模式

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

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

四、開漏輸出和推挽輸出的區別

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

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

五、STM32中GPIO的配置

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

voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct)/*第一個參數是用來指定 GPIO,取值范圍為 GPIOA~GPIOG。
*第二個參數為初始化參數結構體指針,結構體類型為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);//根據設定參數配置GPIO

IO 口速度設置有三個可選值:

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,//復用開漏輸出

GPIO_Mode_AF_PP=0x18//復用推挽

}GPIOMode_TypeDef;

六、總結

本文主要介紹了GPIO的定義和GPIO不同模式間的區別與實現方式,觀看完本文相信你對于GPIO會有一個更深的理解,我們如果是做軟件的可以不用太關注于GPIO是如何實現的,但是我們需要知道每個模式下GPIO的特點和應用場合,只有這樣我們在實際應用中才能更好的配置出最合適的那個。

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    463

    文章

    54010

    瀏覽量

    466077
  • 寄存器
    +關注

    關注

    31

    文章

    5608

    瀏覽量

    129994
  • GPIO
    +關注

    關注

    16

    文章

    1328

    瀏覽量

    56230

原文標題:關于GPIO你真的懂了嗎?這篇文章都給你整理好了!

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【MCU學習】GPIO詳解

    本實驗通過一個“小實驗框架 GPIO Mode Lab”,在同一個 GPIO 引腳上依次配置不同模式,并用 ADC 探頭測量電壓、同時讀取數字電平,系統化地觀察。
    的頭像 發表于 01-24 11:45 ?3583次閱讀
    【MCU學習】<b class='flag-5'>GPIO</b>詳解

    掌握 LuatIO:GPIO 復用模式初始化配置全流程解析

    在使用 LuatIO 進行嵌入式應用開發時,合理配置 GPIO 的復用功能是實現外設控制的前提。本文全面解析 GPIO 引腳由普通 IO 轉換為復用功能引腳的初始化流程,包括時鐘使能、模式
    的頭像 發表于 01-23 15:28 ?1145次閱讀
    掌握 LuatIO:<b class='flag-5'>GPIO</b> 復用<b class='flag-5'>模式</b>初始化配置全流程解析

    GPIO、PWM、ADC,到底怎么區分?

    在嵌入式開發中,我們經常聽到GPIO、PWM、ADC這些術語。初學者常常搞不清楚它們的區別和用途:“它們不是都是和電平有關嗎?為什么還要分這么多種?”今天,我們就把這些基礎概念講清楚,讓你在動手開發
    的頭像 發表于 11-14 10:28 ?755次閱讀
    <b class='flag-5'>GPIO</b>、PWM、ADC,到底怎么區分?

    【NCS隨筆】如何進入system_off深度睡眠模式以及配置GPIO中斷喚醒

    【NCS隨筆】如何進入system_off深度睡眠模式以及配置GPIO中斷喚醒 本文章主要是講解NCS下面使用nRF54L15如何進入system_off模式,以及如何配置通過按鍵喚醒 一、如何進
    的頭像 發表于 09-29 00:56 ?756次閱讀
    【NCS隨筆】如何進入system_off深度睡眠<b class='flag-5'>模式</b>以及配置<b class='flag-5'>GPIO</b>中斷喚醒

    RK3568驅動指南|第十二篇 GPIO子系統-第130章 GPIO的調試方法

    RK3568驅動指南|第十二篇 GPIO子系統-第130章 GPIO的調試方法
    的頭像 發表于 06-03 11:32 ?1294次閱讀
    RK3568驅動指南|第十二篇 <b class='flag-5'>GPIO</b>子系統-第130章 <b class='flag-5'>GPIO</b>的調試方法

    Air780EPM應用開發:解鎖GPIO與LED的N種交互模式

    今天特別分享探索Air780EPM中GPIO與LED的多樣交互!本文介紹N種交互模式,包括脈沖控制、狀態切換及多LED聯動,為智能設備開發提供豐富技術選型。適用于智能照明、狀態指示等物聯網場景。 一
    的頭像 發表于 05-29 14:31 ?740次閱讀
    Air780EPM應用開發:解鎖<b class='flag-5'>GPIO</b>與LED的N種交互<b class='flag-5'>模式</b>

    迅為RK3568開發板驅動指南GPIO子系統GPIO子系統API函數的引入

    迅為RK3568開發板驅動指南GPIO子系統GPIO子系統API函數的引入
    的頭像 發表于 05-29 14:05 ?1024次閱讀
    迅為RK3568開發板驅動指南<b class='flag-5'>GPIO</b>子系統<b class='flag-5'>GPIO</b>子系統API函數的引入

    解鎖Air780EPM:N種GPIO操控LED的實戰技巧!

    在物聯網項目中,靈活使用Air780EPM的GPIO控制LED至關重要。本文將展示實現方式,涵蓋硬件配置與軟件編程,滿足不同場景需求。 今天特別分享基于Air780EPM的GPIO控制
    的頭像 發表于 05-28 16:56 ?874次閱讀
    解鎖Air780EPM:N種<b class='flag-5'>GPIO</b>操控LED的實戰技巧!

    迅為RK3568驅動指南GPIO子系統 GPIO操作函數實驗

    迅為電子RK3568開發板驅動指南GPIO子系統 GPIO操作函數實驗
    的頭像 發表于 05-28 15:24 ?1335次閱讀
    迅為RK3568驅動指南<b class='flag-5'>GPIO</b>子系統 <b class='flag-5'>GPIO</b>操作函數實驗

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

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

    HTR3310 10路LED驅動器和GPIO控制器中文手冊

    ? ? ? HTR3310是一款10路多功能LED驅動器和GPIO控制器2.5V~5.5V電源供電。10個IO端口中的任何一個都可以配置為LED模式GPIO模式。此外,任何
    發表于 04-14 16:31 ?2次下載

    HTR3316 16路LED驅動器和GPIO控制器中文手冊

    ? ? ?HTR3316是一款16路多功能LED驅動器和GPIO控制器,2.5V~5.5V電源供電。16個IO端口中的任何一個都可以配置為LED模式GPIO模式。此外,任何
    發表于 04-11 17:51 ?2次下載

    基于小凌派RK2206開發板:OpenHarmony如何使用IoT接口控制GPIO外設

    1、案例簡介本案例主要是如何在小凌派-RK2206開發板上使用IOT庫的GPIO接口,進行GPIO編程開發。例程將創建一個任務,通過配置GPIO引腳,實現
    的頭像 發表于 04-11 15:36 ?2045次閱讀
    基于小凌派RK2206開發板:OpenHarmony如何使用IoT接口控制<b class='flag-5'>GPIO</b>外設

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

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

    單片機學習之GPIO

    今日分享如何通過手冊理解單片機IO知識點含義解釋:1.GPIO:同我們常說的IO口一樣,GeneralPurposeInputOutput(通用輸入/輸出)簡稱為GPIO,每個GPIO端口可通過軟件
    發表于 03-26 14:53 ?0次下載