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

// 初始化复用推挽输出模式的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 替换为你要初始化和配置的具体引脚编号
    // 将 GPIO\_Mode\_x 替换为你需要的引脚模式
    // 将 GPIO\_Speed\_x 替换为你需要的引脚速度
    // 将 GPIO\_OType\_x 替换为你需要的输出模式
    // 将 GPIO\_PuPd\_x 替换为你需要的上下拉配置

    // 2. 配置引脚复用功能(如果需要)
    GPIO\_PinAFConfig(GPIOx, GPIO_PinSource_x, GPIO_AF_x);
    // GPIOx 替换为对应的GPIO端口,GPIO\_PinSource\_x 替换为需要配置复用功能的引脚编号,GPIO\_AF\_x 替换为复用功能选择

    // 其他操作,如设置引脚输出、读取引脚输入状态、配置中断等
}

int main(void)
{
    // 初始化MCU和其他外设

    // 初始化GPIO引脚
    GPIO\_Init();

    // 其他代码逻辑

    while (1)
    {
        // 主循环代码
    }
}

请替换代码中的以下部分:

  1. stm32xxxx.h :使用适用于你的STM32系列的具体头文件,例如 stm32f4xx.h
  2. GPIO_Init() 函数中的 GPIO_Pin_x :将其替换为你要初始化和配置的特定引脚编号。
  3. GPIO_Mode_x :将其替换为你需要的引脚模式,例如 GPIO_Mode_INGPIO_Mode_OUT 等。
  4. GPIO_Speed_x :将其替换为你需要的引脚速度,例如 GPIO_Speed_2MHzGPIO_Speed_50MHz 等。
  5. GPIO_OType_x :将其替换为你需要的输出模式,例如 GPIO_OType_PP(推挽输出)或 GPIO_OType_OD(开漏输出)。
  6. GPIO_PuPd_x :将其替换为你需要的上下拉配置,例如 GPIO_PuPd_NOPULL(无上下拉)或 GPIO_PuPd_UP(上拉)。
  7. GPIOxGPIO_PinSource_x :将其替换为你需要的具体GPIO端口和引脚编号。
  8. GPIO_AF_x :将其替换为你需要的复用功能选择,例如 GPIO_AF_USART1(USART1复用功能)、 GPIO_AF_SPI2(SPI2复用功能)等。
步骤解释

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

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

img

img

img

img

img

img

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

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

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

以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

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

  • 12
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值