GPIO八种工作模式

目录

一、推挽输出

二、开漏输出

三、复用推挽输出

四、复用开漏输出

五、浮空输入

六、上拉输入

七、下拉输入

八、模拟输入


GPIO八种配置模式,原理和使用场景,硬件原理如下图:

一、推挽输出

1、 原理

       当控制栅极为低电平时,上面的P沟道MOS管导通,下面的的N沟道MOS管截至,由于上管的S连接VDD,所以输出高电平。当控制栅极为高电平时,上面的P沟道MOS管截止,下面的的N沟道MOS管导通,由于下管的S连接VSS,所以输出低电平。对于STM32单片机,由于P沟道的MOS输出电流能力很强,所以推挽输出的电流最大可以输出20mA

(1) 推动阶段——当连接到晶体管栅极的内部信号设置为低电平时,PMOS 晶体管被激活,电流从 VDD 流经它到输出引脚,NMOS 晶体管处于非活动状态(开路)且不导通。

(2) 拉动阶段——当连接到晶体管栅极的内部信号设置为高电平时,NMOS 晶体管被激活(关闭)并且电流开始从输出引脚流过它到 GND。同时,PMOS 晶体管处于非活动状态(开路)并且不传导电流。这种类型的输出不允许在总线配置中将多个设备连接在一起,推挽配置最常用于具有单向通信线上(线路上的信号传输仅在单一方向,比如SPI、UART等)。

2、使用场景

单片机主动控制输出高电平和低电平,例如对LED的控制,MOS管的开关控制,使能信号等。

二、开漏输出

1、原理

       开漏输出是为了实现逻辑器件的线与逻辑,如果配置成这种开漏输出,在需要电流输出驱动外部电路时,往往需要上拉一个电阻来提供电路的驱动电流,驱动能力的大小由外部上拉电阻决定,电阻越大,驱动能力越小,电阻越小,驱动能力越大,但是不能超过单片机的GPIO电流能力范围。

2、使用场景

        开漏输出一般应用在I2C、SMBUS 通讯等需要“线与”功能的总线电路中。除此之外,还用在电平不匹配的场合,如需要输出5 伏的高电平,就可以在外部接一个上拉电阻,上拉电源为5 伏,并且把GPIO 设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出5 伏的电平,只要电流够,就可以驱动继电器等。

三、复用推挽输出

1、原理

(1) 从电路中可以看出,复用推挽输出和推挽输出并没有太大区别,区别仅仅在于触发源不一样, 单纯的推挽输出是在软件中手动地设置0和1实现的。

(2) GPIO的输出速度:GPIO的引脚速度跟应用相匹配,速度配置越高,噪声越大,功耗越大。

(3) 当然引脚频率是对输出而言的,当GPIO配置为输入模式时,输出速度配置毫无意义,因为输出驱动电路与输入端口是断开的。

(4)GPIO引脚输出频率说的是I/O口驱动电路的响应频率而不是输出信号的频率,可以理解为由高电平转换到低电平的时间:例如,对于串口,假如最大波特率只需115.2kb/s,那么用2MHz的GPIO引脚频率就可以了,既省电,噪声也小。对于I2C接口,假如使用400kb/s波特率,又想留一些裕量,2MHz或许不够,可以选择10MHz的引脚频率。对于SPI接口,假如使用18Mb/s或9Mb/s的波特率,用10MHz的引脚频率显然不够了,需要选50MHz的。

2、使用场景

        而复用推挽输出指的是在某些模式下,例如某个GPIO既可以做USART的引脚,也可以做SPI的引脚等,启用了引脚的复用功能,这个时候需要设置该引脚为复用推挽输出,因为这个时候开发人员只需要配置相应的寄存器(参数),不需要关注具体的引脚电平。

四、复用开漏输出

五、浮空输入

1、原理

        对于单片机来说,此时的输入引脚处于高阻态,需要外部同时提供高电平和低电平,因为在该模式下,内置上拉电阻和下拉电阻都没有生效。而内部的TTL肖特基触发器相当于斯密特触发器,用于对输入信号进行“整形”,将其转化为理想的TTL电平后传入输入数据寄存器,等待CPU读取。

2、使用场景

如果外部电路中已经包含了适当的上拉或者下拉电阻,可以选择浮空输入。

六、上拉输入

1、 原理

        所谓的上拉输入就是内部的上拉电阻投入使用。这个时候当外部输入低电平时可正常输入低电平,而当外部无输入信号(高阻态)时,可由单片机自身的上拉电阻提供高电平信号。

2、使用场景

        输入信号在断开连接时保持稳定的逻辑电平(例如,保持为高电平),可以选择上拉输入。通过使用上拉电阻,可以确保在没有外部信号输入时,输入引脚始终保持一个已定义的稳定状态。

七、下拉输入

1、原理

        下拉输入与上拉输入正好相反,这个时候当外部输入低电平时可正常输入高电平,而当外部无输入信号(高阻态)时,可由单片机自身的下拉电阻提供低电平信号。

2、 使用场景

        输入信号在断开连接时保持稳定的逻辑电平(例如,保持为低电平),可以选择下拉输入。通过使用下拉电阻,可以确保在没有外部信号输入时,输入引脚始终保持一个已定义的稳定状态。

八、模拟输入

1、原理

        只有在此模式下,输入才为模拟信号,因为其他模式输入模拟信号没有任何意义,经过了肖特基触发器或者施密特触发器,全都变成了数字信号。这时候上拉和下拉电阻也没有起到作用,电平直接由外部输入, 传输到内部的AD转换器单元将其转换为数字信号,等待CPU处理。

2、 使用场景

一般用于MCU内部的AD转换。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode刷题记录:暴力搜索算法01 - 回溯

参考:labuladong的算法小抄 https://labuladong.online/algo/essential-technique/backtrack-framework/ 这篇太牛了,一个模板把所有的排列组合子集问题全秒了。 1. 简介 暴力搜索算法:回溯、dfs、bfs。这些都可以看做是从二叉树算法衍生出来…

leetcode hot100不同路径

本题可以采用动态规划来解决。还是按照五部曲来做 确定dp数组:dp[i][j]表示走到(i,j)有多少种路径 确定递推公式:我们这里,只有两个移动方向,比如说我移动到(i,j&#x…

问题:宋朝为了加强皇帝对司法权的直接控制建立了() #微信#微信问题:宋朝为了加强皇帝对司法权的直接控制建立了() #微信#微信

问题:宋朝为了加强皇帝对司法权的直接控制建立了() A.大理寺 B.刑部 C.审刑院 D.廷尉 参考答案如图所示

【C/C++内存管理详解】

C/C内存管理详解 1. C/C内存分布2. C语言中动态内存管理方式3. C中动态内存管理3.1 new/delete操作内置类型**3.2 new和delete操作自定义类型** 4. operator new与operator delete函数4.1 operator new与operator delete函数 5. new和delete的实现原理5.1 内置类型5.2 自定义类…

【无标题】Matlab 之axes函数——创建笛卡尔坐标区

**基本用法:**axes 在当前图窗中创建默认的笛卡尔坐标区,并将其设置为当前坐标区。 应用场景1:在图窗中放置两个 Axes 对象,并为每个对象添加一个绘图。 要求1:指定第一个 Axes 对象的位置,使其左下角位于…

C++ bfs反向搜索(五十七)【第四篇】

今天我们来学习bfs的反向搜索。 1.反向搜索 反向搜索:是从目标状态出发进行的搜索,一般用于终点状态唯一,起点状态有多种,且状态转移是可逆的(无向边)情况。 例题:在一个长度为 n 的坐标轴上&a…

JVM(5)面试篇

1 什么是JVM? 关联课程内容 基础篇-初识JVM基础篇-Java虚拟机的组成 回答路径 JVM的定义作用功能组成 1、定义: JVM 指的是Java虚拟机( Java Virtual Machine )。JVM 本质上是一个运行在计算机上的程序,他的职责是…

单片机学习笔记---直流电机驱动(PWM)

直流电机介绍 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转 直流电机主要由永磁体(定子)、线圈(转子)和换向器…

C语言学习day14:数组定义和使用

定义变量: 数据类型 变量 值 数组定义: 数据类型 数组名[元素个数]{值1,值2,值3} 代码: int main() {//定义变量//数据类型 变量 值//数组定义//数据类型 数组名[元素个数]{值1,值2,值3}//数组下标 数组名[小标]//数组下标是…

【Redis快速入门】Redis三种集群搭建配置(主从集群、哨兵集群、分片集群)

个人名片: 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️…

简易绘图软件(水一期)

哈哈&#xff01; 1、编写代码&#xff1a; 代码&#xff1a; main: #include <graphics.h> #include <music.h> #include <heker.h> #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )using…

Linux 幻兽帕鲁服务器怎么上传存档文件?

通过控制台远程连接到 Linux 服务器后&#xff0c;你可以打开文件树&#xff0c;然后找到幻兽帕鲁存档位置&#xff0c;将存档压缩包上传到 Pal 目录中。 记得替换存档前要先停止服务。 2. 然后将 Saved.tar 文件解压&#xff0c;并完全替换新服务器上的 Saved 存档目录即可。 …