STM32——GPIO介绍
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
相关文章:
STM32——GPIO介绍
GPIO(General-Purpose IO ports,通用输入/输出接口)模块是STM32的外设接口的核心部分,用于感知外界信号(输入模式)和控制外部设备(输出模式),支持多种工作模式和配置选项。 1、GPIO 基本结构 STM32F407 的每个 GPIO 引脚均可独立配置,主要特性包括: 9 组 GPIO 端口…...
二、docker 存储
docker四种方式:默认、volumes数据卷、bind mounts挂载、tmpfs mount(仅在linux环境中提供),其中volumes、bind mounts两种实现持久化容器数据; 默认:数据保存在运行的容器中,容器删除后,数据也随之删除&am…...
Photo Works在线图片编辑器:一键修复老照片,轻松焕新记忆
★【概况介绍】 今天突然收到我的朋友电脑出故障了,截图给我,我一看就知道这个是缺少必要的组件引起的故障。结合这个问题,我来谈谈自己的解决思路和方法,希望能够帮助到大家。帮助大家是我最开心的事情。以前只是帮朋友解决问题,没有记录下来,刚刚接触到这个平台,刚好可…...
SQLiteStudio:一款免费开源跨平台的SQLite管理工具
目录 1.简介 2.下载与安装 3.实现分析 4.总结 1.简介 SQLiteStudio 是一款专门用于管理 SQLite 数据库的图形化工具,由波兰开发者开发并维护。由于 SQLite 以其轻量级、零配置、嵌入式等特性被广泛应用于各种小型项目、移动应用和桌面应用中,而 SQLi…...
Markdown 语法入门指南(VSCode 版)
此博客为一份详细的 Markdown 语法入门指南,专门针对在 VSCode 上使用 Markdown 的零基础用户。这份指南将包括 Markdown 的基础语法、在 VSCode 中的安装与使用方式、常见问题及注意事项。 Markdown 是一种轻量级标记语言,使用纯文本符号来标记格式&am…...
PostgreSQL学习笔记:PostgreSQL vs MySQL
PostgreSQL 和 MySQL 都是广泛使用的关系型数据库管理系统,它们有以下一些对比: 一、功能特性 1. 数据类型支持 PostgreSQL:支持丰富的数据类型,包括数组、JSON、JSONB、范围类型、几何类型等。对于复杂数据结构的存储和处理非…...
Vite为什么选用Rollup打包?
Vite 在生产阶段使用 Rollup 打包,但这不是唯一选择。它的设计背后有明确的权衡和考量,同时开发者也可以选择其他替代方案。 一、为什么 Vite 默认使用 Rollup? 1. Rollup 的核心优势 • Tree-shaking:Rollup 的静态分析能力极强&…...
内存检测工具——Qt Creator
前言 检测内存错误的工具,有很多个,我今天粗浅的学了一下可在Qt上使用的工具们: Dr.Memory 工具之前我曾在关注的博主上看到相关的博客:C(Qt)软件调试---内存调试器Dr.Memory(21)_dr. memory-CSDN博客 今…...
2.4 基于Vitest的单元测试基础设施搭建
文章目录 1. 现代单元测试体系解析测试金字塔演进Vitest核心定位2. 基础设施架构设计整体架构图3. 环境配置全流程3.1 基础环境搭建3.2 配置文件`vitest.config.ts`3.3 测试环境初始化4. 测试用例编写规范4.1 基础测试示例4.2 Vue组件测试4.3 异步逻辑测试5. Mock策略深度优化5…...
如何在 React 中使用 CSS-in-JS?
在 React 中使用 CSS-in-JS CSS-in-JS 是一种将 CSS 样式与 JavaScript 代码结合在一起的技术,特别流行于 React 应用中。它允许开发者在组件内部定义样式,使得样式与组件逻辑紧密结合,从而提高了可维护性和可读性。本文将深入探讨在 React …...
⭐算法OJ⭐链表排序【归并排序】(C++/JavaScript 实现)
文章目录 148. Sort List解题思路归并排序的基本思想归并排序的步骤 实现实现步骤C 实现JavaScript 实现 复杂度总结 148. Sort List Given the head of a linked list, return the list after sorting it in ascending order. 解题思路 链表排序问题可以通过多种方法解决&am…...
SegMAN模型详解及代码复现
SegMAN模型概述 模型背景 在深入探讨SegMAN模型之前,我们需要了解其研究背景。在SegMAN出现之前,计算机视觉领域的研究主要集中在以下几个方面: 手工制作方法,如SIFT基于卷积神经网络(CNN)的方法,如STN和PTN对平移、…...
Manus AI:多语言手写识别的技术革命与未来图景
摘要:在全球化浪潮下,跨语言沟通的需求日益迫切,但手写文字的多样性却成为技术突破的难点。Manus AI凭借其多语言手写识别技术,将潦草笔迹转化为精准数字文本,覆盖全球超百种语言。本文从技术原理、应用场景、行业价值…...
保姆级别使用Python实现“机器学习“案例
从安装到运行手把手教学,保证不迷路~ 🌈 零基础友好版教程 📦 第一步:安装必备工具包 别慌!这里有两种安装方式,选你顺手的 方式1:用代码自动安装(推荐新手) 直接在你的Python代码最前面加这几行,运行时会自动安装: # 把这坨代码贴在文件最前面! import sys im…...
K8s 1.27.1 实战系列(九)Volume
一、Volume介绍 Volume 指的是存储卷,包含可被Pod中容器访问的数据目录。容器中的文件在磁盘上是临时存放的,当容器崩溃时文件会丢失,同时无法在多个Pod中共享文件,通过使用存储卷可以解决这两个问题。 1、Volume 的核心作用 数据持久化与生命周期管理 Volume 的核心目标…...
Stable Diffusion游戏底模推荐
一、基础通用型底模 SDXLbase 📚 官方原版底模,支持1024x1024高清出图,适用于各类游戏场景和角色的基础生成,建议作为微调训练的基准模型。 来源: 相关搜索结果 写实风格搭配推荐 🎨 搭配 9realisticSDXL 或 麻袋real…...
GNU Binutils 全工具指南:从编译到逆向的完整生态
1. GNU Binutils 全工具指南:从编译到逆向的完整生态 1. GNU Binutils 全工具指南:从编译到逆向的完整生态 1.1. 引言1.2. 工具分类速查表1.3. 核心工具详解 1.3.1. 编译与汇编工具 1.3.1.1. as(汇编器)1.3.1.2. gcc(…...
nginx 打造高性能 API 网关(Building a High-Performance API Gateway with Nginx)
Nginx 打造高性能 API 网关 引言: 在现代微服务架构中,API 网关扮演着至关重要的角色。它不仅负责统一路由请求,还承担着身份验证、负载均衡、流量控制、日志记录等多重任务。而在众多的 API 网关实现方案中,Nginx 作为一个高性能…...
理解字符流和字节流,节点流和处理流、缓冲流、InputStreamReader、BufferInputStream、BufferReader...
DAY10.2 Java核心基础 IO流 字符流和字节流 字符流和字节流在每次处理数据的单位不同,一个是字符,一个是字节 如果复制文件类型是文本类型,字节流字符流都可以 如果复制的文件类型是非文本类型,则只能使用字节流,使…...
Securing a Linux server
Is your Linux server safe from hackers? Can they get hacked? Freak out about getting your server compromised and getting your data leaked? Take a look at some of the tips you can take to secure and protect your Linux server. 1. SSH security SSH is l…...
DBeaver安装教程+连接TDengine数据库
为TDengine安装的DBeaver教程 安装 23.1.1 版本以上的DBeaver 因为官方文档说这个版本之上的DBeaver才支持TDengine内嵌前往DBeaver 官方文档进行版本下载滑到链接最下面点击进入 点击download,进入选择下载版本 等待下载成功即可双击自行安装 打开数据库连接TDen…...
postgreSQL window function高级用法
正常使用:相当于对每个row做一次子查询 SELECT depname, empno, salary, avg(salary) OVER (PARTITION BY depname) FROM empsalary;order by 区别window frame and partition 没有order by, window function是对整个partition起作用, part…...
【三维重建】Proc-GS:使用3DGS的程序性城市建筑生成
标题:《Proc-GS: Procedural Building Generation for City Assembly with 3D Gaussians》 项目:https://city-super.github.io/procgs/ 来源:香港中文大学;上海人工智能实验室 等 文章目录 摘要一、 程序代码定义 (Procedural Co…...
商业智能BI的未来,如何看待AI+BI这种模式?
昨天在和一位朋友线上聊天的时候,提了一个问题,你是如何看待AI(人工智能)BI(商业智能)这种模式和方向的,我大概来说一下我个人的看法。 以我在商业智能BI项目中接触到的行业和企业,…...
【计算机视觉】手势识别
手势识别是计算机视觉领域中的重要方向,通过对摄像机采集的手部相关的图像序列进行分析处理,进而识别其中的手势,手势被识别后用户就可以通过手势来控制设备或者与设备交互。完整的手势识别一般有手的检测和姿态估计、手部跟踪和手势识别等。…...
装饰器模式的C++实现示例
核心思想 装饰器设计模式是一种结构型设计模式,它允许动态地为对象添加额外的行为或职责,而无需修改其原始类。装饰器模式通过创建一个装饰器类来包装原始对象,并在保持原始对象接口一致性的前提下,扩展其功能。 装饰器模式的核…...
Python+DeepSeek:开启AI编程新次元——从自动化到智能创造的实战指南
文章核心价值 技术热点:结合全球最流行的编程语言与国产顶尖AI模型实用场景:覆盖代码开发/数据分析/办公自动化等高频需求流量密码:揭秘大模型在编程中的创造性应用目录结构 环境搭建:5分钟快速接入DeepSeek场景一:AI辅助代码开发(智能补全+调试)场景二:数据分析超级助…...
25.3.12.Linux内核如何和设备树协同工作的?
1.编写设备树 cd arch/riscv/boot/dts/ 再cd到厂商,例如下述内容。 2.编译设备树(dts->dtb)通过dtc命令来转换 3.解析设备树 例如上述内容,都是对设备树的解析。 这里重点说一下内核对设备树的处理吧,因为这个内容是设备树的重点了。 从源代码文件 dts 文件开始...
python中路径操作简介
一、./的基础含义 当前目录 ./表示当前工作目录(Current Working Directory, CWD),即Python脚本运行时所在的目录。例如: open(./data.txt, r) # 打开当前目录下的data.txt文件 作用:避免直接写文件名可能引发的路…...
Flutter 基础组件 Text 详解
目录 1. 引言 2. 基本使用 3. 自定义样式 4. 文本对齐与溢出控制 5. 外边距 5.1 使用 Container 包裹 5.2 使用 Padding 组件 5.3 在 Row/Column 中使用 5.4 动态边距调整 5.5 关键区别说明 5.6 设置 margin 无效 6. 结论 相关推荐 1. 引言 Text 组件是 Flutter 中…...
