GPIO口输入

GPIO(General Purpose Input/Output,通用输入输出)是 STM32 芯片中最基础且常用的外设,可配置为输入、输出等多种模式。

一、GPIO 输入模式分类

STM32F10x 系列的 GPIO 输入模式主要有以下 4 种:

模式类型 特点说明 应用场景
浮空输入(Floating Input) 引脚电平由外部电路决定,无内部上拉 / 下拉电阻,高电平时易受干扰 外部有上拉 / 下拉电路的场景(如按键外接上拉电阻)
上拉输入(Pull-Up Input) 内部上拉电阻使能,无外部输入时引脚默认高电平 按键检测(无外接上拉时)、传感器输出(默认高电平)
下拉输入(Pull-Down Input) 内部下拉电阻使能,无外部输入时引脚默认低电平 传感器输出(默认低电平)、外部低电平触发的场景
模拟输入(Analog Input) 引脚用于 ADC 采样,信号直接进入模拟模块,无数字电平检测(禁用上拉 / 下拉) ADC 模数转换、模拟传感器输入

二、GPIO 输入配置步骤(以 STM32F10x 固件库为例)

配置 GPIO 输入模式需遵循 ****"时钟使能→模式配置→上拉 / 下拉配置"****的流程,以下是具体代码实现(以 PA0 为例,配置为上拉输入):

cpp 复制代码
#include "stm32f10x.h"

void GPIO_Input_Config(void)
{
    
    // 1. 使能GPIOA的时钟(GPIO外设时钟在APB2总线上)
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    GPIO_InitTypeDef GPIO_InitStructure;
   
    // 2. 配置GPIO模式
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;    // 模式:上拉输入(IPU);浮空输入为GPIO_Mode_IN_FLOATING,下拉为GPIO_Mode_IPD,模拟为GPIO_Mode_AIN
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;         // 选择PA0引脚
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 输入模式下,速度配置不影响功能(可任意选)
    GPIO_Init(GPIOA, &GPIO_InitStructure);           // 应用配置到GPIOA
}

三、输入模式的读写操作

配置完成后,可通过库函数读取 GPIO 输入电平:

cpp 复制代码
uint8_t Read_GPIO_Input(void)
{
    // 读取PA0的输入电平,返回1(高电平)或0(低电平)
    return GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);
}

四、关键注意事项

  1. 引脚复用冲突:若 GPIO 引脚被复用为其他外设(如 USART、SPI),需确保模式配置与外设需求一致,避免功能冲突。
  2. 抗干扰设计:浮空输入易受电磁干扰,若外部无上下拉电路,建议优先选择上拉 / 下拉输入;模拟输入需避免数字信号干扰,保证采样精度。
  3. 硬件电路匹配:上拉输入的外部电路若为低电平驱动(如 NPN 三极管集电极输出),需确认电平匹配(STM32 的 IO 高电平需≥2V,低电平≤0.8V)。

五、避免混淆

这里给出 F10x 系列 GPIO 的完整模式分类,清晰划分输入 / 输出边界:

1. 输入模式(4 种)
  • 浮空输入(GPIO_Mode_IN_FLOATING)
  • 上拉输入(GPIO_Mode_IPU)
  • 下拉输入(GPIO_Mode_IPD)
  • 模拟输入(GPIO_Mode_AIN)
2. 输出模式(2 种核心类型)
  • 推挽输出(GPIO_Mode_Out_PP)
  • 开漏输出(GPIO_Mode_Out_OD)
3. 复用功能模式(额外补充,用于外设功能)

当 GPIO 引脚复用为 USART、SPI 等外设时,也分为复用推挽输出(GPIO_Mode_AF_PP)和复用开漏输出(GPIO_Mode_AF_OD),本质还是 "输出模式 + 外设复用",并非输入模式。

相关推荐
国科安芯3 分钟前
火箭传感器控制单元的抗辐照MCU选型与环境适应性验证
单片机·嵌入式硬件·架构·risc-v·安全性测试
-Springer-37 分钟前
STM32 学习 —— 个人学习笔记5(EXTI 外部中断 & 对射式红外传感器及旋转编码器计数)
笔记·stm32·学习
LS_learner1 小时前
树莓派(ARM64 架构)Ubuntu 24.04 (Noble) 系统 `apt update` 报错解决方案
嵌入式硬件
来自晴朗的明天2 小时前
16、电压跟随器(缓冲器)电路
单片机·嵌入式硬件·硬件工程
钰珠AIOT2 小时前
在同一块电路板上同时存在 0805 0603 不同的封装有什么利弊?
嵌入式硬件
代码游侠2 小时前
复习——Linux设备驱动开发笔记
linux·arm开发·驱动开发·笔记·嵌入式硬件·架构
代码游侠13 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
xuxg200515 小时前
4G 模组 AT 命令解析框架课程正式发布
stm32·嵌入式·at命令解析框架
CODECOLLECT16 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件