【物联网】详解STM32的GPIO八种输入输出模式,GPIO各种输入输出的区别、初始化的步骤详解,看这文章就行了(超详细)_stm32输出模式(1)

介绍

  1. 推挽输出(Push-Pull Output):推挽输出模式是最常见的GPIO输出模式。在该模式下,引脚可以输出高电平或低电平,同时具有一定的驱动能力。引脚在输出低电平时形成低阻抗,输出高电平时形成高阻抗,可以驱动外部电路。
// 初始化推挽输出模式的GPIO
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_0;               // GPIO引脚号
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;     // 推挽输出模式
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;   // GPIO速度设置为高速
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);         // 初始化GPIOA

  1. 开漏输出(Open-Drain Output):开漏输出模式是一种能够输出低电平和高阻抗的GPIO模式。在该模式下,引脚只能输出低电平,要输出高电平需要通过外部上拉电阻或其他方式。通常用于与外部器件连接,例如与开漏输出的I2C总线器件进行通信。
// 初始化开漏输出模式的GPIO
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;     // 开漏输出模式
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;   // GPIO速度设置为高速
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);

  1. 复用推挽输出(AF Push-Pull Output):复用推挽输出模式允许将GPIO引脚用作特定外设功能。在该模式下,引脚可以输出高电平或低电平,并具有一定的驱动能力。
// 初始化复用推挽输出模式的GPIO
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;          // 复用推挽输出模式
GPIO_InitStruct.Pull = GPIO_NOPULL;              // 不设置上拉或下拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;    // GPIO速度设置为高速
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);

  1. 复用开漏输出(AF Open-Drain Output):复用开漏输出模式允许将GPIO引脚用作特定外设功能。在该模式下,引脚只能输出低电平,要输出高电平需要通过外部上拉电阻或其他方式。
// 初始化复用开漏输出模式的GPIO
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;          // 复用开漏输出模式
GPIO_InitStruct.Pull = GPIO_NOPULL;              // 不设置上拉或下拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;    // GPIO速度设置为高速
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);

  1. 浮空输入(Floating Input):浮空输入模式是一种高阻抗输入模式。在该模式下,引脚不连接到外部电路,处于高阻抗状态。可以通过读取引脚电平来检测外部信号。
// 初始化浮空输入模式的GPIO
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;          // 浮空输入模式
GPIO_InitStruct.Pull = GPIO_NOPULL;              // 不设置上拉或下拉
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);

  1. 上拉输入(Pull-up Input):上拉输入模式是一种具有内部上拉电阻的GPIO输入模式。在该模式下,引脚连接到外部电路,通过内部上拉电阻来维持默认电平为高电平。
// 初始化上拉输入模式的GPIO
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;          // 上拉输入模式
GPIO_InitStruct.Pull = GPIO_PULLUP;              // 上拉输入
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);

  1. 下拉输入(Pull-down Input):下拉输入模式是一种具有内部下拉电阻的GPIO输入模式。在该模式下,引脚连接到外部电路,通过内部下拉电阻来维持默认电平为低电平。
// 初始化下拉输入模式的GPIO
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;          // 下拉输入模式
GPIO_InitStruct.Pull = GPIO_PULLDOWN;            // 下拉输入
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);

  1. 模拟输入(Analog Input):模拟输入模式是一种用于ADC(模数转换器)输入的特殊模式。在该模式下,引脚可以接收连续变化的模拟信号。
// 初始化模拟输入模式的GPIO
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;         // 模拟输入模式
GPIO_InitStruct.Pull = GPIO_NOPULL;              // 不设置上拉或下拉
HAL\_GPIO\_Init(GPIOA, &GPIO_InitStruct);

区别

  1. 推挽输出(Push-Pull Output):

    • 特点:可以输出高电平和低电平,具有一定的驱动能力。
    • 应用场景:用于驱动外部电路,如控制LED灯、驱动其他逻辑电路等。
  2. 开漏输出(Open-Drain Output):

    • 特点:只能输出低电平,需要外部上拉电阻将引脚拉高;具有一定的驱动能力。
    • 应用场景:与外部器件连接时,如I2C总线,用于与其他设备进行通信。
  3. 复用推挽输出(AF Push-Pull Output):

    • 特点:具有推挽输出的特性,可用于将GPIO引脚用作特定外设的功能。
    • 应用场景:连接到外设的特殊功能引脚,如UART串口通信引脚、PWM输出等。
  4. 复用开漏输出(AF Open-Drain Output):

    • 特点:具有开漏输出的特性,可用于将GPIO引脚用作特定外设的功能。
    • 应用场景:连接到外设的特殊功能引脚,如I2C总线通信引脚、故障信号输出等。
  5. 浮空输入(Floating Input):

    • 特点:引脚处于高阻抗状态,未连接到外部电路,测量外部信号电平。
    • 应用场景:接收外部信号的状态,如按键输入、传感器输入等。
  6. 上拉输入(Pull-up Input):

    • 特点:具有内部上拉电阻,引脚的默认电平为高电平。
    • 应用场景:检测外部信号为低电平时,例如按键按下。
  7. 下拉输入(Pull-down Input):

    • 特点:具有内部下拉电阻,引脚的默认电平为低电平。
    • 应用场景:检测外部信号为高电平时,例如按键抬起。
  8. 模拟输入(Analog Input):

    • 特点:用于接收连续变化的模拟信号,通常与ADC(模数转换器)配合使用。
    • 应用场景:测量传感器信号、音频输入等模拟信号的变化。

初始化和配置

例程
#include "stm32xxxx.h" // 包含特定的STM32系列头文件

void GPIO\_Init(void)
{
    GPIO_InitTypeDef gpio_init;  // 定义GPIO初始化结构体

    // 1. 配置引脚
    gpio_init.GPIO_Pin = GPIO_Pin_x;  // x为需要初始化的引脚编号
    gpio_init.GPIO_Mode = GPIO_Mode_x; // x为引脚模式,如GPIO\_Mode\_IN、GPIO\_Mode\_OUT等
    gpio_init.GPIO_Speed = GPIO_Speed_x;  // x为引脚速度,如GPIO\_Speed\_2MHz、GPIO\_Speed\_50MHz等
    gpio_init.GPIO_OType = GPIO_OType_x;  // x为输出模式,如GPIO\_OType\_PP(推挽输出)、GPIO\_OType\_OD(开漏输出)等
    gpio_init.GPIO_PuPd = GPIO_PuPd_x;  // x为上下拉配置,如GPIO\_PuPd\_NOPULL(无上下拉)、GPIO\_PuPd\_UP(上拉)等
    GPIO\_Init(GPIOx, &gpio_init);  // GPIOx为对应的GPIO端口,如GPIOA、GPIOB等
    // 将上面代码中的 GPIO\_Pin\_x 替换为你要初始化和配置的具体引脚编号
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/9e119dd6b6c4b62d891a03d5aab0f6b6.png)

![img](https://img-blog.csdnimg.cn/img_convert/04091c0bf7c4db78a3340e230cabefa8.jpeg)

![img](https://img-blog.csdnimg.cn/img_convert/be4b261773f644e89f0422e26ff0695c.png)

 **既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

![img](https://img-blog.csdnimg.cn/img_convert/590ba3c960a09c11b42e8b5f5ed9b42a.png)

![img](https://img-blog.csdnimg.cn/img_convert/b3b4c185c54ac90f9c43d0078891f27e.png)

 

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)**

<img src="https://img-community.csdnimg.cn/images/73bb5de17851459088c6af944156ee24.jpg" alt="img" style="zoom: 67%;" />



# 最后

**资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~**

**你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!**

式)**

<img src="https://img-community.csdnimg.cn/images/73bb5de17851459088c6af944156ee24.jpg" alt="img" style="zoom: 67%;" />



# 最后

**资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~**

**你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!**

**[更多资料点击此处获qu!!](https://bbs.csdn.net/topics/618376385)**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值