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.mzph.cn/news/683985.shtml

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

相关文章

C++ STL: list使用及源码剖析

list使用 list常用函数及使用&#xff08;1&#xff09; #include <iostream> #include <list> #include <algorithm>int main() {// 创建liststd::list<int> myList {5, 2, 9, 1, 5, 6};// 打印liststd::cout << "Original list: &quo…

VS Code添加环境变量

有时候你会发现即使添加了环境变量, 打开VS Code的命令行终端也找不到对应的环境变量。遇到这种情况可以通过给VS Code的终端独立添加对应环境变量解决: 步骤1. 找到设置 步骤2. 找到windows终端环境变量配置 3. 在此处配置然后重新打开一个终端即可 (完)

ZISUOJ 2022年算法基础公选课练习四(Map)

说明&#xff1a; 博主为了提早预习数据结构和C的一些知识&#xff0c;自己琢磨外加查阅资料所写的代码&#xff0c;题目来源于22年初的学院老师组织的算法基础公选课的练习。我的代码甚至思路肯定存在许多不足和错误&#xff0c;欢迎大家批评指正。 题目列表&#xff1a; 问题…

HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核基础-互斥锁mux

目录 一、互斥锁基本概念二、互斥锁运行机制三、互斥锁开发流程四、互斥锁使用说明五、互斥锁接口六、代码分析&#xff08;待续...&#xff09; 一、互斥锁基本概念 互斥锁又称互斥型信号量&#xff0c;是一种特殊的二值性信号量&#xff0c;用于实现对共享资源的独占式处理。…

STM32——OLED菜单(二级菜单)

文章目录 一.补充二. 二级菜单代码 简介&#xff1a;首先在我的51 I2C里面有OLED详细讲解&#xff0c;本期代码从51OLED基础上移植过来的&#xff0c;可以先看完那篇文章&#xff0c;在看这个&#xff0c;然后按键我是用的定时器扫描不会堵塞程序,可以翻开我的文章有单独的定时…

Flutter Android开发 梳理Google Material Design颜色体系

前言 做安卓开发&#xff08;Kotlin语言&#xff09;&#xff0c;Flutter开发的人员应该都听说过谷歌一直推崇的Material Design&#xff0c;而Material Design Color是其推崇的颜色体系&#xff0c;具体来说&#xff0c;Material Design Color是一套旨在帮助设计师和开发者创…

Panalog 日志审计系统 libres_syn_delete.php 前台RCE漏洞复现

0x01 产品简介 Panalog是一款日志审计系统,方便用户统一集中监控、管理在网的海量设备。 0x02 漏洞概述 Panalog日志审计系统 libres_syn_delete.php接口处存在远程命令执行漏洞,攻击者可执行任意命令,接管服务器权限。 0x03 影响范围 version <= MARS r10p1Free 0…

java+springboot+vue试题库在线学习系统05umj

技术路线&#xff1a; B/S架构&#xff0c;后端springboot框架&#xff0c;前端Vue.js框架。 主要功能模块&#xff08;至少六大功能&#xff09;&#xff0c;参考任务书并拓展 &#xff08;1&#xff09;用户管理模块&#xff1a;规定不同角色的用户对系统中各个功能模块的使用…

【经验】JLINK无法(单步)调试,JLINK固件的烧写

昨天终于准备开始进行S3C6410的裸机开发&#xff0c;写好了程序&#xff0c;编译生成了.axf文件&#xff0c;一切顺利的准备利用JLINK进行在线调试了&#xff0c;突然有种成功就在前面的感觉&#xff0c;Jlink也能被电脑正常的识别&#xff0c;利用AXD进行Jlink的相关设置也很正…

安卓自定义画板

包含功能&#xff1a; 包含 获取当前画板的截图、设置画笔样式、获取画笔样式、设置画笔宽度、获取画笔宽度、设置画笔颜色、获取画笔颜色、加载图片、获取图片位图对象、设置图片位图对象&#xff0c;并在画布上绘制图片、撤销上一步操作、重做上一步撤销的操作、清空所有绘图…

Dirty PageTable

前言 Dirty PageTable 是一种针对堆相关漏洞的利用手法&#xff0c;主要就是针对 PTE 进行攻击。 参考文章&#xff1a; Dirty Pagetable: A Novel Exploitation Technique To Rule Linux Kernel – 该利用方式提出原文 上述文章已经讲的非常清楚了&#xff0c;就是实操写 e…

挑战杯 python区块链实现 - proof of work工作量证明共识算法

文章目录 0 前言1 区块链基础1.1 比特币内部结构1.2 实现的区块链数据结构1.3 注意点1.4 区块链的核心-工作量证明算法1.4.1 拜占庭将军问题1.4.2 解决办法1.4.3 代码实现 2 快速实现一个区块链2.1 什么是区块链2.2 一个完整的快包含什么2.3 什么是挖矿2.4 工作量证明算法&…

CentOS7.9+Kubernetes1.29.2+Docker25.0.3高可用集群二进制部署

CentOS7.9Kubernetes1.29.2Docker25.0.3高可用集群二进制部署 Kubernetes高可用集群&#xff08;Kubernetes1.29.2Docker25.0.3&#xff09;二进制部署二进制软件部署flannel v0.22.3网络&#xff0c;使用的etcd是版本3&#xff0c;与之前使用版本2不同。查看官方文档进行了解…

红队打靶练习:HACK ME PLEASE: 1

信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:69:c7:bf, IPv4: 192.168.61.128 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.61.2 00:50:56:f0:df:20 …

大学建筑专业的搜题软件?大学搜题工具中的高级搜索功能有哪些? #学习方法#微信#经验分享

学习和考试是大学生生活中不可避免的一部分&#xff0c;而在这个信息爆炸的时代&#xff0c;如何快速有效地获取学习资源和解答问题成为了大学生们共同面临的难题。为了解决这个问题&#xff0c;搜题和学习软件应运而生。今天&#xff0c;我将为大家介绍几款备受大学生青睐的搜…

Python魔法方法 单例模式

前言 本文介绍一下python中常用的魔法方法以及面向对象中非常重要的单例模式。 魔法方法 python中一切皆对象&#xff0c;因为python是面向对象的编程语言。python给类和对象提供了大量的内置方法&#xff0c;这些内置方法也称魔法方法。这些魔法方法总是在某种条件下自动触…

探索设计模式的魅力:创建型设计模式的比较与决策

设计模式专栏&#xff1a;http://t.csdnimg.cn/U54zu 目录 一、设计模式概览 1.1 创建型模式 二、比较创建型设计模式 1.1 适用场景典型用例 1.2 关键要素与差异对比 1.3 结构图 三、模式选择指南 3.1 场景分析 3.2 决策流程图 四、结语 4.1 优势 4.2 考量因素 一、…

node+vue3+mysql前后分离开发范式——实现对数据库表的增删改查

文章目录 ⭐前言⭐ 功能设计与实现💖 node后端操作数据库实现增删改查💖 vue3前端实现增删改查⭐ 效果⭐ 总结⭐ 结束⭐结束⭐前言 大家好,我是yma16,本文分享关于 node+vue3+mysql前后分离开发范式——实现对数据库表的增删改查。 技术选型 前端:vite+vue3+antd 后端:…

使用radial-gradient完成弧形凹陷的绘制

1、效果如下图 我在微信小程序中制作的 2、代码如下 <style>.header {position: relative;width: 200px;height: 200px;overflow: hidden;}.header .circle {--circleValue: 500px;position: absolute;bottom: 0;left: 50%;width: 100%;height: var(--circleValue);trans…

[OPEN SQL] 修改数据

MODIFY语句用于修改数据库表中的数据 MODIFY拥有INSERT和UPDATE的操作&#xff0c;如果数据库表中不存在符合条件的数据则会添加该条新数据&#xff0c;反之数据库表中存在符合条件的数据则会更新该条数据 本次操作使用的数据库表为SCUSTOM&#xff0c;其字段内容如下所示 航…