【超详细】output level 和 pull up/ pull down 的真正区别

【超详细】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 Level

这点很好理解,完全就是字面意思:程序初始化之后该Output口输出的电平信号是高还是低。

在随后的程序中可以随时改变这个输出信号,改变之后就保持不变直至下次被改变。

这里需要注意的是,Output口意味着电平不会被外界输入电平所改变。而Input口意味着,当接收到任何外界输入电平时,该GPIO口的电平都会与之保持一致。


2. Pull up/ Pull down

这一条对Output和Input的GPIO口都适用。

这里摘录一段文字,很好的介绍了Pull up(拉高)/ Pull down(拉低)的意思。

上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平。而在信号输入为低电平是输入端的电平应该也为低电平。如果没有上拉电阻,在没有外界输入的情况下输入端是悬空的,它的电平是未知的无法保证的,上拉电阻就是为了保证无信号输入时输入端的电平为高电平,同样还有下拉电阻它是为了保证无信号输入时输入端的电平为低电平。
(摘自参考资料1)


3. 两者的区别

这两种设置都适用于GPIO中的Output口。那么他们的区别是什么呢?实践中该如何使用呢?

如果看懂了上面的介绍的话,这个问题就很好理解了。

1)对于Output口来说

由于是用来做输出用的,它的电平不会受到外界输入电平影响。为了让Output口按我们的想法输出电平,有两种调整方法:

  1. 代码中调整。如:

    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, 1);  // 向A1这个GPIO口写入1(高电平)
    

    便是将A1口(假设A1已经被设为Output类型的GPIO口了)的输出电平设为高电平。

  2. 在初始化GPIO的时候调整。就像在讲解Output Level时用到的图片中的那样,设置初始化之后该Output口的输出电平(之后在代码里可以随时对其做更改)。

因此,设置Output口成为上拉(Pull up)或是下拉(Pull down)就没什么意义了。因为我们不会去接收任何外界电平信号,自然就谈不上“没有外界信号输入时的默认电平状态”了。

但是好像还是有其他方面的影响,这点我不是很确定。



2)而对于Input口来说

上拉/ 下拉的设置可能非常重要。这决定了没有外界输入电平时,该Input口的电平状态。

比如,我希望开关没有连通时,Input口为高电平;按下开关导通Output口和Input口时,Input口变为Output口的低电平状态。

原因是这样的:
我在开关和GPIO口之间连接了一段不短的导线,可能造成电压的损耗,导致传输的高电平电压不足,被误认为低电平。而传输低电平信号达到了同样的目的,却不会出现这种问题。


总结

Output LevelPull up/ Pull down
Output口设置output口的默认输出电平一般没什么用(不确定)
Input口(不适用)无外部电平信号输入时,表现为高电平还是低电平

Input口Output口
没有外界信号输入1.高电平(Pull up) 2.低电平(Pull down) 3.随机不可控(no pull)输出想要输出的信号
有外界电平信号输入与外界信号保持一致不受影响,输出想要输出的信号

参考资料

  1. stm32上拉输入和下拉输入怎么用?
  2. 好像找不到了之前查的那个网页了。。。
  • 71
    点赞
  • 141
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
引用\[2\]:关于Git中fetch和pull区别为:一.对远端跟踪分支操作的权限不同 二.拉取后的操作不同 三.使用后commitID不同。一、对远端跟踪分支操作的权限不同 1、 fetch: fetch能够直接更改远端跟踪分支。 2、 pullpull无法直接对远程跟踪分支操作,我们必须先切回本地分支然后创建一个新的commit提交。二、拉取后的操作不同 1、fetch:fetch会将数据拉取到本地仓库 - 它并不会自动合并或修改当前的工作。 2、 pullpull是从远程获取最新版本并merge到本地,会自动合并或修改当前的工作。三.使用后commitID不同。 1、fetch:使用fetch更新代码,本地的库中master的commitID不变,还是等于1。 2、pull:使用pull更新代码,本地的库中master的commitID发生改变,变成了2。在实际使用中,fetch更安全一些,因为在merge前,我们可以查看更新情况,然后再决定是否合并。引用\[3\]:git pull : 首先,基于本地的FETCH_HEAD记录,比对本地的FETCH_HEAD记录与远程仓库的版本号,然后git fetch 获得当前指向的远程分支的后续版本的数据,然后再利用git merge将其与本地的当前分支合并。所以可以认为git pull是git fetch和git merge两个步骤的结合。git pull的用法如下:git pull <远程主机名> <远程分支名>:<本地分支名> //取回远程主机某个分支的更新,再与本地的指定分支合并。 问题: no pullpull down 什么区别 回答: 在Git中,没有"no pull"这个命令。而"pull down"可能是指"pull"命令的不同用法或者是一种误解。在Git中,"pull"命令用于从远程仓库获取最新的版本并将其合并到本地分支。与此相对,"fetch"命令只是将远程仓库的数据拉取到本地仓库,而不会自动合并或修改当前的工作。所以,"pull"和"fetch"的区别在于拉取后的操作不同,以及使用后commitID的变化。\[2\] \[3\] #### 引用[.reference_title] - *1* [【详细output levelpull up/ pull down 的真正区别](https://blog.csdn.net/weixin_39591031/article/details/110568014)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [关于Git中fetch和pull区别为](https://blog.csdn.net/fortyman/article/details/126274721)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [详解git fetch与git pull区别](https://blog.csdn.net/riddle1981/article/details/74938111)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值