【超详细】output level 和 pull up/ pull down 的真正区别
目录
- 【超详细】output level 和 pull up/ pull down 的真正区别
- 1. Output Level
- 2. Pull up/ Pull down
- 3. 两者的区别
- 1)对于Output口来说
- 2)而对于Input口来说
- 总结
- 参考资料
【超详细】output level 和 pull up/ pull down 的真正区别
今天在使用stm32f103c8t6,利用GPIO口实现开关信号的时候遇见了这个问题。我将开关的两端分别接在两个GPIO口上,一个IO口设为Input,一个IO口设为Output。我希望开关未导通时,Input口为高电平,导通后为低(这么做的原因见下文)。当我看见output level和pull up/ pull down这两个选项的时候,晕乎乎不知道到底有什么区别。查了很多资料,加上亲自利用串口输出和万用表做实验,终于有了眉目。这里总结一下。
1. Output Level
这一条仅适用于被设置为Output
的GPIO口。通常有两种选项:高电平/ 低电平
,分别代表将该Output口设为默认输出高电平/ 默认输出低电平
。
这点很好理解,完全就是字面意思:程序初始化之后该Output口输出的电平信号是高还是低。
在随后的程序中可以随时改变这个输出信号,改变之后就保持不变直至下次被改变。
这里需要注意的是,Output口意味着电平不会被外界输入电平所改变。而Input口意味着,当接收到任何外界输入电平时,该GPIO口的电平都会与之保持一致。
2. Pull up/ Pull down
这一条对Output和Input的GPIO口都适用。
这里摘录一段文字,很好的介绍了Pull up(拉高)/ Pull down(拉低)的意思。
上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平。而在信号输入为低电平是输入端的电平应该也为低电平。如果没有上拉电阻,在没有外界输入的情况下输入端是悬空的,它的电平是未知的无法保证的,上拉电阻就是为了保证无信号输入时输入端的电平为高电平,同样还有下拉电阻它是为了保证无信号输入时输入端的电平为低电平。
(摘自参考资料1)
3. 两者的区别
这两种设置都适用于GPIO中的Output口。那么他们的区别是什么呢?实践中该如何使用呢?
如果看懂了上面的介绍的话,这个问题就很好理解了。
1)对于Output口来说
由于是用来做输出用的,它的电平不会受到外界输入电平影响。为了让Output口按我们的想法输出电平,有两种调整方法:
代码中调整。如:
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, 1); // 向A1这个GPIO口写入1(高电平)
便是将A1口(假设A1已经被设为Output类型的GPIO口了)的输出电平设为高电平。
在初始化GPIO的时候调整。就像在讲解Output Level时用到的图片中的那样,设置初始化之后该Output口的输出电平(之后在代码里可以随时对其做更改)。
因此,设置Output口成为上拉(Pull up)或是下拉(Pull down)就没什么意义了。因为我们不会去接收任何外界电平信号,自然就谈不上“没有外界信号输入时的默认电平状态”了。
但是好像还是有其他方面的影响,这点我不是很确定。
2)而对于Input口来说
上拉/ 下拉的设置可能非常重要。这决定了没有外界输入电平时,该Input口的电平状态。
比如,我希望开关没有连通时,Input口为高电平;按下开关导通Output口和Input口时,Input口变为Output口的低电平状态。
原因是这样的:
我在开关和GPIO口之间连接了一段不短的导线,可能造成电压的损耗,导致传输的高电平电压不足,被误认为低电平。而传输低电平信号达到了同样的目的,却不会出现这种问题。
总结
Output Level | Pull up/ Pull down | |
---|---|---|
Output口 | 设置output口的默认输出电平 | 一般没什么用(不确定) |
Input口 | (不适用) | 无外部电平信号输入时,表现为高电平还是低电平 |
Input口 | Output口 | |
---|---|---|
没有外界信号输入 | 1.高电平(Pull up) 2.低电平(Pull down) 3.随机不可控(no pull) | 输出想要输出的信号 |
有外界电平信号输入 | 与外界信号保持一致 | 不受影响,输出想要输出的信号 |
参考资料
- stm32上拉输入和下拉输入怎么用?
- 好像找不到了之前查的那个网页了。。。
【超详细】output level 和 pull up/ pull down 的真正区别相关推荐
- MySQL超详细安装.zip【.zip和.msi安装包的区别及详细安装】和可视化软件SQLyog安装教程
------------------------------------------.zip和.msi安装包的区别------------------------------------------ ...
- HAL库 output level 和 pull up/ pull down 的区别
从标准库过来的朋友可能对这两个选型有点分不清除 GPIO output level 即输出模式下初始化后端口的电位(高或低) GPIO Pull-up/Pull-down 即输入模式下的电位,例如按键 ...
- 二进制安装部署 4 kubernetes集群---超详细教程
二进制安装部署kubernetes集群---超详细教程 前言:本篇博客是博主踩过无数坑,反复查阅资料,一步步搭建完成后整理的个人心得,分享给大家~~~ 本文所需的安装包,都上传在我的网盘中,需要的可以 ...
- SQLMap用户手册【超详细】
SQLMap用户手册[超详细] 文章来源:http://www.cnblogs.com/hongfei/p/3872156.html ps:直接copy http://192.168.136.131/ ...
- 超详细的canal使用总结
超详细的canal使用总结 canal的介绍 canal,译意为水道/管道/沟渠,从官网的介绍中可以知道,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费. 这是一张官网 ...
- Docker02 狂神Docker视频学习笔记 :【狂神说Java 哔哩哔哩】Docker最新超详细版教程通俗易懂
目录 0. 视频源 0. 学习网址 基础篇 1. Docker概述 1.1 Docker为什么出现? 1.2 Docker历史 1.3 Docker能干什么 2. Docker安装 2.1 Docke ...
- 2019年Java大厂面试(吐血超详细总结)
本文来自于慕课网手记: Java大厂面试(吐血超详细总结) 作者:小码哥的freestyle 链接: https://www.imooc.com/article/286545 来源:慕课网 面试清单 ...
- Prometheus+Grafana+Alertmanager搭建全方位的监控告警系统-超详细文档
微信公众号搜索DevOps和k8s全栈技术,每天分享技术和生活点滴,共同成长,共同进步~ 前两篇文章 k8s中部署prometheus监控告警系统-prometheus系列文章第一篇 k8s中部署Gr ...
- Jenkins详细安装配置部署--超详细
Jenkins详细安装配置部署--超详细 一.什么是CI/CD 二.Gitlab内置持续集成 持续集成(CI) 持续交付(CD) 2.1 Gitlab的CI/CD优势 2.2 Gitlab的CI/CD ...
- 转 :2019年Java大厂面试(吐血超详细总结)
2019年Java大厂面试(吐血超详细总结) 本文来自于慕课网手记:Java大厂面试(吐血超详细总结),转载请保留链接 ;) 转载自:https://www.imooc.com/article/286 ...
最新文章
- Android 人民币符号在布局中实现的效果不一样的处理方法
- 日志分析工具splunt
- MVVM架构~knockoutjs系列之从Knockout.Validation.js源码中学习它的用法
- 产品经理经验谈50篇(二):如何写好一份规范的数据分析报告?我想你需要知道这些
- FEKO V7.0安装教程
- 工作87:element-ui el-table sortable属性 参数详解
- Python进阶丨如何创建你的第一个Python元类?
- python将非0数视为false_Python Numpy – 将小数字视为零
- JS中简单数据类型和复杂数据类型
- 涨价潮或延续至下半年 芯片国产化遇机遇
- Java 延时常见的几种方法
- linux核心蜜罐系统,分析***,斩断黑手
- 如何对一个变量数据进行正则判定_数值数据与数值数据的分析
- MacBookPro 键盘映射
- 标签、画像设计与模型落地
- 标准偏差公式c语言,C语言 求标准偏差
- 专业3C认证CCC认证机构
- 关于Android开发中图片的三级缓存机制
- Hongda -接小球游戏
- 红米k30s至尊纪念版发布会直播地址红米k30s至尊纪念版发布会在线观看入口