当前位置:   article > 正文

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

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  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
  • 2
  • 3
  • 4
  • 5
  • 6
  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
  • 2
  • 3
  • 4
  • 5
  • 6
  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
  • 2
  • 3
  • 4
  • 5
  • 6
  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
  • 2
  • 3
  • 4
  • 5
  • 6

区别

  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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

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

  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年进入阿里一直到现在。

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

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

img

img

img

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

img

img

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

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

img

最后

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

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

式)**

img

最后

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

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

更多资料点击此处获qu!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/820426
推荐阅读
相关标签
  

闽ICP备14008679号