大家好,我是知微

学习过单片机的小伙伴对GPIO肯定不陌生,GPIO (general purpose input output)是通用输入输出端口的简称,通俗来讲就是单片机上的引脚。

在STM32中,GPIO的工作模式被细分为8种,对于初学者来讲,要理解它们可太难了!

诶诶诶,给个机会,先别急着退出哈!

这不是有我在呢,跟着这篇文章学习,保证你几分钟时间就能轻松掌握这8种工作模式。

那么,好戏开始咯!

输入输出

首先,我们先要知道一个概念,GPIO的输入输出都是相对于MCU(单片机)来说的。

  • MCU给引脚信号,称之为输出
  • MCU接收引脚给过来的信号,则叫做输入。

知道这个之后,我们就可以进行下一步了,先从输出说起。

四种输出模式

1、 推挽输出

我第一次听到推挽这个词的时候,一脸懵逼,啥玩意儿啊!其实看英文反而好理解,push-pull,也就是推拉的意思。

这个叫做推

这个叫做挽

  • 推挽输出模式下,GPIO可以输出高电平,也可以输出低电平。

  • 当输出高电平时,P-MOS导通,电流按下图箭头所示流出去,称之为,把电流推出去。

  • 当输出低电平时,N-MOS导通,电流按下图箭头所示流进来,称之为,把电流挽回来。

应用场景:适用于通用的数字输出场景,如点亮LED灯

2、开漏输出

这又是一个不好理解的词,开漏,是不是什么东西开了,然后漏出来了?

其实不是这样的,是开路的意思。开路表示电路中存在一个断链,电流无法从一个点流到另一个点。

那么肯定有小伙伴会有疑问,开路和断路有啥区别?

这里简单说明一下:

  • 开路表示电路中不存在电流流动;

  • 断路表示电路中某一部分不通过电流流动,但是电路中仍然存在其他电流流动的路径

好了,话题不扯远了,继续说开漏中的漏。

我们知道,MOS管的三个极分别是栅极(G)、源极(S)和漏极(D)。这里的就是MOS三个极中的漏极。

  • 开漏输出模式下,GPIO可以输出低电平,也可以输出高阻态。在此模式下,P-MOS始终处于关断状态

  • 当输出控制器将P-MOS关断、N-MOS导通时,此时输出接VSS,输出低电平

  • 当输出控制器将P-MOS关断、N-MOS关断时,相当于什么都没接,此时输出浮空,相对于其它点的电阻无穷大,呈现高阻态,可以理解为开路

应用场景:适用于多个设备共享同一信号线,如I2C通信协议

3、复用推挽输出

  • 和推挽输出同理,只不过此时的输出控制器由片上外设控制

应用场景:允许GPIO引脚用于微控制器的特定功能,如SPI、I2C、USART等接口,同时保持推挽输出的特性

4、复用开漏输出

  • 和开漏输出同理,只不过此时的输出控制器由片上外设控制

应用场景:适用于复用功能接口,且需要多设备共享通讯总线(如I2C)的场景

四种输入模式

1、上拉输入

你可以把输入驱动器框中,跟VDD和VSS连接的电阻,想象成两个弹簧。

当VDD的开关闭合时,上拉电阻接通VDD,此时弹簧向上拉。

可以读取I/O引脚状态,默认为高电平。

应用场景:常用于矩阵键盘或按钮输入

2、下拉输入

当VSS的开关闭合时,下拉电阻接通VSS,此时弹簧向下拉。

可以读取I/O引脚状态,默认为低电平。

应用场景:如按钮开关连接到地时的检测

3、浮空输入

当VDD和VSS的开关都断开时,此时弹簧既不向上拉,也不向下拉,处于一种悬空的状态。

浮空输入状态下,读取该端口的电平是不确定的。

应用场景:常用于接收来自开关、键盘或其他数字接口的信号

4、模拟输入

从图示可以看到,之前的3种模式,输入的信号都经过了TTL施密特触发器,把缓慢变化的模拟信号转换成阶段变化的数字信号。而这种模式,信号没有经过施密特触发器,直接接到片上外设。

相较于其他输入模式只能读取到逻辑高/低电平(数字量),该模式能读取到细微变化的值(模拟量)。

通俗来讲就是,别的模式只能读取0和1,而模拟输入可以读取到0-1的变化区间。

主要应用:读取来自传感器(如温度传感器、电位计)的模拟信号

好了,STM32的8种GPIO端口模式的介绍到这里就结束了,看完之后是不是对这些概念清晰多了。

欢迎各位 点赞 收藏 评论,如有错误请留言指正,非常感谢!

不到2000字,轻松带你搞懂STM32中GPIO的8种工作模式的更多相关文章

  1. 一文带你搞懂java中的变量的定义是什么意思

    前言 在之前的文章中,壹哥给大家讲解了Java的第一个案例HelloWorld,并详细给大家介绍了Java的标识符,而且现在我们也已经知道该使用什么样的工具进行Java开发.那么接下来,壹哥会集中精力 ...

  2. 轻松搞懂Java中的自旋锁

    前言 在之前的文章<一文彻底搞懂面试中常问的各种“锁”>中介绍了Java中的各种“锁”,可能对于不是很了解这些概念的同学来说会觉得有点绕,所以我决定拆分出来,逐步详细的介绍一下这些锁的来龙 ...

  3. 来一轮带注释的demo,彻底搞懂javascript中的replace函数

    javascript这门语言一直就像一位带着面纱的美女,总是看不清,摸不透,一直专注服务器端,也从来没有特别重视过,直到最近几年,javascript越来越重要,越来越通用.最近和前端走的比较近,借此 ...

  4. 帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)

    作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞 ...

  5. 让你彻底搞懂JS中复杂运算符==

    让你彻底搞懂JS中复杂运算符== 大家知道,==是JavaScript中比较复杂的一个运算符.它的运算规则奇怪,容易让人犯错,从而成为JavaScript中“最糟糕的特性”之一. 在仔细阅读了ECMA ...

  6. 彻底搞懂 JS 中 this 机制

    彻底搞懂 JS 中 this 机制 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.com/jasonGeng88/blog 目录 this 是什么 this 的四种绑定规 ...

  7. 一文搞懂 js 中的各种 for 循环的不同之处

    一文搞懂 js 中的各种 for 循环的不同之处 See the Pen for...in vs for...of by xgqfrms (@xgqfrms) on CodePen. for &quo ...

  8. MySQL实战45讲,丁奇带你搞懂

    之前,你大概都是通过搜索别人的经验来解决问题.如果能够理解MySQL的工作原理,那么在遇到问题的时候,是不是就能更快地直戳问题的本质? 以实战中的常见问题为切入点,带你剖析现象背后的本质原因.为你串起 ...

  9. React16源码解读:开篇带你搞懂几个面试考点

    引言 如今,主流的前端框架React,Vue和Angular在前端领域已成三足鼎立之势,基于前端技术栈的发展现状,大大小小的公司或多或少也会使用其中某一项或者多项技术栈,那么掌握并熟练使用其中至少一种 ...

  10. 五分钟学Java:一篇文章带你搞懂spring全家桶套餐

    原创声明 本文首发于微信公众号[程序员黄小斜] 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 什么是Spring,为什么你要学习spring? 你第一次接触spring框架是在 ...

随机推荐

  1. 项目实战:Qt+iMax6生命探测仪(探测障碍物、静止目标、动态目标、生命目标、探测半径、探测前方雷达显示、动态目标轨迹显示、探测热力图、探测过程存储与回放)

    若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/110994486长期持续带来更多项目与技术分享, ...

  2. 浅谈 rxgo 在项目中的使用方式

    项目中使用到了 RxGo ,感觉现有的处理方式有一定的优势,当然也有一定的有劣势,遂记录下来,免得自己忘记. 本文介绍的只是 rxgo 的一种方式而已,如果你有不错的使用方式,请不吝赐教,谢谢. 对 ...

  3. Html飞机大战(十): 消灭敌机

    好家伙,本篇是带着遗憾写完的. 很遗憾,我找了很久,找到了bug但并没有成功修复bug 再上一篇中我们看到 子弹射中了敌机,但是敌机并没有消失,所以这篇我们要来完善这个功能 按照惯例我们来捋一下思路: ...

  4. Java HashMap 详解

    HashMap HashMap 继承自 AbstractMap,实现了 Map 接口,基于哈希表实现,元素以键值对的方式存储,允许键和值为 null.因为 key 不允许重复,因此只能有一个键为 nu ...

  5. 【Azure 应用服务】Azure App Service (Windows) 使用Flask框架部署Python应用,如何在代码中访问静态文件呢?如何设置文件路径?是相对路径还是绝对路径呢?

    问题描述 使用Flask框架部署Python代码,如何访问其中的静态文件呢?如static问价夹中的图像资源,同时如何在代码中读取txt文件中的内容呢?是相对路径或者是绝对路径呢? 实验步骤 在App ...

  6. 【Azure Spring Cloud】Azure Spring Cloud connect to SQL using MSI

    问题描述 在Azure Spring Cloud中,通过ActiveDirectoryMSI方式来连接到SQL Service,需要如何配置呢? 问题分析 在SQL Service中启用Active ...

  7. Java 多线程------解决 实现继承 Thread类 方式线程的线程安全问题 方式二:同步方法

    1 package bytezero.threadsynchronization; 2 3 4 5 /** 6 * 使用同步方法解决实现 继承 Thread类 的线程安全问题 7 * 8 * 9 * ...

  8. C++ //排序案列 //描述:将person自定义数据类型进行排序,Person中有属性 姓名,年龄,身高 //排序规则: 按照年龄进行的升序,如果年龄相同按照身高进行降序

    1 //排序案列 2 //描述:将person自定义数据类型进行排序,Person中有属性 姓名,年龄,身高 3 //排序规则: 按照年龄进行的升序,如果年龄相同按照身高进行降序 4 5 #inclu ...

  9. linux 前端 jenkins打包失败 permission 权限安装 root 安装nodejs,没有权限,另一个账号,需要chmod将文件权限打开

    linux 前端 jenkins打包失败 permission 权限安装 root 安装nodejs,没有权限,另一个账号,需要chmod将文件权限打开 开始以为nodejs版本问题 最后发现是安装n ...

  10. Dreamweaver基础教程:学习HTML

    目录 HTML简介 HTML实例 HTML 标签 HTML元素 HTML 属性 HTML网页结构 <!DOCTYPE> 声明 HTML 基础 HTML 标题 HTML 段落 HTML 链接 ...