0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32 GPIO八种模式及工作原理详解

哈哈hfgfdf 来源:电子嵌入式学习 作者:电子嵌入式学习 2024-07-22 09:32 次阅读

一. 前言

  GPIO全称General Purpose Input Output,是微控制数字输入/输出的基本模块,可以实现微控制器与外部环境的数字进行交换。借助GPIO微控制器可以实现对外围设备(像控制led亮灭,按键控制,软件interwetten与威廉的赔率体系 IIC等)直观又简单的控制。

GPIO的8种模式

 1. 输入模式:
  (1)上拉输入模式 GPIO_Mode_IPU
  (2)下拉输入模式 GPIO_Mode_IPD
  (3)模拟输入模式 GPIO_Mode_AIN
  (4)浮空输入模式 GPIO_Mode_IN_FLOATING

2. 输出模式:
  (1)推挽输出模式 GPIO_Mode_Out_PP
  (2)开漏输出模式 GPIO_Mode_Out_OD
  (3)复用推挽输出模式 GPIO_Mode_AF_PP
  (4)复用开漏输出模式 GPIO_Mode_AF_OD

3. 最大输出速度:
  (1)2MHz GPIO_Speed_2MHz
  (2)25MHz GPIO_Speed_25MHz
  (3)50MHz GPIO_Speed_50MHz

636696d2-430c-11ef-a4b4-92fbcf53809c.png

二. 输入模式

输入驱动器

  GPIO的输入驱动器主要由TTL肖特基触发器、带开关的上拉电阻和带开关的下拉电阻组成,GPIO的输入驱动器没有多路选择开关,输入信号送到GPIO输入数据寄存器的同时,送给了片上外设,所以GPIO的输入没有复用功能选项。

1. 上拉输入模式

  上拉就是把当前引脚的电位拉高,比如拉到VDD。弱上拉和强上拉的区别只是上拉电阻的阻值不同。
  输出缓冲器被禁止,TTL施密特触发输入被激活,此时图中GPIO内部上拉电阻端的开关闭合,接通VDD,下拉电阻端开关断开。此时引脚默认输入为高电平。

6381623c-430c-11ef-a4b4-92fbcf53809c.png

2. 下拉输入模式

  下拉就是把当前引脚的电位拉低,比如拉到GND。
  输出缓冲器被禁止,TTL施密特触发输入被激活,此时图中GPIO内部下拉电阻端的开关闭合,接通VSS,上拉电阻端开关断开。此时引脚默认输入为低电平。

63a50aca-430c-11ef-a4b4-92fbcf53809c.png

3. 模拟输入模式

  应用于ADC模拟输入,或者是低功耗下的省电。
  输出缓冲器被禁止,TTL施密特触发输入被禁止。

63ca498e-430c-11ef-a4b4-92fbcf53809c.png

4. 浮空输入模式

  浮空就是GPIO输入引脚即不接高电平,也不接低电平。由于逻辑器件的内部结构,当它输入引脚悬空时,相当于该引脚接了高电平。实际运用时,引脚不建议悬空,容易受到干扰。

输出缓冲器被禁止,TTL施密特触发输入被激活,GPIO内部下拉电阻端的开关断开,上拉电阻端开关也断开。

63ec255e-430c-11ef-a4b4-92fbcf53809c.png

三. 输出模式

输出驱动器

GPIO的输出驱动器主要由多路选择器、输出控制逻辑和一对互补的MOS管组成。多路选择器是根据用户的设置决定某个引脚是输出还是复用功能输出。输出控制逻辑和一对互补的MOS管是根据用户的设置通过控制P-MOS管和N-MOS管的导通还是断开决定GPIO是开漏、推挽输出模式还是关闭。

1. 推挽输出模式

  推挽输出既可以输出高电平,也可以输出低电平,连接数字器件。推挽输出的结构一般是指两个三极管分别受到两个互补信号的控制,在一个三极管被导通的时候另一个三极管被截止。输出的高点电平则是由IC的电源决定。

640d1f48-430c-11ef-a4b4-92fbcf53809c.png

2. 开漏输出模式

  开漏模式一般用在IIC等需要“线与”功能的总线电路中,除此之外,还可以用在电平不匹配的场合,像需要输出5V的高电平就可以在外部接入一个上拉电阻,上拉电源为5v,并把GPIO设置为开漏模式,当输出高阻态时,由上拉电源向外部输出5V的电平。

6440e346-430c-11ef-a4b4-92fbcf53809c.png

在开漏输出时,只有N-MOS会参与工作,上方的P-MOS管完全不工作。当输出控制为0(低电平)时,P-MOS管关闭,N-MOS管导通,使得输出GND。当输出控制为1(高电平)时,P-MOS管和N-MOS管全部关闭,引脚既不输出高电平也不输出低电平,此时呈现一个高阻态。正常使用的情况下,必须接一个上拉电阻,若不接上拉电阻,则引脚只能输出低电平。
  在推挽输出时,施密特触发器是打开的,即输入可用,通过输入数据寄存器GPIOx_IDR可读取I/O的实际状态。

3. 复用推挽输出模式

  GPIO复用为其他外设(IIC的SCL,SDA)。除了输出信号的来源改变 ,其他操作与推挽输出的功能相同。

64713686-430c-11ef-a4b4-92fbcf53809c.png

4. 复用开漏输出模式

  GPIO复用为其他外设(TX1,MOSI,MISO,SCK,SS)。除了输出信号的来源改变 ,其他操作与开漏输出的功能相同。

648f486a-430c-11ef-a4b4-92fbcf53809c.png

四. GPIO的选用

当作为普通GPIO输入:根据需要配置该引脚为浮空、上拉或下拉输入,同时不使能该引脚对应的所有复用功能模块。

当作为普通GPIO输出:根据需要配置该引脚为推挽输出或开漏输出,同时不使能该引脚对应的所有复用功能模块。

当作为普通模拟输入:配置该引脚为模拟输入模式,同时不使能该引脚对应的所有复用功能模块。

当作为内置外设的输入:根据需要配置该引脚为浮空、上拉或下拉输入,同时使能该引脚对应的某个复用功能模块。

当作为内置外设的输出:根据需要配置该引脚为复用推挽输出或复用开漏输出,同时使能该引脚对应的所有复用功能模块。

五. 有关GPIO输入/输出模式的初始化(F1系列 HAL库函数)

 GPIO_InitTypeDef 类型的结构体

typedef struct{  uint32_t Pin;       /*!<指定要配置的GPIO引脚。该参数可以是@ref GPIO_pins_define 的任意值 */  uint32_t Mode;      /*!<指定所选引脚的工作模式。该参数可以是@ref GPIO_mode_define 的值 */  uint32_t Pull;      /*!< 指定所选引脚的上拉或下拉激活。该参数可以是@ref GPIO_pull_define的值 */  uint32_t Speed;     /*!< 指定所选引脚的速度。该参数可以是@ref GPIO_speed_define的值 */} GPIO_InitTypeDef;

可以选择的GPIO引脚

/** @defgroup GPIO_pins_define GPIO pins define  * @{  */#define GPIO_PIN_0                 ((uint16_t)0x0001)  /* Pin 0 selected    */#define GPIO_PIN_1                 ((uint16_t)0x0002)  /* Pin 1 selected    */#define GPIO_PIN_2                 ((uint16_t)0x0004)  /* Pin 2 selected    */#define GPIO_PIN_3                 ((uint16_t)0x0008)  /* Pin 3 selected    */#define GPIO_PIN_4                 ((uint16_t)0x0010)  /* Pin 4 selected    */#define GPIO_PIN_5                 ((uint16_t)0x0020)  /* Pin 5 selected    */#define GPIO_PIN_6                 ((uint16_t)0x0040)  /* Pin 6 selected    */#define GPIO_PIN_7                 ((uint16_t)0x0080)  /* Pin 7 selected    */#define GPIO_PIN_8                 ((uint16_t)0x0100)  /* Pin 8 selected    */#define GPIO_PIN_9                 ((uint16_t)0x0200)  /* Pin 9 selected    */#define GPIO_PIN_10                ((uint16_t)0x0400)  /* Pin 10 selected   */#define GPIO_PIN_11                ((uint16_t)0x0800)  /* Pin 11 selected   */#define GPIO_PIN_12                ((uint16_t)0x1000)  /* Pin 12 selected   */#define GPIO_PIN_13                ((uint16_t)0x2000)  /* Pin 13 selected   */#define GPIO_PIN_14                ((uint16_t)0x4000)  /* Pin 14 selected   */#define GPIO_PIN_15                ((uint16_t)0x8000)  /* Pin 15 selected   */#define GPIO_PIN_All               ((uint16_t)0xFFFF)  /* All pins selected */
#define GPIO_PIN_MASK              0x0000FFFFu /* PIN mask for assert test *//**  * @}  */

可以选择的GPIO引脚模式

/** @defgroup GPIO_mode_define GPIO mode define  * @{  */#define  GPIO_MODE_INPUT                        0x00000000u   /*!< 输入模式      */#define  GPIO_MODE_OUTPUT_PP                    0x00000001u   /*!< 推挽输出模式              */#define  GPIO_MODE_OUTPUT_OD                    0x00000011u   /*!< 开漏输出模式              */#define  GPIO_MODE_AF_PP                        0x00000002u   /*!< 复用推挽输出模式    */#define  GPIO_MODE_AF_OD                        0x00000012u   /*!< 复用开漏输出模式    */#define  GPIO_MODE_AF_INPUT                     GPIO_MODE_INPUT   /*!< 复用功能输入模式      */
#define  GPIO_MODE_ANALOG                       0x00000003u   /*!< 模拟输入模式  */
#define  GPIO_MODE_IT_RISING                    0x10110000u   /*!< 上升沿触发检测的外部中断模式         */#define  GPIO_MODE_IT_FALLING                   0x10210000u   /*!< 下降沿触发检测的外部中断模式         */#define  GPIO_MODE_IT_RISING_FALLING            0x10310000u   /*!< 上升/下降沿触发检测的外部中断模式  */
#define  GPIO_MODE_EVT_RISING                   0x10120000u   /*!< 上升沿触发检测的外部事件模式         */#define  GPIO_MODE_EVT_FALLING                  0x10220000u   /*!< 下降沿触发检测的外部事件模式         */#define  GPIO_MODE_EVT_RISING_FALLING           0x10320000u   /*!< 上升/下降沿触发检测的外部事件模式  *//**  * @}  */

可以选择的GPIO引脚上拉/下拉激活

/** @defgroup GPIO_pull_define GPIO pull define  * @brief GPIO Pull-Up or Pull-Down Activation  * @{  */#define  GPIO_NOPULL        0x00000000u   /*!< 没有激活上拉或下拉  */#define  GPIO_PULLUP        0x00000001u   /*!< 上拉激活           */#define  GPIO_PULLDOWN      0x00000002u   /*!< 下拉激活           *//**  * @}  */

可以选择的GPIO引脚的速度

/** @defgroup GPIO_speed_define  GPIO speed define  * @brief GPIO Output Maximum frequency  * @{  */#define  GPIO_SPEED_FREQ_LOW              (GPIO_CRL_MODE0_1) /*!< Low speed 低速 */#define  GPIO_SPEED_FREQ_MEDIUM           (GPIO_CRL_MODE0_0) /*!< Medium speed 中速 */#define  GPIO_SPEED_FREQ_HIGH             (GPIO_CRL_MODE0)   /*!< High speed 高速 *//**  * @}  */

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2270

    文章

    10897

    浏览量

    355813
  • GPIO
    +关注

    关注

    16

    文章

    1204

    浏览量

    52067
收藏 人收藏

    评论

    相关推荐

    GPIO模式工作原理(电路原理和三极管)

    首先介绍一下接口类型 接口就是芯片之间的连接方式。单片机通过GPIO与各种模块相连接,传输数据、信号。接口类型可分为以下几种: 1、普通GPIO接口 通常只有一个引脚,只负责输出、输入高低
    的头像 发表于 12-16 16:25 391次阅读
    <b class='flag-5'>GPIO</b>的<b class='flag-5'>八</b><b class='flag-5'>种</b><b class='flag-5'>模式</b>及<b class='flag-5'>工作原理</b>(电路原理和三极管)

    GPIO内部电路的原理

    前言 笔者近日在B站刷到了一个视频,使我对GPIO的I/O口内部基本结构以及工作原理有了恍然大明白的理解,现在对此做一个总结,并为大家推荐该视频Keysking 【STM32GPIO
    的头像 发表于 11-20 09:24 293次阅读
    <b class='flag-5'>GPIO</b>内部电路的原理

    stm32 GPIO中断配置教程

    在嵌入式开发中,STM32微控制器因其高性能和丰富的外设而广受欢迎。GPIO(通用输入/输出)中断是STM32微控制器中常用的功能之一,它允许开发者在特定引脚上检测到外部信号变化时快速响应。 1.
    的头像 发表于 11-19 15:53 731次阅读

    STM32 GPIO工作模式

    GPIO (general purpose input output)是通用输入输出端口的简称,简单来说就是软件可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。
    的头像 发表于 11-06 09:40 555次阅读
    <b class='flag-5'>STM32</b> <b class='flag-5'>GPIO</b>的<b class='flag-5'>八</b><b class='flag-5'>种</b><b class='flag-5'>工作</b><b class='flag-5'>模式</b>

    以太网的传输介质和工作模式

    以太网是一广泛应用的局域网(LAN)威廉希尔官方网站 ,它通过特定的传输介质和工作模式,在多个设备之间高效地传输数据。本文将从以太网的传输介质和工作模式
    的头像 发表于 10-08 10:07 780次阅读

    gpio接口是干什么的 gpio输入输出模式怎么选择

    GPIO接口的作用 GPIO(General Purpose Input/Output)接口,即通用输入输出接口,是一用于连接和控制各种外部设备的数字接口。它由一组引脚组成,可以通过编程的方式控制
    的头像 发表于 10-06 16:07 2603次阅读

    晶体管的基本工作模式

    晶体管作为电子电路中的核心元件,其基本工作模式对于理解其工作原理和应用至关重要。晶体管的工作模式主要可以分为两大类:放大
    的头像 发表于 09-13 16:40 801次阅读

    vim的三工作模式是什么?如何切换

    Vim是一款功能强大的文本编辑器,它具有多种工作模式,以满足不同用户的需求。在Vim中,主要有三工作模式:普通
    的头像 发表于 08-30 14:50 2725次阅读

    路数据分配器的基本概念及工作原理

    路数据分配器是一常见的电子设备,用于将一个输入信号分配到多个输出端。在本文中,我们将详细介绍路数据分配器的基本概念、工作原理、应用场景以及设计方法。 一、
    的头像 发表于 07-10 10:40 1936次阅读

    三菱PLC的工作模式详解

    三菱PLC(可编程逻辑控制器)作为工业自动化领域的核心控制设备,其工作模式直接关系到控制系统的稳定性和效率。本文将围绕三菱PLC的工作模式展开详细讨论,包括RUN
    的头像 发表于 06-18 09:32 1979次阅读

    请问STM32WB55RG怎么配置GPIO输入模式

    在CubeMX中配置STM32WB55的GPIO输入模式时,在下拉选择中为何没有输入模式选择?
    发表于 05-23 07:58

    快速搞懂GPIO控制器的六模式

    的六常见模式,我们特地整理了这篇文章。。快速搞懂GPIO控制器的六模式我们拿STM32芯片举
    的头像 发表于 05-18 08:04 1475次阅读
    快速搞懂<b class='flag-5'>GPIO</b>控制器的六<b class='flag-5'>种</b><b class='flag-5'>模式</b>

    STM32GPIO口如果既要输入又要输出怎么办?STM32 GPIO口8模式如何准确的分析?

    STM32GPIO口如果既要输入又要输出怎么办?STM32 GPIO口8模式如何准 确的分析?
    发表于 04-08 08:27

    彻底搞懂8GPIO输入输出模式

    一、STM32的4输入模式输入浮空:此模式下该引脚的高低电平由外部决定,用于读取外部电平状态。输入上拉:此模式下该引脚浮空时电平状态为高电
    的头像 发表于 04-03 08:09 4116次阅读
    彻底搞懂8<b class='flag-5'>种</b><b class='flag-5'>GPIO</b>输入输出<b class='flag-5'>模式</b>

    浅析电子负载常见的的四工作模式

    浅析电子负载常见的的四工作模式 电子负载是电子设备的一,用于模拟负载并测试电源的性能。它在电子行业和电力领域有广泛的应用。电子负载常见的四
    的头像 发表于 01-22 13:43 2691次阅读