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

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

3天内不再提示

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

哈哈hfgfdf 来源:电子嵌入式学习 作者:电子嵌入式学习 2024-07-22 09:32 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一. 前言

  GPIO全称General Purpose Input Output,是微控制数字输入/输出的基本模块,可以实现微控制器与外部环境的数字进行交换。借助GPIO微控制器可以实现对外围设备(像控制led亮灭,按键控制,软件模拟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
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371049
  • GPIO
    +关注

    关注

    16

    文章

    1313

    浏览量

    55697
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    IO口8工作模式和应用

    、SPI、PWM、I²C扩展芯片功能失去GPIO独立性外设专用,电流特性一致一、IO口常见工作模式 输入模式(Input Mode) 描述: IO口配置为接收外部信号,通常用来识别开关
    发表于 11-14 06:46

    CW32 UART低功耗模式详解

    介绍 1.CW32L083工作模式 CW32L083 支持三工作模式,由内嵌的电源管理模块自动完成电源的统一管理。三
    发表于 11-12 07:24

    冲击传感器工作原理和应用领域详解

    离不开冲击传感器。冲击传感器工作原理:冲击传感器(又称冲击加速度计)是一测量瞬时加速度或冲击力的设备,主要基于以下工作原理:1.压电效应:某些晶体材料在受到机械
    的头像 发表于 10-24 12:02 250次阅读
    冲击传感器<b class='flag-5'>工作原理</b>和应用领域<b class='flag-5'>详解</b>

    Air780EPM应用开发:解锁GPIO与LED的N交互模式

    今天特别分享探索Air780EPM中GPIO与LED的多样交互!本文介绍N交互模式,包括脉冲控制、状态切换及多LED联动,为智能设备开发提供丰富技术选型。适用于智能照明、状态指示等物联网场景。 一
    的头像 发表于 05-29 14:31 456次阅读
    Air780EPM应用开发:解锁<b class='flag-5'>GPIO</b>与LED的N<b class='flag-5'>种</b>交互<b class='flag-5'>模式</b>

    GPIO配置的工作原理是什么?

    我使用 EZ-USB 配置实用程序,我想知道是否有人知道 GPIO 配置的工作原理。 例如,GPIO0 可以用作传感器复位,我知道这个 GPIO0 用于重置传感器,但我不明白的是选项用
    发表于 05-19 06:56

    WiFi模块工作模式讲解:AP、STA、AP+STA模式

    分别对应不同的网络角色和功能。本文将对这三模式进行展开讲解,帮助初学者全面理解这三模式的特点。一AP模式1.
    的头像 发表于 03-27 19:33 4050次阅读
    WiFi模块<b class='flag-5'>工作</b><b class='flag-5'>模式</b>讲解:AP、STA、AP+STA<b class='flag-5'>模式</b>

    STM32项目分享:STM32智能语音台灯

    —项目简介1.功能详解STM32智能语音台灯功能如下:1.STM32F103C8T6单片机系统板作为主控单元2.按键切换模式,支
    的头像 发表于 03-15 10:02 2328次阅读
    <b class='flag-5'>STM32</b>项目分享:<b class='flag-5'>STM32</b>智能语音台灯

    开关电源的基本工作原理

    实现 DC/AC、DC/DC 电压变换,以及输出电压可调和自动稳压。 开关电源一般有三工作模式:频率、脉冲宽度固定模式,频率固定、脉冲宽度可变
    发表于 03-10 17:01

    超级电容电池的工作原理

    超级电容电池是一介于传统电容器与电池之间的新型储能装置。其工作原理主要基于电荷分离和电场存储,以下是关于超级电容电池工作原理的详细解释:
    的头像 发表于 01-27 11:17 1971次阅读

    GPIO模块与其他外设的连接方法

    在嵌入式系统设计中,GPIO模块是实现设备与外部世界交互的关键接口。它们提供了一灵活的方式来控制和监测外部设备。 GPIO模块的基本概念 GPIO模块由一组引脚组成,每个引脚都可以被
    的头像 发表于 01-09 09:48 1480次阅读

    GPIO错误排查与解决

    。输入模式下,GPIO可以读取外部信号;输出模式下,GPIO可以控制外部设备。正确配置GPIO对于系统的正常运行至关重要。 2. 常见的
    的头像 发表于 01-09 09:46 3697次阅读

    FDD的工作原理详解

    FDD(Frequency Division Duplexing,频分双工)的工作原理主要基于频率复用和双工技术,实现上行链路(移动台到基站)和下行链路(基站到移动台)的同时双向通信。以下是对FDD
    的头像 发表于 01-07 17:12 4698次阅读

    示波器的三触发模式

    模式进行比较,并介绍它们的实操特点和适用场景。 1. 单次触发(Single Trigger) 单次触发模式是示波器的一特殊触发模式,通常用于捕获一次性的事件,适用于不规则或偶发信号
    的头像 发表于 01-07 11:04 1.3w次阅读
    示波器的三<b class='flag-5'>种</b>触发<b class='flag-5'>模式</b>

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

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

    SiLM9714中离线诊断模式工作原理和实现方式

    本应用笔记主要阐述了SiLM9714中离线诊断模式工作原理以及实现方式。
    的头像 发表于 12-05 10:32 1770次阅读
    SiLM9714中离线诊断<b class='flag-5'>模式</b>的<b class='flag-5'>工作原理</b>和实现方式