STM32 单片机常见的 8 种输入输出模式

devtools/2025/3/16 17:01:40/

STM32 单片机常见的 8 种输入输出模式

文章目录

  • STM32 单片机常见的 8 种输入输出模式
    • 1. 浮空输入模式 (GPIO_Mode_IN_FLOATING)
      • 介绍
      • 使用场景
      • 示例代码
    • 2. 上拉输入模式 (GPIO_Mode_IPU)
      • 介绍
      • 使用场景
      • 示例代码
    • 3. 下拉输入模式 (GPIO_Mode_IPD)
      • 介绍
      • 使用场景
      • 示例代码
    • 4. 模拟输入模式 (GPIO_Mode_AIN)
      • 介绍
      • 使用场景
      • 示例代码
    • 5. 开漏输出模式 (GPIO_Mode_Out_OD)
      • 介绍
      • 使用场景
      • 示例代码
    • 6. 开漏复用功能模式 (GPIO_Mode_AF_OD)
      • 介绍
      • 使用场景
      • 示例代码
    • 7. 推挽输出模式 (GPIO_Mode_Out_PP)
      • 介绍
      • 使用场景
      • 示例代码
    • 8. 推挽复用功能模式 (GPIO_Mode_AF_PP)
      • 介绍
      • 使用场景
      • 示例代码
    • 总结

在 STM32 单片机的 GPIO(通用输入输出)操作中,常见的 8 种输入输出模式是开发过程中非常基础的内容。本文将详细介绍这 8 种模式,并提供示例代码和常见的使用场景,帮助新手快速掌握 GPIO 配置与应用。

1. 浮空输入模式 (GPIO_Mode_IN_FLOATING)

介绍

浮空输入模式是最常见的一种输入模式。在此模式下,GPIO 引脚没有连接任何电压源或电流源,处于高阻抗状态,不对外界信号提供任何拉力。

使用场景

适用于需要接收外部信号,但不需要对信号进行任何干预或增强的场合,比如一些外部开关或按键的输入。

示例代码

cCopy CodeGPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();  // 开启 GPIOA 时钟GPIO_InitStruct.Pin = GPIO_PIN_0;  // 配置 PA0 引脚
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;  // 设置为输入模式
GPIO_InitStruct.Pull = GPIO_NOPULL;  // 不启用上下拉电阻
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);  // 初始化 GPIO

2. 上拉输入模式 (GPIO_Mode_IPU)

介绍

在上拉输入模式下,GPIO 引脚内部会通过一个上拉电阻连接到 VCC。当外部输入为悬空时,GPIO 引脚会自动拉高。适合用于接收开关信号,确保输入状态稳定。

使用场景

常用于按键输入、开关输入等,需要确保引脚在未按下时为高电平的场合。

示例代码

cCopy CodeGPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();  // 开启 GPIOA 时钟GPIO_InitStruct.Pin = GPIO_PIN_1;  // 配置 PA1 引脚
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;  // 设置为输入模式
GPIO_InitStruct.Pull = GPIO_PULLUP;  // 启用上拉电阻
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);  // 初始化 GPIO

3. 下拉输入模式 (GPIO_Mode_IPD)

介绍

下拉输入模式和上拉输入模式类似,不同的是它通过内置的下拉电阻将引脚连接到 GND。适用于确保输入信号处于低电平时的场景。

使用场景

常用于需要确保引脚未接入时为低电平的场合,比如外部按钮接地的输入。

示例代码

cCopy CodeGPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();  // 开启 GPIOA 时钟GPIO_InitStruct.Pin = GPIO_PIN_2;  // 配置 PA2 引脚
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;  // 设置为输入模式
GPIO_InitStruct.Pull = GPIO_PULLDOWN;  // 启用下拉电阻
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);  // 初始化 GPIO

4. 模拟输入模式 (GPIO_Mode_AIN)

介绍

模拟输入模式用于模拟信号的输入,例如模拟传感器、温度传感器的输出。这种模式下,引脚会关闭数字功能,使其适合处理模拟信号。

使用场景

适用于连接模拟传感器,如温度传感器、光敏电阻等传感器输入。

示例代码

cCopy CodeGPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();  // 开启 GPIOA 时钟GPIO_InitStruct.Pin = GPIO_PIN_3;  // 配置 PA3 引脚
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;  // 设置为模拟输入模式
GPIO_InitStruct.Pull = GPIO_NOPULL;  // 不启用上下拉电阻
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);  // 初始化 GPIO

5. 开漏输出模式 (GPIO_Mode_Out_OD)

介绍

开漏输出模式允许引脚输出低电平或处于高阻抗状态。开漏模式的引脚不能输出高电平,需要外接上拉电阻来确保输出高电平。

使用场景

常用于 I2C 总线上的数据线和时钟线,需要外部上拉电阻的场景。

示例代码

cCopy CodeGPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();  // 开启 GPIOA 时钟GPIO_InitStruct.Pin = GPIO_PIN_4;  // 配置 PA4 引脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;  // 设置为开漏输出模式
GPIO_InitStruct.Pull = GPIO_NOPULL;  // 不启用上下拉电阻
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);  // 初始化 GPIO

6. 开漏复用功能模式 (GPIO_Mode_AF_OD)

介绍

开漏复用功能模式允许引脚进行外部复用操作(例如 I2C、SPI 等外设)。在该模式下,GPIO 引脚工作在开漏输出模式,并能通过外设功能进行操作。

使用场景

适用于需要外设复用并且需要开漏模式的情况,如 I2C 通信的 SDA 和 SCL 引脚。

示例代码

cCopy CodeGPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOB_CLK_ENABLE();  // 开启 GPIOB 时钟GPIO_InitStruct.Pin = GPIO_PIN_6;  // 配置 PB6 引脚
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;  // 设置为开漏复用模式
GPIO_InitStruct.Pull = GPIO_PULLUP;  // 启用上拉电阻
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);  // 初始化 GPIO

7. 推挽输出模式 (GPIO_Mode_Out_PP)

介绍

推挽输出模式是一种最常见的输出模式,可以同时输出高电平和低电平。当 GPIO 引脚输出时,能够驱动较大的电流,适用于大部分需要稳定输出电平的场合。

使用场景

适用于需要驱动 LED、继电器等负载的场合。

示例代码

cCopy CodeGPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOC_CLK_ENABLE();  // 开启 GPIOC 时钟GPIO_InitStruct.Pin = GPIO_PIN_5;  // 配置 PC5 引脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  // 设置为推挽输出模式
GPIO_InitStruct.Pull = GPIO_NOPULL;  // 不启用上下拉电阻
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;  // 设置输出速度
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);  // 初始化 GPIO

8. 推挽复用功能模式 (GPIO_Mode_AF_PP)

介绍

推挽复用功能模式允许引脚在推挽输出模式下进行外设复用,适用于需要将引脚连接到特定外设的场合,如 PWM 输出或串口 TX 引脚。

使用场景

适用于具有推挽特性并且需要外设复用的场景,如 PWM 输出、UART/TX 引脚等。

示例代码

cCopy CodeGPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();  // 开启 GPIOA 时钟GPIO_InitStruct.Pin = GPIO_PIN_9;  // 配置 PA9 引脚
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;  // 设置为推挽复用模式
GPIO_InitStruct.Pull = GPIO_NOPULL;  // 不启用上下拉电阻
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);  // 初始化 GPIO

总结

在 STM32 开发中,正确配置 GPIO 引脚的输入输出模式是非常重要的。不同的模式适用于不同的硬件需求和应用场景,掌握这些模式的使用能够帮助我们更高效地设计和调试硬件电路。希望本教程能帮助你更好地理解和使用 STM32 的 GPIO 模式。

GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化 GPIO


------## 总结在 STM32 开发中,正确配置 GPIO 引脚的输入输出模式是非常重要的。不同的模式适用于不同的硬件需求和应用场景,掌握这些模式的使用能够帮助我们更高效地设计和调试硬件电路。希望本教程能帮助你更好地理解和使用 STM32 的 GPIO 模式。通过实际编写代码并运行,可以更好地掌握这些模式的应用。

http://www.ppmy.cn/devtools/167608.html

相关文章

拥有一台云服务器能做什么呢?

拥有一台云服务器就像拥有了一台24小时在线的远程电脑,你可以通过互联网随时随地管理它。它的用途非常广泛,无论是个人学习、开发测试,还是企业级应用部署,都能发挥重要作用。以下是常见的应用场景,按需求分类整理&…

SwanLab私有化部署教程!

SwanLab私有化部署版面向所有个人用户免费开放,部署方案基于Docker Compose,能非常轻松地部署在 Windows/MacOS/Linux 机器上,希望能成为各位训练师的独门炼丹利器。 下面我们会介绍一下如何安装私有化部署版。 1. SwanLab介绍 SwanLab 是…

Unity 封装一个依赖于MonoBehaviour的计时器(上) 基本功能

灵感来自下面这本书的协程部分,因此我就自己尝试写了一个 我的新书Unity3D游戏开发(第3版) | 雨松MOMO程序研究院 如果你不知道什么是协程:unity保姆级教程之协同程序_unity协同-CSDN博客 一句话概括:协程就是单线程的异步操作,其作用于Unity的主线程 1…

如何在github上参与开源项目

1. 创建 GitHub 账号 如果你还没有 GitHub 账号,首先需要注册一个: 访问 GitHub 官网。 点击右上角的“Sign up”按钮,填写注册信息并完成注册。 2. 找到感兴趣的项目 GitHub 上有成千上万的开源项目,你可以通过以下方式找到感兴趣…

prototype和proto的区别

在 JavaScript 中,prototype 和 __proto__ 都与原型链和继承机制有关,但它们的含义和作用是不同的。下面来详细讲解它们的区别。 一、prototype 和 proto 的区别 特性prototype__proto__作用构造函数的原型对象实例对象的隐式原型类型对象对象访问方式构…

数据库管理-第302期 国产类RAC架构数据库网络连接方式(20250314)

数据库管理302期 2025-03-14 数据库管理-第302期 国产类RAC架构数据库网络连接方式(20250314)1 Oracle RAC2 DMDSC3 YAC4 KES RAC总结 数据库管理-第302期 国产类RAC架构数据库网络连接方式(20250314) 作者:胖头鱼的鱼…

封装WPF中转换器常用用法封装

代码经常遇到类型A转换到类型C&#xff0c;但是已经写好类型A转换到类型B、类型B转换类型C。往往遇到这种情况&#xff0c;通常会重新写过一个转换器来进行满足需求。以下是解决该痛点。 /// <summary> /// 转换器组转换器 /// </summary> [ContentProperty(nameo…

【前端实战】一文掌握响应式布局 - 多设备完美适配方案详解

一、前言 在当今互联网时代&#xff0c;用户通过各种设备访问网站已成为常态。如何让网站在不同设备上都能完美展现&#xff1f;本文将通过一个实际案例&#xff0c;详细讲解响应式布局的实现方案。 二、项目效果展示 PC 移动端 平板(ipad Pro) 三、核心实现方案 1. 基础设置…