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

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

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

什么是GPIO操作

汽車電子技術(shù) ? 來(lái)源:玩轉(zhuǎn)單片機(jī) ? 作者:Julian ? 2023-02-10 14:41 ? 次閱讀

1、GPIO 工作模式

(1)輸入模式(模擬、上拉、下拉、浮空)

輸入模式可以配置為模擬、上拉、下拉以及浮空模式。上拉和下拉輸入很好理解,默認(rèn)的電平由上拉或者下拉決定。浮空輸入的電平是不確定的,完全由外部的輸入決定,一般接按鍵的時(shí)候可以使用這個(gè)模式。模擬輸入則用于 ADC 采集。

(2)輸出模式(推挽/開(kāi)漏)

在輸出模式中,推挽模式時(shí)雙 MOS 管以推挽方式工作,輸出數(shù)據(jù)寄存器GPIOx_ODR 可控制 I/O 輸出高低電平。開(kāi)漏模式時(shí),只有 N-MOS 管工作,輸出數(shù) 據(jù) 寄 存 器 可 控 制 I/O 輸 出 高 阻 態(tài) 或 低 電 平 。

(3)復(fù)用功能(推挽/開(kāi)漏)

復(fù)用功能模式中,輸出使能,輸出速度可配置,可工作在開(kāi)漏及推挽模式,但是輸出信號(hào)源于其它外設(shè),輸出數(shù)據(jù)寄存器 GPIOx_ODR 無(wú)效;輸入可用,通過(guò)輸入數(shù)據(jù)寄存器可獲取 I/O 實(shí)際狀態(tài),但一般直接用外設(shè)的寄存器來(lái)獲取該數(shù)據(jù)信號(hào)。

(4)模擬輸入輸出(上下拉無(wú)影響)

模擬輸入輸出模式中,雙 MOS 管結(jié)構(gòu)被關(guān)閉,施密特觸發(fā)器停用,上/下拉也被禁止。其它外設(shè)通過(guò)模擬通道進(jìn)行輸入輸出。

pYYBAGPl5uqAPSqXAAXlSC3EjnE337.png

2、GPIO驅(qū)動(dòng)源碼

#include "stm32f10x.h"

void LED_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;        //定義結(jié)構(gòu)體變量
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//開(kāi)啟時(shí)鐘
  
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;        //選擇你要設(shè)置的IO口
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;     //設(shè)置推挽輸出模式
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;      //設(shè)置傳輸速率
  GPIO_Init(GPIOC,&GPIO_InitStructure);            //初始化GPIO
  
  GPIO_SetBits(GPIOC,GPIO_Pin_0);             //將LED端口拉高,熄滅所有LED
}

void KEY_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;         //定義結(jié)構(gòu)體變量  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//開(kāi)啟時(shí)鐘
  
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;           //選擇你要設(shè)置的IO口
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;      //下拉輸入  
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;  //設(shè)置傳輸速率
  GPIO_Init(GPIOA,&GPIO_InitStructure);          //初始化GPIO
}

int main( void )
{
  LED_Init();
  KEY_Init();
  while(1)
  {
    //如果按鍵按下(不進(jìn)行消抖,因?yàn)橹皇菧y(cè)試GPIOA_0是否拉低)
    if( GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) )
    {
      GPIO_ResetBits(GPIOC,GPIO_Pin_0);
    }
    else
    {
      GPIO_SetBits(GPIOC,GPIO_Pin_0);
    }
  }
}

--END--

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

    關(guān)注

    98

    文章

    6406

    瀏覽量

    543855
  • 模擬
    +關(guān)注

    關(guān)注

    7

    文章

    1420

    瀏覽量

    83877
  • 電平
    +關(guān)注

    關(guān)注

    5

    文章

    357

    瀏覽量

    39816
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    淺談GPIO操作

    本帖最后由 芯靈思FAE 于 2016-7-31 12:48 編輯 淺談GPIO操作很久很久以前,我們?nèi)绻贚inux系統(tǒng)下操作GPIO是這樣的......
    發(fā)表于 07-31 12:47

    GPIO操作步驟

    前提1.該筆記為本人學(xué)習(xí)時(shí)做的一些筆記,僅為個(gè)人學(xué)習(xí)只用,可能存在錯(cuò)誤或缺陷2.本人是在 正點(diǎn)原子平臺(tái)學(xué)習(xí),具有大量視頻,講解清楚一、GPIO操作步驟1) 使能 IO 口時(shí)鐘。調(diào)用函數(shù)為
    發(fā)表于 08-02 10:25

    STM32 GPIO使用操作步驟

    STM32 GPIO使用超強(qiáng)總結(jié)STM32GPIO使用操作步驟:1. 使能GPIO對(duì)應(yīng)的外設(shè)時(shí)鐘例如://使能GPIOA、GPIOB、GPIOC對(duì)應(yīng)的外設(shè)時(shí)鐘RCC_APB2Perip
    發(fā)表于 08-12 07:31

    基于STM32的GPIO操作

    1.基于STM32的GPIO操作理解,使用的是STM32CubeMx生成軟件,目的實(shí)現(xiàn)2個(gè)燈的流水,使用的是STM32G473這個(gè)芯片。硬件原理圖如下:LED1對(duì)應(yīng)的PA1,LED2對(duì)應(yīng)的PA0
    發(fā)表于 08-16 08:24

    嵌入式linux驅(qū)動(dòng)對(duì)gpio的基本操作

    文章目錄代碼驅(qū)動(dòng)層代碼應(yīng)用層代碼 測(cè)試驅(qū)動(dòng)Makefile這里記錄的是嵌入式linux驅(qū)動(dòng)對(duì)gpio的基本操作。實(shí)現(xiàn)的內(nèi)容是:gpio驅(qū)動(dòng)編寫(xiě)>&
    發(fā)表于 11-05 07:59

    GPIO操作方式

    2020年,都全面奔小康了,Linux驅(qū)動(dòng)也終于NiMa不用像2008年那么惡心了,大部分產(chǎn)品的研發(fā)可以直接使用廠家提供的內(nèi)核,通過(guò)修改設(shè)備樹(shù)完成。特殊情況下,還是要摸一下驅(qū)動(dòng)的,本文只介紹GPIO
    發(fā)表于 12-24 07:09

    STM32基本GPIO操作步驟

    STM32基本GPIO操作:按鍵輸入(掃描+外部中斷)本文章向大家介紹STM32基本GPIO操作:按鍵輸入(掃描+外部中斷),主要包括STM32基本
    發(fā)表于 02-23 07:37

    can使能上拉gpio_RK3288的GPIO怎么操作

    can使能上拉gpio_RK3288的GPIO怎么操作?
    發(fā)表于 03-02 09:26

    英創(chuàng)信息技術(shù)工控主板快速GPIO操作介紹

    GPIO管腳所呈現(xiàn)的電平均為高電平。面對(duì)豐富的GPIO資源,許多客戶希望將GPIO利用起來(lái)做一下其他的應(yīng)用,比如模擬SPI接口,I2C接口,以及一些總線時(shí)序等,下面就來(lái)看看GPIO
    的頭像 發(fā)表于 01-17 09:56 ?2605次閱讀
    英創(chuàng)信息技術(shù)工控主板快速<b class='flag-5'>GPIO</b><b class='flag-5'>操作</b>介紹

    STM32的GPIO操作例程免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是KEIL官方STM32的GPIO操作例程免費(fèi)下載。
    發(fā)表于 01-23 08:00 ?0次下載

    Linux內(nèi)核GPIO操作函數(shù)的詳解分析

    本文檔的主要內(nèi)容詳細(xì)介紹的是Linux內(nèi)核GPIO操作函數(shù)的詳解分析免費(fèi)下載。
    發(fā)表于 01-22 16:58 ?28次下載

    stm32單片機(jī)基于hal庫(kù)對(duì)對(duì)GPIO操作

    32單片機(jī)對(duì)GPIO操作和51單片機(jī)對(duì)io口的操作是一樣的,常用的有三個(gè),輸出,io口至高至低,輸入,檢查測(cè)io口的高低電平,取反,用于閃爍處理。/*讀取io口電平
    發(fā)表于 11-26 20:06 ?1次下載
    stm32單片機(jī)基于hal庫(kù)對(duì)對(duì)<b class='flag-5'>GPIO</b>的<b class='flag-5'>操作</b>

    STM32基本GPIO操作:按鍵輸入(掃描+外部中斷)

    STM32基本GPIO操作:按鍵輸入(掃描+外部中斷)本文章向大家介紹STM32基本GPIO操作:按鍵輸入(掃描+外部中斷),主要包括STM32基本
    發(fā)表于 12-29 19:27 ?13次下載
    STM32基本<b class='flag-5'>GPIO</b><b class='flag-5'>操作</b>:按鍵輸入(掃描+外部中斷)

    基于STM8的GPIO操作

    學(xué)會(huì)如何操作控制GPIO口對(duì)使用單片機(jī)來(lái)說(shuō)是很重要的一件事。在裝載STM8的單片機(jī)中,I/O共有12種工作模式。實(shí)際上這里的概念也是和STM32等其他單片機(jī),理解了這12種狀態(tài),也就基本上理解了大部分I/O口。
    發(fā)表于 02-10 10:20 ?5次下載
    基于STM8的<b class='flag-5'>GPIO</b><b class='flag-5'>操作</b>

    SOC GPIO操作

    GPIO_INTERRUPT_LOW_ENABLE 0x2c 原文標(biāo)題:SOC GPIO操作
    的頭像 發(fā)表于 11-01 11:06 ?76次閱讀