【深入浅出STM32(1)】 GPIO 深度解析:引脚特性、工作模式、速度选型及上下拉电阻详解

GPIO 深度解析:引脚特性、工作模式、速度选型及上下拉电阻详解

    • 一、GPIO概述
    • 二、GPIO的工作模式
    • 1、简述
    • (1)4种输入模式
    • (2)4种输出模式
    • (3)4种最大输出速度
    • 2、引脚速度
    • (1)输出速度设置及其意义
    • (2)输出速度与驱动电路的关系
    • 3、配置建议
    • 4、详细分析
    • (1)对 I/O 端口进行编程作为输出时
    • (2)对 I/O 端口进行编程作为输入时
    • (3)对 I/O 端口进行编程作为复用功能时
    • (4)对 I/O 端口进行编程作为模拟配置时
    • 三、上下拉电阻
    • 1、上拉电阻
    • 2、下拉电阻

一、GPIO概述

GPIO(英语:General-purpose input/output),即通用I/O(输入/输出)端口,是STM32可控制的引脚。STM32芯片的GPIO引脚与外部设备连接起来,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。
在这里插入图片描述

STM32F407有8组IO。分别为GPIOA~GPIOH,除了GPIOH只有两个IO引脚,其余每组IO有16根引脚。
GPIO的复用:引脚复用是指将单个引脚配置为多个功能的能力。在 STM32 中,每个引脚都可以配置为多个不同的功能,如GPIO、定时器、UART、SPI等。这样一来,通过配置引脚复用功能,可以实现多种硬件功能的连接和实现,提高了芯片的灵活性和可扩展性。引脚默认为IO口。
GPIO的电平:引脚电平对芯片的某个引脚进行高低电平的输出,以及可以去检测某个引脚的电平状态。一般电平采用都是TTL电平信号,TTL电平信号规定:+5V等价于逻辑“1”,0V等价于逻辑“0”。
电平其实有一个电平范围:>2V就表示高电平,<0.8V就表示低电平。

二、GPIO的工作模式

1、简述

(1)4种输入模式

  • 浮空输入(即不连接内部上下拉电阻)
  • 上拉输入(连接上拉电阻)
  • 下拉输入(连接下拉电阻)
  • 模拟输入(用于检测模拟信号的输入)

(2)4种输出模式

  • 开漏输出(带上拉或者下拉)
  • 复用开漏输出(带上拉或者下拉)
  • 推挽输出(带上拉或者下拉)
  • 复用推挽输出(带上拉或者下拉)

(3)4种最大输出速度

  • 2MHZ (低速)
  • 25MHZ (中速)
  • 50MHZ (快速)
  • 100MHZ (高速)

2、引脚速度

STM32微控制器的GPIO(General Purpose Input/Output)引脚速度设置是一个关键的配置参数,它影响着I/O口的性能,特别是当用于高速信号传输时。

(1)输出速度设置及其意义

STM32的GPIO端口在设置为输出模式时,通常提供几种速度选项,这些选项代表了I/O口驱动电路的不同响应速度,旨在优化噪声控制和降低功耗。常见的速度设置包括:

  • 2MHz:适用于对噪声敏感的应用或者低速信号传输。这种设置下,输出驱动电路的响应较慢,但功耗较低,噪声也相对较小。
  • 25MHz:平衡了速度和噪声控制的需求,适用于中速信号传输。相比2MHz,它的响应更快,但仍能保持较好的信号完整性。
  • 50MHz:用于高速信号传输,如SPI或某些高速总线通信。虽然提供了最快的响应速度,但会增加噪声并消耗更多功耗。
  • 100MHz:这是最快的速度设置,用于超高速信号传输,如更高速SPI或某些高速总线通信。虽然提供了最快的响应速度,但会增加更多的噪声并消耗更多功耗。

(2)输出速度与驱动电路的关系

每个GPIO引脚都有与其关联的输出驱动电路,这些电路的设计能够适应不同的速度要求。选择更高的输出速度意味着选择了响应更快的驱动电路,这能够更迅速地切换输出状态(即从高电平到低电平或反之),从而支持更高的数据传输速率。但是,更快的切换速度往往伴随更大的开关噪声和稍高的功耗。
在这里插入图片描述

📔专业名词
1.开关噪声:电子电路中的开关噪声通常是指由于开关操作引起的电磁干扰(Electromagnetic Interference, EMI)或瞬态电压现象。这种噪声可能对电路的正常运行产生负面影响,特别是在高频和高速数字电路中更为明显。 定义与成因:

.开关噪声主要发生在电路中的快速切换元件上,比如晶体管、继电器等。

.当这些元件从一种状态迅速切换到另一种状态时(如从导通变为截止),会在电路中产生瞬间的电流变化或电压突变。

.这种突变会导致寄生电感和电容之间的能量交换,从而产生振荡或尖峰信号。

2.寄生电容:寄生电容是电路设计中常见的非理想效应,它们并不是设计师特意加入的元件,而是由于电路物理结构自然形成的。这些“寄生”元件可以影响电路的行为,尤其是在高频应用中。
定义:寄生电容是指在两个导体之间无意中形成的一种电容效应。它通常出现在集成电路内部、印刷电路板(PCB)上的走线间或与地平面之间等地方。
影响:

.在高频电路中,寄生电容可以导致信号延迟增加。

.它可能造成不必要的耦合,使得一个信号路径中的变化影响到另一个不相关的路径。

.对于高速数字电路来说,寄生电容还会影响信号完整性,如引起过冲、下冲或者振铃现象。

3.过冲 (Overshoot)

定义:当信号从低电平切换到高电平时,如果信号超过目标电压水平并达到更高的峰值,这种现象就称为过冲。

原因:通常是由于信号路径上的寄生电感和电容相互作用造成的。当快速上升沿遇到寄生电感时,会产生一个反向电动势,这会导致电压超出预期值。

影响:过冲可能导致器件承受高于其额定工作电压的压力,从而可能缩短器件寿命或直接造成损害。

4.下冲 (Undershoot)

定义:与过冲相反,当下降沿信号低于目标低电平,并进一步跌落到更低的电压水平时,这种现象被称为下冲。

原因:同样是由寄生元件引起的,尤其是当信号通过较长的走线或者具有较大电感的路径时。

影响:下冲可能会使信号暂时达不到正确的逻辑电平,从而引起逻辑判断错误。

5.振铃 (Ringing)

定义:振铃是指在信号边沿之后出现的一系列振荡现象。这些振荡可能围绕着最终稳定的目标电压上下波动。

原因:振铃通常是由于信号路径上存在的寄生LC(电感-电容)谐振网络造成的。当信号经过这样的网络时,会激发起振荡模式。

影响:振铃不仅会影响当前信号的质量,还可能干扰相邻线路的信号,尤其是在高密度布线的PCB上。

3、配置建议

  • 应用需求导向:根据实际应用需求选择合适的速度。例如,如果使用I2C接口且波特率为400kHz,选择2MHz的速度可能已足够,但如果希望预留更多的余量,可以考虑使用10MHz。
  • 信号完整性和噪声考虑:高速信号传输时,应考虑信号的完整性,可能需要增加适当的终端电阻或其他抗干扰措施,以减少高速切换引起的反射和串扰。
  • 功耗考量:在低功耗应用中,应优先考虑低速设置以减少功耗。

在这里插入图片描述
在这里插入图片描述
电路的驱动能力由负载电容决定的,当负载电容一定时,GPIO端口的驱动能力越大,充放电的电流也越大,上升时间就越短。另外速度越高,EMI电磁干扰就越高,因此必须平衡GPIO性能与噪声,特别是产品出口时要取得EMC(电磁兼容:Electro Magnetic Compatibility)认证。
速度越高,需要电压就越高,对应功耗也越高。

4、详细分析

(1)对 I/O 端口进行编程作为输出时

  • 输出缓冲器被打开:

  • 开漏模式(常用于总线,典型特征是引脚外部有上拉电阻):输出寄存器中的“0”可激活 N-MOS,而输出寄存器中的“1”会使端口保持高阻态 (Hi-Z)(P-MOS 始终不激活)。

  • 推挽模式:输出寄存器中的“0”可激活 N-MOS,而输出寄存器中的“1”可激活P-MOS。

  • 施密特触发器输入被打开

  • 根据 GPIOx_PUPDR 寄存器中的值决定是否打开弱上拉电阻和下拉电阻

  • 输入数据寄存器每隔 1 个 AHB1 时钟周期对 I/O 引脚上的数据进行一次采样

  • 对输入数据寄存器的读访问可获取 I/O 状态

  • 对输出数据寄存器的读访问可获取最后的写入值
    在这里插入图片描述

  • 当输入信号为高电平的时候,上面的管子导通,下面的管子截止,输出信号为高电平。

  • 当输入信号为低电平的时候,上面的管子截止,下面的管子导通,输出信号为低电平。
    在这里插入图片描述
    🔸推挽电路
    推挽电路(push-pull)就是两个不同极性晶体管间连接的输出电路。推挽电路采用两个参数相同的功率BJT管或MOSFET管,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小效率高。推挽输出既可以向负载灌电流,也可以从负载抽取电流,常见应用场景音频放大器,用于放大音频信号以驱动扬声器。
    在这里插入图片描述

  • 工作原理

  • 当输入信号为正半周时,NPN晶体管导通,PNP晶体管截止,输出电流流过负载。

  • 当输入信号为负半周时,NPN晶体管截止,PNP晶体管导通,输出电流反方向流过负载。

  • 这样,两个晶体管轮流工作,使得输出波形接近于输入波形,但具有更大的幅度。

在电路设计中,推挽输出是一种很常用的输出模式。推挽输出有很多优点,比如更低的损耗,更安全的输出等。“推挽”之意,即为当一个管子推出去时,另一个管子拉回来。输入不同,交替导通。
🔸钳位二极管
钳位二极管是指用于在电路中将某点的电位进行限制的二极管,钳位是将某点的电位进行限制,使其不大于或者不小于参考端的值,该点的电位是可变的,是利用二极管的正向导通特性来进行钳位。IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入。当引脚电压高于VDD时,上方的二极管导通;当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。但是尽管如此,还是不能直接外接大功率器件,须加大功率及隔离电路驱动,防止烧坏芯片或者外接器件无法正常工作。
如上图所示,有两个保护二极管,用于保护内部电路,防止I/O引脚外部过高或者过低的电压输入时造成内部电路损坏。
具体来讲:当引脚输入电压高于VDD时,上面的二极管导通,输入点电压被钳位到约VDD+0.7V;当引脚输入电压低于VSS时,下面的二极管导通,输入点电压被钳位到约VSS-0.7V,从而使输入芯片内部的电压出于比较稳定的值(钳位作用)。
虽然有二极管的保护,但这样的保护很有限,大电压大电流的输入很容易烧坏芯片,在实际设计中要考虑设计引脚的保护电路。
在这里插入图片描述
假设二极管D1和D2的正向导通压降都是uD,反向击穿电压大于VDD+uD,Pin点的电位记作Upin,则:
① 当Pin点的电位Upin ≥ (VDD+uD)时,此时D1会导通而将Pin点的电位限制在VDD+uD,D2截止;
② 当Pin点的电位在范围(GND-uD) < Upin < (VDD+uD)时,D1截止,D2截止;
③ 当Pin点的电位Upin ≤ (GND-uD)时,D1截止,D2会导通而将Pin点的电位限制在GND-uD。
综上所述,Pin点的电位范围会被限制在(GND-uD) ≤ Upin ≤ (VDD+uD)。若VDD=5V、GND=0V、uD=0.7V,则Pin点电位范围被限制在 -0.7V ≤ Upin ≤ 5.7V;若忽略D1和D2的正向导通压降,则可认为Pin点电位范围被限制为 0V ≤ Upin ≤ 5V。
📣钳位电路相关说明
二极管具有单向导电性,可利用这一特性对电路进行整流或钳位。
钳位的定义:将信号强行钳制到某一电位上,抬高或降低信号的基准电位,但不改变原信号的波形。钳位电路分为正向钳位和负向钳位电路。
当二极管负极接地时,正极端电路的电位比地高,二极管导通,电位被拉下来,即正极端电压被钳位到零电位或零电位以下(忽略二极管压降)。
当二极管正极接地时,负极端电路的电位比地高,二极管截止,电位将不会受二极管影响。

(2)对 I/O 端口进行编程作为输入时

  • 输出缓冲器被关闭
  • 施密特触发器输入被打开
  • 根据 GPIOx_PUPDR 寄存器中的值决定是否打开上拉和下拉电阻
  • 输入数据寄存器每隔 1 个 AHB1 时钟周期对 I/O 引脚上的数据进行一次采样
  • 对输入数据寄存器的读访问可获取 I/O 状态
    在这里插入图片描述
    🔸施密特触发器
    在电子学中,施密特触发器(英语:Schmitt trigger)是包含正反馈的比较器电路。
    在这里插入图片描述
    对于标准施密特触发器,当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;当输入在正负向阈值电压之间,输出不改变,也就是说输出由高电准位翻转为低电准位,或是由低电准位翻转为高电准位时所对应的阈值电压是不同的。只有当输入电压发生足够的变化时,输出才会变化,因此将这种元件命名为触发器。
    施密特触发器可作为波形整形电路,能将模拟信号波形整形为数字电路能够处理的方波波形,而且由于施密特触发器具有滞回特性,所以可用于抗干扰,其应用包括在开回路配置中用于抗扰,以及在闭回路正回授/负回授配置中用于实现多谐振荡器。

(3)对 I/O 端口进行编程作为复用功能时

  • 可将输出缓冲器配置为开漏或推挽
  • 输出缓冲器由来自外设的信号驱动(发送器使能和数据)
  • 施密特触发器输入被打开
  • 根据 GPIOx_PUPDR 寄存器中的值决定是否打开弱上拉电阻和下拉电阻
  • 输入数据寄存器每隔 1 个 AHB1 时钟周期对 I/O 引脚上的数据进行一次采样
  • 对输入数据寄存器的读访问可获取 I/O 状态
    在这里插入图片描述

(4)对 I/O 端口进行编程作为模拟配置时

  • 输出缓冲器被禁止。
  • 施密特触发器输入停用,I/O 引脚的每个模拟输入的功耗变为零。施密特触发器的输被 强制处理为恒定值 (0)。
  • 弱上拉和下拉电阻被关闭。
  • 对输入数据寄存器的读访问值为“0”。
    在模拟配置中,I/O 引脚不能为 5 V 容忍
    在这里插入图片描述

三、上下拉电阻

上下拉电阻(Pull-up 和 Pull-down Resistors)是电子电路中常用的一种组件,用于确保数字电路中的信号线在没有其他信号源驱动时处于一个确定的状态。它们对于防止信号线悬空(浮空)非常重要,因为在悬空状态下,信号线可能会受到噪声干扰,导致误操作。
在这里插入图片描述

1、上拉电阻

  • 将一个不确定的信号,通过一个电阻与电源VCC相连,固定在高电平;
  • 上拉是对器件注入电流;灌电流;
  • 当一个接有上拉电阻的IO端口设置为输入状态时,它的常态为高电平;

2、下拉电阻

  • 将一个不确定的信号,通过一个电阻与地GND相连,固定在低电平;
  • 下拉是从器件输出电流;拉电流;
  • 当一个接有下拉电阻的IO端口设置为输入状态时,它的常态为低电平;

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

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

相关文章

C++中的`auto`与`std::any`:功能、区别与选择建议

引言 在C编程中&#xff0c;auto和std::any是两个功能强大但用途不同的工具。理解它们的区别和适用场景对于编写高效、可维护的代码至关重要。本文将详细介绍auto和std::any的基本概念、使用方法、适用场景以及它们之间的区别&#xff0c;并提供选择建议&#xff0c;帮助开发者…

如何把ubuntu 22.04下安装的mysql 8 的 数据目录迁移到另一个磁盘目录

在 Ubuntu 22.04 上迁移 MySQL 8 的数据目录到另一个磁盘&#xff0c;一般可以分为 停库 → 拷贝数据 → 修改配置 → 改权限 → 启动验证 这几个步骤。 我给你一个详细且可回滚的方案&#xff08;不会直接覆盖旧数据&#xff0c;确保安全&#xff09;。1. 检查 MySQL 数据目录…

高防CDN和高防IP的各自优势

高防 CDN 和高防 IP 都是网络安全防护的重要手段&#xff0c;二者基于不同的技术原理&#xff0c;在防护场景和优势上各有侧重。以下详细分析它们的各自优势&#xff1a;一、高防 CDN 的优势高防 CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;…

《红黑树的原理与C++实现:详解平衡艺术的高效构建与操作》

前引&#xff1a;高效的数据结构是算法性能优化的关键。红黑树作为一种自平衡二叉搜索树&#xff0c;以其稳定的性能广泛应用于各类系统&#xff0c;如数据库索引、内存管理和高级语言的标准库 红黑树通过一组严格的规则确保树的高度始终保持在对数级别&#xff0c;从而保证搜索…

基于SpringBoot+Uniapp的非遗文化宣传小程序(AI问答、协同过滤算法、Echarts图形化分析)

“ &#x1f388;系统亮点&#xff1a;AI问答、协同过滤算法、Echarts图形化分析”01系统开发工具与环境搭建前后端分离架构项目架构&#xff1a;B/S架构运行环境&#xff1a;win10/win11、jdk17小程序端&#xff1a;技术&#xff1a;Uniapp&#xff1b;UI库&#xff1a;colorU…

【从零开始java学习|第四篇】IntelliJ IDEA 入门指南

目录 一、IDEA 概述 1.1 什么是 IntelliJ IDEA&#xff1f; 1.2 IDEA 的核心优势 1.3 版本选择&#xff1a;社区版 vs 旗舰版 二、IDEA 下载与安装 2.1 下载步骤 2.2 安装过程&#xff08;以 Windows 为例&#xff09; 2.3 首次启动与激活 三、在 IDEA 中编写第一个 Ja…

什么是 Spring MVC?

题目详细答案Spring MVC 是 Spring 框架中的一个模块&#xff0c;用于构建基于 Web 的应用程序。它遵循 Model-View-Controller#&#xff08;MVC&#xff09;设计模式&#xff0c;将业务逻辑、用户界面和数据分离&#xff0c;以促进代码的可维护性和可扩展性。主要包含几个概念…

MySQL User表入门教程

一、User表概述 MySQL的user表位于mysql系统数据库中&#xff0c;是MySQL权限系统的核心&#xff0c;用于存储用户账户信息、认证方式和全局权限。通过操作此表&#xff0c;可实现用户创建、权限分配及安全审计。 二、User表核心字段解析字段名作用示例值Host用户允许连接的主机…

iOS 编译 cpp 代码生成 .a 库备忘

第一步&#xff1a;下载ios-cmake ios-cmake 第二步&#xff1a;复制ios-cmake到cpp项目目录下&#xff0c;打开终端输入&#xff1a; cmake -B build/ios_arm64 \-DCMAKE_TOOLCHAIN_FILE$(pwd)/ios-cmake/ios.toolchain.cmake \-DPLATFORMOS64 \-DCMAKE_BUILD_TYPERelease …

C++11-下

10. lambda表达式 10.1 C98中的一个例子 在C98中&#xff0c;如果想要对一个数据集合中的元素进行排序&#xff0c;可以使用std::sort方法。 #include <algorithm> #include <functional> int main() { int array[] {4,1,8,5,3,7,0,9,2,6}; // 默认按照小于比较…

教程 | 用Parasoft SOAtest实现高效CI回归测试

在现代软件开发实践中&#xff0c;持续集成&#xff08;CI&#xff09;已成为提升交付效率、优化代码质量的重要基石。然而&#xff0c;随着功能快速叠加与代码迭代加快&#xff0c;回归缺陷的风险也在同步增长。为了保障每次代码提交不会破坏既有功能&#xff0c;功能回归测试…

Leetcode-138. 复制带随机指针的链表

我们用哈希表来解决这个问题 首先创建一个哈希表&#xff0c;再遍历原链表&#xff0c;遍历的同时再不断创建新节点 我们将原节点作为key&#xff0c;新节点作为value放入哈希表中"""# Definition for a Node.class Node:def __init__(self, x: int, next: Node…