gpio内部结构(一)

news2024/11/16 20:52:11

一,GPIO内部结构

1,保护二极管

* 引脚内部加上这两个保护二级管可以防止引脚外部过高或过低的电压输入。

* 当引脚电压高于 VDD_FT 或 VDD 时,上方的二极管导通吸收这个高电压。

* 当引脚电压低于 VSS 时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。

2,上下拉电阻

* 上拉和下拉电阻上都有一个开关,通过配置上下拉电阻开关,可以控制引脚的默认状态电平。

* 当开启上拉时引脚默认电压为高电平,

* 开启下拉时,引脚默认电压为低电平,这样就可以消除引脚不定状态的影响。

* 将上拉和下拉的开关都关断,这种状态我们称为浮空模式,一旦配置成这个模式,引脚的电压是不确定的,如果用万用表测量此模式下管脚电压时会发现只有 1 点几伏,而且还不时改变,所以一般情况下我们都会给引脚设置成上拉或者下拉模式,使它有一个默认状态。

* STM32 上下拉及浮空模式的配置是通过GPIOx_CRL 和 GPIOx_CRH 寄存器控制的。

* STM32 内部的上拉其实是一个弱上拉,也就是说通过此上拉电阻输出的电流很小,如果想要输出一个大电流,那么就需要外接上拉电阻了。

3,P-MOS 和 N-MOS

* GPIO 引脚经过两个保护二极管后就分成两路,

* 上面一路是“输入模式”,下面一路是“输出模式”。

* 输出模式,线路经过一个由 P-MOS 和 N-MOS管组成的单元电路,这让 GPIO 引脚具有了推挽和开漏两种输出模式。

* 推挽输出模式,是根据 P-MOS 和 N-MOS 管的工作方式命名的。

* 在该结构单元输入一个高电平时,P-MOS 管导通,N-MOS 管截止,对外输出高电平(3.3V)。

* 在该单元输入一个低电平时,P-MOS 管截止,N-MOS 管导通,对外输出低电平(0V)。

* 如果当切换输入高低电平时,两个 MOS 管将轮流导通,一个负责灌电流(电流输出到负载),一个负责拉电流(负载电流流向芯片),使其负载能力和开关速度都比普通的方式有很大的提高。下图为推挽输出模式的等效电路。

* 在开漏输出模式时,不论输入是高电平还是低电平,P-MOS 管总处于关闭状态。

* 当给这个单元电路输入低电平时,N-MOS 管导通,输出即为低电平。

* 当输入高电平时,N-MOS 管截止,这个时候引脚状态既不是高电平,又不是低电平,我们称之为高阻态。

* 如果想让引脚输出高电平,那么引脚必须外接一个上拉电阻,由上拉电阻提供高电平。开漏输出模式等效电路图如下图所示。

* 在开漏输出模式中还有一个特点,引脚具有“线与”关系。即多个开漏输出模式的引脚接在一起,只要有一个引脚为低电平,其他所有管脚都为低电平,即把所有引脚连接在一起的这条总线拉低了。

* 只有当所有引脚输出高阻态时这条总线的电平才由上拉电阻的 VDD 决定。如果 VDD 连接的是 3.3V,那么引脚输出的就是 3.3V,如果 VDD 连接的是 5V,那么引脚输出的就是 5V。因此如果想要让 STM32 管脚输出 5V,可以选择开漏输出模式,然后在外接上拉电阻的电源 VDD 选择 5V 即可,前提是这个 STM32 引脚是容忍 5V 的。开漏输出模式一般应用在 I2C、SMBUS 通讯等需要“线与”功能的总线电路中。还可以用在电平不匹配的场合中,就如上面说的输出 5V 一样。

* 推挽输出模式一般应用在输出电平为 0-3.3V 而且需要高速切换开关状态的场合。除了必须要用开漏输出模式的场合,我们一般选择推挽输出模式。要配置引脚是开漏输出还是推挽输出模式可以使用GPIOx_CRL 和 GPIOx_CRH 寄存器。

4,

输出数据寄存器双 MOS 管结构电路的输入信号,是由 GPIO“输出数据寄存器GPIOx_ODR”提供的,因此我们通过修改输出数据寄存器的值就可以修改 GPIO 引脚的输出电平。而“置位/复位寄存器 GPIOx_BSRR”可以通过修改输出数据寄存器的值从而影响电路的输出。

5,

复用功能输出由于STM32 的 GPIO 引脚具有第二功能,因此当使用复用功能的时候,也就是通过其他外设复用功能输出信号与 GPIO 数据寄存器一起连接到双 MOS 管电路的输入,其中梯形结构是用来选择使用复用功能还是普通 IO 口功能。例如我们使用 USART 串口通讯时,需要用到某个 GPIO 引脚作为通讯发送引脚,这个时候就可以把该 GPIO 引脚配置成 USART 串口复用功能,由串口外设控制该引脚,发送数据。

6,

输入数据寄存器输入数据寄存器是由 IO 口经过上下拉电阻、施密特触发器引入。当信号经过触发器,模拟信号将变为数字信号 0 或 1,然后存储在输入数据寄存器中,通过读取输入数据寄存器 GPIOx_IDR 就可以知道 IO 口的电平状态。

7,

复用功能输入此模式与复用功能输出类似。在复用功能输入模式时,GPIO 引脚的信号传输到 STM32 其他片上外设,由该外设读取引脚的状态。同样,如我们使用 USART 串口通讯时,需要用到某个 GPIO 引脚作为通讯接收引脚,这个时候就可以把该 GPIO 引脚配置成 USART 串口复用功能,使 USART 可以通过该通讯引脚的接收远端数据。

8,

模拟输入输出当 GPIO 引脚用于ADC 采集电压的输入通道时,用作“模拟输入”功能,此时信号是不经过施密特触发器的,因为经过施密特触发器后信号只有 0、1 两种状态,ADC 外设要采集到原始的模拟信号,信号源输入必须在施密特触发器之前。类似地,当 GPIO 引脚用于 DAC 作为模拟电压输出通道时,此时作为“模拟输出”功能, DAC 的模拟信号输出就不经过双 MOS 管结构了,模拟信号直接通过管脚输出。

二,GPIO的8种模式,四种输入模式,四种输出模式

1,输入模式:

输入浮空

输入上拉

输入下拉

模拟输入

2,输出模式

开漏输出

推挽输出

复用模式 - 开漏

复用模式 - 推挽

三,GPIO 8种模式含义

1,输入浮空

浮空就是逻辑器件与引脚即不接高电平,也不接低电平。由于逻辑器件的内部结构,当它输入引脚悬空时,相当于该引脚接了高电平。一般实际运用时,引脚不建议悬空,易受干扰。通俗讲就是浮空就是浮在空中,就相当于此端口在默认情况下什么都不接,呈高阻态,这种设置在数据传输时用的比较多。浮空最大的特点就是电压的不确定性,它可能是0V,页可能是VCC,还可能是介于两者之间的某个值(最有可能) 浮空一般用来做ADC输入用,这样可以减少上下拉电阻对结果的影响。

2,输入上拉模式

上拉就是把电位拉高,比如拉到Vcc。上拉就是将不确定的信号通过一个电阻钳位在高电平。电阻同时起到限流的作用。弱强只是上拉电阻的阻值不同,没有什么严格区分。

3,输入下拉

就是把电压拉低,拉到GND。与上拉原理相似。

4,模拟输入

模拟输入是指传统方式的输入,数字输入是输入PCM数字信号,即0,1的二进制数字信号,通过数模转换,转换成模拟信号,经前级放大进入功率放大器,功率放大器还是模拟的。

5,开漏输出

输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内)。

开漏形式的电路有以下几个特点:

1)利用外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。IC内部仅需很下的栅极驱动电流。

2) 一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。比如加上上拉电阻就可以提供TTL/CMOS电平输出等。(上拉电阻的阻 决定了逻辑电平转换的沿的速度 。阻 越大,速度越低功耗越小,所以负载电阻的选择要兼顾功耗和速度。

3)OPEN-DRAIN提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。

4)可以将多个开漏输出的Pin,连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系。这也是I2C,SMBus等总线判断总线占用状态的原理。 在一个结点(线)上, 连接一个上拉电阻到电源 VCC 或 VDD 和 n 个 NPN 或 NMOS 晶体管的集电极 C 或漏极 D, 这些晶体管的发射极 E 或源极 S 都接到地线上, 只要有一个晶体管饱和, 这个结点(线)就被拉到地线电平上. 因为这些晶体管的基极注入电流(NPN)或栅极加上高电平(NMOS),晶体管就会饱和, 所以这些基极或栅极对这个结点(线)的关系是或非 NOR 逻辑. 如果这个结点后面加一个反相器, 就是或 OR 逻辑. 其实可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为0,只有都为高电平时,与的结果才为逻辑1。

6,开漏复用功能

可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)。端口必须配置成复用功能输出模式(推挽或开漏)

7,推挽式输出

可以输出高,低电平,连接数字器件;推挽结构一般是指两个三级管分别受到互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源低定。

推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形方法任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小,效率高。输出即可以向负载灌电流。推拉式输出级即提高电路的负载能力,又提高开关速度。

8,推挽式复用功能

可以理解为GPIO口被用作第二功能时的配置情况(并非作为通用IO口使用)

四,上拉电阻,拉电流

1,

电阻的一端连接VCC电源,一端连接IO口(或GPIO口),让IO口的电平保持在高电平,这个电阻称为上拉电阻。

2,上拉电阻的分类和区别

在单片机电路中,上拉电阻可以分为:IO内部上拉电阻 和外部上拉电阻。

IO口内部上拉电阻:单片机内部集成,阻值不可更改。

外部上拉电阻:由硬件工程师设计,阻值可以按照电路的需求来设计,阻值可以更改。

大多数单片机的IO内部都会集成上拉电阻,在产品设计中,我们也会尽可能的选择单片机的内部上拉电阻,这样可以减少单片机外部元器件的数量,降低成本等。 如果内部上拉电阻不能满足需求的时候,我们就需要在IO的外部设计外部上拉电阻。

3,单片机IO内部配置了上拉电阻,外部硬件设计也加了上拉电阻,有什么影响?

如上图:内部上拉电阻是R1,外部R2是外部上拉电阻,对产品的功能,一般情况下,基本上没有影响。 影响的这个IO口的上拉电阻的阻值, 上图的上拉电阻的阻值,是R1 和R2并联之后的电阻值。

4,IO拉电流介绍

上拉电阻的阻值的大小,对IO口的功能有什么影响? 不同的阻值,对影响IO的拉电流大小。

* 拉电流的概念:

高电平输出时,一般是输出端对负载提供电流,其提供电流的数值叫做拉电流。

如下图的电流I,称为单片机IO口的拉电流。( RL代表负载)

* 拉电流的大小对电路的影响:

如下图,电流I越大,LED灯的亮度越高,越小,LED灯亮度越低;

五,下拉电阻 - 灌电流

1,电阻的一端连接GND,一端连接IO口,将IO口不确定的状态保持在低电平,这个电阻称为下拉电阻。

2,下拉电阻的分类和区别:

在单片机电路中,下拉电阻可以分为:IO内部下拉电阻 和外部下拉电阻。

IO口内部下拉电阻:单片机内部集成,阻值不可更改。

外部下拉电阻:由硬件工程师设计,阻值可以按照电路的需求来设计,阻值可以更改。

有些单片机的IO内部是没有集成下拉电阻(STM32内部有下拉电阻,STC15没有),所以在产品设计中,如果有下拉电阻的需求,我们需要在IO口外部设计外部下拉电阻。

3,IO的灌电流的介绍

下拉电阻的阻值的大小,对IO口的功能有什么影响? 不同的阻值,会影响IO的灌电流

灌电流的概念:低电平输出时,一般是输出端要吸收负载的电流,其吸收电流的数值叫做灌电流

如下图的电流I,称为IO口的灌电流。( RL代表负载)

4,单片机电路中,IO口对灌电流的要求:

单片机电路设计中,对IO口的灌电流是有要求的,以STC15单片机为例,如下图,每个IO口的灌电流最大不能超过20mA;  对单片机整体来说,灌电流+拉电流 不能超过90mA

参考文档:

GPIO基本知识 - 知乎

GPIO内部结构、工作原理、高电平、低电平、上拉电阻、下拉电阻详解 – 无际单片机

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 文件链接

Linux 下的文件链接有两类。一个是类似于 win 电脑的快捷方式,我们称为软链接,软链接也可以叫做符号链接。另一种是通过文件系统的 inode 连接来产生的,类似于 windows 电脑的复制,但是不产生新的文件,我们称为硬链接。…

2023.10.10

运算符重载 类外函数实现&#xff1a; #include <iostream>using namespace std;class Good {//算数friend const Good operator*(const Good &L,const Good &R);friend const Good operator(const Good &L,const Good &R);friend const Good operator…

【网络豆送书第五期】Kali Linux高级渗透测试

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号&#xff1a;网络豆云计算学堂 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a; 网络豆的主页​​​​​ 本期好书推荐&#xff1a;《Kali Linux高级渗透测试…

在Openresty中使用lua语言向请求浏览器返回请求头User-Agent里边的值

可以参考《Linux学习之Ubuntu 20.04在https://openresty.org下载源码安装Openresty 1.19.3.1&#xff0c;使用systemd管理OpenResty服务》安装Openresty。 然后把下边的内容写入到openresty配置文件/usr/local/openresty/nginx/conf/nginx.conf&#xff08;根据实际情况进行选…

vue使用localstorage超出限制解决方法

最近在项目中&#xff0c;遇到一个报错&#xff0c;QuotaExceededError: The quota has been exceeded。如图&#xff1a; 搜索了一下&#xff0c;结合项目代码&#xff0c;得到的结论是localStorage超出5M限制了&#xff0c;项目中使用了vuex-persistedstate插件&#xff0c;…

机器学习、深度学习相关的项目集合【自行选择即可】

【基于YOLOv5的瓷砖瑕疵检测系统】 YOLOv5是一种目标检测算法&#xff0c;它是YOLO&#xff08;You Only Look Once&#xff09;系列模型的进化版本。YOLOv5是由Ultralytics开发的&#xff0c;基于一阶段目标检测的概念。其目标是在保持高准确率的同时提高目标检测的速度和效率…

win11安装IIS步骤-已验证23.10.10

IIS服务使用 步骤一&#xff1a;打开控制面板 通过 控制面板— 程序— 启用或关闭Windows功能 — 选择Internet Information Services默认安装IIS&#xff0c;如下图步骤所示 步骤二&#xff1a;打开IIS服务 建议根据下图勾选&#xff0c;建议全选安装&#xff0c;以便后续发…

计算机算法分析与设计(9)---0-1背包问题(含C++代码)

文章目录 一、概述1.1 问题描述1.2 算法思想 二、代码2.1 题目描述2.2 代码编写 一、概述 1.1 问题描述 1. 0-1背包问题&#xff1a;给定 n n n 种物品和一背包。物品 i i i 的体积是 v i v_i vi​&#xff0c;其价值为 w i w_i wi​&#xff0c;背包的容量为 c c c。问应…

winform窗体控件太多显示不过来,怎么实现滚动条

winform窗体控件太多显示不过来&#xff0c;怎么实现滚动条 Winform Panel实现滚动条 一、创建panel 在界面上拖拽一个父级Panel1&#xff0c;然后在Panel1里面拖拽一个子级Panel2 设置父级Panel1的AutoScroll属性为True 属性设置好后&#xff0c;当子级高度或者宽度大于父…

promtail multiline 堆栈日志处理

找到自己的promtail.yaml中job_name段落&#xff0c;增加multiline段落&#xff0c;下面文件只是部分内容&#xff0c;只需要修改firstline后面的正则表达式匹配日志行首&#xff0c;如果堆栈换行后不是此格式行首&#xff0c;将自动把堆栈的行合并到上一行中。 - job_name: k…

【管理运筹学】第 9 章 | 网络计划(2,时间参数的计算 —— 工作时间的确定与事项的时间参数)

文章目录 引言一、工作时间的确定二、事项的时间参数2.1 事项的最早开始时间2.2 事项的最迟结束时间2.3 事项的时差2.4 利用事项的时间参数来确定关键线路 引言 计算网络图中有关的时间参数&#xff0c;主要目的是找到关键线路&#xff0c;为网络计划的优化、调增和执行提供明…

LabVIEW玩转魔方

LabVIEW玩转魔方 使用LabVIEW创建一个3D魔方&#xff0c;并找出解谜题的秘密&#xff0c;给朋友留下深刻深刻的印象。游戏中内置的机制使每张脸都能独立转动&#xff0c;从而混合颜色。要解决难题&#xff0c;每个面必须是相同的纯色 魔方的奥秘在于它的简单性和不可解性。这是…

点餐小程序实战教程08-购物车功能开发

目录 1 创建购物车2 增加数量3 减少数量4 切换分类时回填数据5 显示购物车信息总结 我们上一篇搭建了点餐业务的数据初始化加载&#xff0c;本篇实现一下加入购物车的功能。在购物车设计的时候有两种方案&#xff0c;一种是使用数据表的方案&#xff0c;一种是使用变量的方案。…

手机拍摄的视频噪点很多怎么办,视频怎么做降噪处理?

现如今&#xff0c;智能手机已经成为了我们生活中必不可少的存在。而随着智能手机越来越强大&#xff0c;很多人已经开始使用手机来拍摄各种类型的视频。但是由于手机的限制&#xff0c;很多人会发现自己拍摄的视频存在着很多的噪点。那么&#xff0c;我们该怎样来解决拍摄视频…

深入理解强化学习——强化学习和有监督学习

分类目录&#xff1a;《深入理解强化学习》总目录 通过前文的介绍&#xff0c;我们现在应该已经对强化学习的基本数学概念有了一定的了解。这里我们回过头来再看看一般的有监督学习和强化学习的区别。以图片分类为例&#xff0c;有监督学习&#xff08;Supervised Learning&…

idea软件_启动出错永久办法leetcode关联

目录 idea启动出错启动出错原因1 永久关联leetcode idea启动出错 idea启动没反应的话&#xff0c;在idea的安装目录bin目录下有idea.bat&#xff0c;加入pause&#xff0c;双击启动&#xff0c;如果有问题,idea不会启动&#xff0c;控制台会输出相应错误信息&#xff0c;如果没…

互联网Java工程师面试题·Java 并发编程篇·第二弹

目录 14、什么是 Callable 和 Future? 15、什么是 FutureTask?使用 ExecutorService 启动任务。 16、什么是并发容器的实现&#xff1f; 17、多线程同步和互斥有几种实现方法&#xff0c;都是什么&#xff1f; 18、什么是竞争条件&#xff1f;你怎样发现和解决竞争&…

Jetson Orin NX 开发指南(1): 系统烧录

一、SDK Manager SDK Manager 工具是 NVIDIA 官方推荐的烧写和管理 Jetpack 系统组件的一个图形化烧写工具&#xff0c;使用起来非常的简单方便&#xff0c;但是该软件需要在 x86 的 Ubuntu 18.04 或 Ubuntu 20.04 的系统上运行&#xff0c;因此我们需要准备一台安装了 Ubuntu…

照片怎么压缩变小?

照片怎么压缩变小&#xff1f;在使用聊天工具时&#xff0c;出现无法传输照片的情况很常见&#xff0c;这通常是因为电脑或手机中照片的文件体积太大了。此外&#xff0c;如果照片过大&#xff0c;也会占用设备的内存&#xff0c;导致设备性能下降。因此&#xff0c;我们需要将…

广告牌安全监测,保障户外广告牌的安全与稳定

随着城市的发展和现代化&#xff0c;广告牌已经成为城市风景的一部分。然而&#xff0c;随之而来的是广告牌安全问题&#xff0c;因为它们暴露在各种天气和环境条件下&#xff0c;一旦掉落&#xff0c;可能对人们的生命和财产造成威胁。广告牌安全监测有效的解决了这一问题&…