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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/983524.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

字节码是由什么组成的?

Java字节码是Java程序编译后的中间产物&#xff0c;它是一种二进制格式的代码&#xff0c;可以在Java虚拟机&#xff08;JVM&#xff09;上运行。理解字节码的组成有助于我们更好地理解Java程序的运行机制。 1. Java字节码是什么&#xff1f; 定义 Java字节码是Java源代码经过…

链表算法题目

1.两数相加 两个非空链表&#xff0c;分别表示两个整数&#xff0c;只不过是反着存储的&#xff0c;即先存储低位在存储高位。要求计算这两个链表所表示数的和&#xff0c;然后再以相同的表示方式将结果表示出来。如示例一&#xff1a;两个数分别是342和465&#xff0c;和为807…

blender学习25.3.8

【04-进阶篇】Blender材质及灯光Cycle渲染&后期_哔哩哔哩_bilibili 注意的问题 这一节有一个大重点就是你得打开显卡的渲染&#xff0c;否则cpu直接跑满然后渲染的还十分慢 在这里你要打开GPU计算&#xff0c;但是这还不够 左上角编辑&#xff0c;偏好设置&#xff0c;系…

【godot4.4】布局函数库Layouts

概述 为了方便编写一些自定义容器和控件、节点时方便元素布局&#xff0c;所以编写了一套布局的求取函数&#xff0c;统一放置在一个名为Layouts的静态函数库中。 本文介绍我自定义的一些布局计算和实现以及函数编写的思路&#xff0c;并提供完整的函数库代码&#xff08;持续…

Windows下配置Conda环境路径

问题描述&#xff1a; 安装好Conda之后&#xff0c;创建好自己的虚拟环境&#xff0c;同时下载并安装了Pycharm&#xff0c;但在Pycharm中找不到自己使用Conda创建好的虚拟环境。显示“Conda executable is not found” 解决办法&#xff08;依次尝试以下&#xff09; 起初怀…

OpenHarmony子系统开发编译构建指导

OpenHarmony子系统开发编译构建指导 概述 OpenHarmony编译子系统是以GN和Ninja构建为基座&#xff0c;对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能扩展的系统&#xff0c;该系统提供以下基本功能&#xff1a; 以部件为最小粒度拼装产品和独…

leetcode日记(80)复原IP地址

只能说之前动态规划做多了&#xff0c;看到就想到动态规划&#xff0c;然后想想其实完全不需要&#xff0c;回溯法就行了。 一开始用了很多莫名其妙的代码&#xff0c;写的很复杂……&#xff08;主要因为最后不能加‘.’&#xff09;其实想想只要最后加入vector时去掉最后一个…

LINUX网络基础 [五] - HTTP协议

目录 HTTP协议 预备知识 认识 URL 认识 urlencode 和 urldecode HTTP协议格式 HTTP请求协议格式 HTTP响应协议格式 HTTP的方法 HTTP的状态码 ​编辑HTTP常见Header HTTP实现代码 HttpServer.hpp HttpServer.cpp Socket.hpp log.hpp Makefile Web根目录 H…

【A2DP】SBC 编解码器互操作性要求详解

目录 一、SBC编解码器互操作性概述 二、编解码器特定信息元素(Codec Specific Information Elements) 2.1 采样频率(Sampling Frequency) 2.2 声道模式(Channel Mode) 2.3 块长度(Block Length) 2.4 子带数量(Subbands) 2.5 分配方法(Allocation Method) 2…

电脑内存智能监控清理,优化性能的实用软件

软件介绍 Memory cleaner是一款内存清理软件。功能很强&#xff0c;效果很不错。 Memory cleaner会在内存用量超出80%时&#xff0c;自动执行“裁剪进程工作集”“清理系统缓存”以及“用全部可能的方法清理内存”等操作&#xff0c;以此来优化电脑性能。 同时&#xff0c;我…

基于multisim的花样彩灯循环控制电路设计与仿真

1 课程设计的任务与要求 &#xff08;一&#xff09;、设计内容&#xff1a; 设计一个8路移存型彩灯控制器&#xff0c;基本要求&#xff1a; 1. 8路彩灯能演示至少三种花型&#xff08;花型自拟&#xff09;&#xff1b; 2. 彩灯用发光二极管LED模拟&#xff1b; 3. 选做…

Axure常用变量及使用方法详解

点击下载《Axure常用变量及使用方法详解.pdf》 摘要 Axure RP 作为一款领先的前端原型设计工具&#xff0c;提供了全面的 变量 和 函数 系统&#xff0c;以支持复杂的交互设计和动态内容展示。本文将从专业角度详细解析 Axure 中的 全局变量、中继器数据集变量/函数、元件变量…

MySql的安装及数据库的基本操作命令

1.MySQL的安装 1.1进入MySQL官方网站 1.2点击下载 1.3下拉选择MySQL社区版 1.4选择你需要下载的版本及其安装的系统和下载方式 直接安装以及压缩包 建议选择8.4.4LST LST表明此版本为长期支持版 新手建议选择红框勾选的安装方式 1.5 安装包下载完毕之后点击安装 2.数据库…

树莓派5首次开机保姆级教程(无显示器通过VNC连接树莓派桌面)

第一次开机详细步骤 步骤一&#xff1a;树莓派系统烧录1 搜索打开烧录软件“Raspberry Pi Imager”2 选择合适的设备、系统、SD卡3 烧录配置选项 步骤二&#xff1a;SSH远程树莓派1 树莓派插电2 网络连接&#xff08;有线或无线&#xff09;3 确定树莓派IP地址 步骤三&#xff…

分布式锁—7.Curator的分布式锁

大纲 1.Curator的可重入锁的源码 2.Curator的非可重入锁的源码 3.Curator的可重入读写锁的源码 4.Curator的MultiLock源码 5.Curator的Semaphore源码 1.Curator的可重入锁的源码 (1)InterProcessMutex获取分布式锁 (2)InterProcessMutex的初始化 (3)InterProcessMutex.…

电脑睡眠智能管控:定时、依状态灵活调整,多模式随心选

软件介绍 今天要给大家介绍一款十分实用的软件——DontSleep&#xff0c;从名字就能看出&#xff0c;它的核心功能之一是阻止电脑进入睡眠状态&#xff0c;不过它的能耐可远不止于此&#xff0c;还具备强大的定时以及根据电脑实时状况灵活调整的功能。 这款软件采用绿色单文件…

装饰器模式--RequestWrapper、请求流request无法被重复读取

目录 前言一、场景二、原因分析三、解决四、更多 前言 曾经遇见这么一段代码&#xff0c;能看出来是把request又重新包装了一下&#xff0c;核心信息都不会改变 后面了解到这叫 装饰器模式&#xff08;Decorator Pattern&#xff09; &#xff1a;也称为包装模式(Wrapper Pat…

C++20 格式化库:强大的字符串格式化工具

文章目录 格式化语法常见用法1. 填充和对齐2. 数值格式化3. 进制格式化4. 自定义类型 示例代码注意事项 C20 的格式化库是一个强大的工具&#xff0c;用于处理字符串的格式化操作。它提供了类似于 Python 中 str.format() 的功能&#xff0c;但语法和用法更符合 C 的风格。以下…

Linux基础--文件权限+软件包管理+管道符

目录 基础权限 更改文件权限 使用命令:chmod 更改文件属主和数组 使用命令: chown 权限掩码 使用命令:umask 高级权限 软件包管理 使用命令: rpm 使用命令: yum 管道符&#xff0c;重定向 基础权限 文件基础权限表 符号含义数字r读权限4w写权限2x执行权限1 更改文件…

css画出带圆角平行四边形效果

使用css画出平行四边形效果如下图 HTML代码 <div class"badge"><span>营业中</span> </div> 关键代码&#xff1a; transform: skewX(-15deg); /* 让元素倾斜&#xff0c;形成平行四边形的视觉效果 */ 如果倾斜的元素里面需要放文字&…