STM32——GPIO介绍

news/2025/3/20 2:21:56/

        GPIO(General-Purpose IO ports,通用输入/输出接口)模块是STM32的外设接口的核心部分,用于感知外界信号(输入模式)和控制外部设备(输出模式),支持多种工作模式和配置选项。

1、GPIO 基本结构

        STM32F407 的每个 GPIO 引脚均可独立配置,主要特性包括:

  • 9 组 GPIO 端口(GPIOA ~ GPIOI),每组最多 16 个引脚(PIN0 ~ PIN15)。

  •  每个引脚可配置为输入、输出、复用功能或模拟模式。
  • 支持多种驱动模式(推挽、开漏)、速度等级和上下拉电阻。
  • 支持外部中断 / 事件触发。

        I/O 端口的基本结构 :

2、GPIO 工作模式

         每个引脚可通过 GPIOx_MODER 寄存器配置为以下模式:

/** * @brief  GPIO Configuration Mode enumeration */   
typedef enum
{ GPIO_Mode_IN   = 0x00, /*!< GPIO Input Mode */GPIO_Mode_OUT  = 0x01, /*!< GPIO Output Mode */GPIO_Mode_AF   = 0x02, /*!< GPIO Alternate function Mode */GPIO_Mode_AN   = 0x03  /*!< GPIO Analog Mode */
}GPIOMode_TypeDef;
#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_IN)  || ((MODE) == GPIO_Mode_OUT) || \((MODE) == GPIO_Mode_AF)|| ((MODE) == GPIO_Mode_AN))

2.1、输入模式

2.1.1、浮空输入(Input Floating)

        引脚电平由外部电路决定,无内部上拉 / 下拉。上拉 / 下拉电阻为断开状态,施密特触发器打开,输出被禁止。输入浮空模式下,IO 口的电平完全是由外部电路决定的。如果 IO 引脚没有连接其他的设备,那么检测其输入电平是不确定的。

        浮空输入的特点:

  • 高阻态:引脚内部无上拉/下拉电阻,电平完全由外部电路决定。
  • 灵敏度高:易受外部信号或噪声影响,需确保外部电路有明确的驱动源。 
  • 低功耗:无内部电阻电流路径,适合低功耗场景(需外部电路稳定)。

        该模式典型应用场景:

1、外部中断(EXIT)

  • 场景:连接按键、传感器等需要触发中断的设备。
  • 原因:若外部电路已包含明确的上拉/下拉电阻(如按键电路),使用浮空输入可避免内部电阻的干扰。

2、 通信接口(如 IIC、UART)

  • 场景:IIC 的 SDA / SCL 线、UART 的 RX 引脚。
  • 原因:IIC 总线需外接上拉电阻,浮空输入避免内部电阻冲突;UART 接收端有外部设备驱动电平。

3、多设备总线(如 CAN、SPI)

  • 场景:总线型通信(如 CAN 总线、SPI 从设备 MISO)
  • 原因:总线电平由外部收发器或多主机设备控制,浮空输入确保无内部干扰。 

4、高速数字信号采样

  • 场景:高频脉冲计数(如编码器信号、PWM 输入捕获)。
  • 原因:浮空输入响应速度快,适合高速信号采集(需外部信号驱动能力强)。 

5、模拟信号预处理

  • 场景:连接比较器、运放等模拟电路的输出端。
  • 原因:避免内部电阻影响模拟电路输出的高精度电平。 

2.1.2、上拉输入(Input Pull-up)

        内部上拉电阻(约40kΩ)连接到 VDD。 上拉电阻导通,施密特触发器打开,输出被禁止。在需要外部上拉电阻的时候,可以使用内部上拉电阻,这样就可以节省一个外部电阻,但是内部上拉电阻的阻值较大,不适合做电流型驱动。

        上拉输入的特点:

  • 默认高电平:当引脚无外部驱动时,内部上拉电阻将电平拉至 VDD(3.3V)。
  • 抗干扰能力强:避免引脚悬空导致的电平漂移,较少噪声影响。
  • 简化外部电路:省去外部上拉电阻,节省 PCB 空间和成本。 

        该模式典型应用场景:

1、按键/开关检测

  • 场景:按键一端接地(低电平有效),按下时拉低引脚电平。
  • 原理:未按下时,内部上拉电阻使引脚保持高电平;按下时接地,电平变为低。 

 2、数字信号输入(无主动驱动高电平)

  • 场景:连接开漏输出的传感器(如某些红外模块)。
  • 原理:传感器只能拉低电平,需上拉电阻提供默认高电平。

3、总线空闲状态维持

  • 场景:单线通信协议(如 1-Wire)或自定义串行总线。
  • 原理:总线空闲时由上拉电阻维持高电平,设备通过拉低电平发送数据。 

4、电平转换接口

  • 场景:连接 5V 设备(通过电平转换芯片)。
  • 原理:若转换芯片输出为开漏模式,需上拉电阻提供 3.3V 高电平。 

5、防止未初始化引脚悬空

  • 场景:未使用的 GPIO 引脚。
  • 原理:配置为上拉输入,避免悬空引入噪声或意外电流。 

2.1.3、下拉输入(Input Pull-down)

        内部下拉电阻(约40kΩ)连接到 GND。 下拉电阻导通,施密特触发器打开,输出被禁止。在需要外部下拉电阻的时候,可以使用内部下拉电阻,这样也就可以节省一个外部电阻,但是内部下拉电阻的阻值较大,所以不适合做电流型驱动。

        下拉输入的特点:

  • 默认低电平:当引脚无外部驱动时,内部下拉电阻将电平拉至 GND(0 V)。
  • 抗干扰能力强:避免引脚悬空导致的高电平误触发。
  • 简化外部电路:省去外部下拉电阻,节省 PCB 空间和成本。

        该模式典型应用场景:

1、高电平有效信号检测

  • 场景:检测传感器或模块的高电平输出(如红外避障传感器、PIR 人体感应模块)。
  • 原理:未触发时引脚电平被下拉至低电平;触发时外部设备输出高电平。 

2、总线型通信的从设备选择

  • 场景:SPI 从设备的片选(CS)信号。
  • 原理:主设备未选中从设备时,片选线保持低电平(下拉);选中时主设备拉高电平。 

3、数字信号防抖动

  • 场景:连接机械开关或继电器触点。
  • 原理:下拉电阻确保开关断开时引脚为低电平,减少触点抖动引入的噪声。 

4、电平转换接口

  • 场景:连接 5V 设备的开漏输出(如某些老式传感器)。
  • 原理:外部设备拉高电平时,通过电平转换芯片输出 3.3V 高电平;未激活时下拉至低电平。 

5、未使用引脚的稳定处理

  • 场景:未连接的 GPIO 引脚。
  • 原理:配置为下拉输入,避免悬空引脚引入噪声或意外功耗。 

2.1.4、模拟输入(Analog Mode)

        上下拉电阻断开,施密特触发器关闭,双 MOS 管也关闭。该模式用于 ADC 采集或 DAC 输出,或者低功耗下省电。

 

        模拟输入的特点:

  •  禁用数字功能:引脚的数字输入/输出电路被断开,仅保留模拟信号路径。
  • 高精度低噪声:避免数字电路干扰,提高 ADC/DAC 的采样精度。
  • 无上拉/下拉:内部电阻断开,信号完全由外部模拟源驱动。

        该模式典型应用场景:

1、传感器信号采集

  • 场景:连接模拟输出传感器(如温度、压力、光照、湿度传感器)。
  • 示例: 

        (1)温度传感器(如 LM35、NTC 热敏电阻):输出电压随温度变化。

        (2)光敏电阻:电阻值随光照强度变化&#x


http://www.ppmy.cn/news/1580479.html

相关文章

WordPress the_category与single_cat_title的区别

在wordpress网站主题开发用常会用到调用分类目录的名称&#xff0c;the_category与single_cat_title都可以调用出分类目录的名称。 <?php single_cat_title(); ?> <?php the_category(); ?>但是&#xff0c;不少人搞不清楚二者有什么区别&#xff0c;其实很简…

Python使用总结之Flask构建文件服务器,通过网络地址访问本地文件

Python使用总结之Flask构建文件服务器,通过网络地址访问本地文件 在 Web 开发中,静态文件(如图片、CSS、JavaScript)的管理是基础且重要的环节。Flask 提供的 send_from_directory 函数为开发者提供了灵活的文件服务解决方案。本文将详细解析其原理、用法及最佳实践。 一…

Python接口自动化浅析unittest单元测试原理

这篇文章主要介绍了Python接口自动化浅析unittest单元测试原理,文中描述了单元测试&#xff0c;unittest模块特性、大致流程、源码及实战例子这几个模块&#xff0c;有需要的朋友可以借鉴参考下 以下主要介绍unittest特性、运行流程及实际案例。 一、单元测试三连问 1、什么是…

Java线性表(顺序表)

顺序表作为线性表的一种&#xff0c;首先它是有顺序的连续的&#xff0c;为什么这么说呢&#xff1f;因为它是通过数组来存储数据的&#xff0c;数组的特性就是它的特性。 顺序表优缺点 1.顺序表不适合做插入&#xff0c;删除数据&#xff0c;时间复杂度为O&#xff08;n&…

python脚本实现服务器内存和cpu使用监控,并记录日志,可以设置阈值和采样频率

Python 脚本&#xff0c;实现以下功能&#xff1a; 按日期自动生成日志文件&#xff08;例如 cpu_mem_20231001.csv&#xff09;当 CPU 或内存超过阈值时触发记录独立记录报警事件&#xff08;保存到 alert.log&#xff09;支持自定义阈值和监控间隔 脚本代码 import psutil …

现代密码学 | 具有数字签名功能的安全方案

1.案例背景 1.1冒用签名触发信任危机&#xff0c;360安全大脑率先截杀解除警报 2020年8月&#xff0c;360安全大脑独家发现冒用数字签名的网络攻击再度活跃&#xff0c;且继此前360安全大脑披露过的Go Daddy、Starfield Secure、赛门铁克、Verisign和DigiCert等国际知名CA证书…

每天五分钟深度学习框架pytorch:基于pytorch搭建循环神经网络RNN

本文重点 我们前面介绍了循环神经网络RNN,主要分析了它的维度信息,其实它的维度信息是最重要的,一旦我们把维度弄清楚了,一起就很简单了,本文我们正式的来学习一下,如何使用pytorch搭建循环神经网络RNN。 RNN的搭建 在pytorch中我们使用nn.RNN()就可以创建出RNN神经网络…

新安装的cursor安装不了插件

我安装的cursor版本0.47.5 直接说解决办法 找到安装路径cursor\resources\app下的product.json 修改https://marketplace.cursorapi.com为https://marketplace.visualstudio.com