关于STM32单片机GPIO口上拉与下拉输入

      以前GPIO上接的电路都是低电平触发的那种,新画了个板子有一个按键设计的是高电平触发,结果IO口设置成上拉输入后,怎么读都不正确,按键电路如图1。无奈只能去调试一下,发现当设置为上拉输入后,其ODR(GPIO输出数据寄存器)相应的也置为1,百思不得其解。

图1 按键电路

     于是去看一下GPIO的结构图:

I/O引脚结构图

      由图可以发现其实输出寄存器与输入寄存器之间在I/O引脚处是线与状态,在GPIO设置成上位输入时,其上拉电阻闭合,这时如果输出寄存器设置为0那么在IO口内部就会自己损耗电流,而这些电流的损耗是会增加功耗的。因此当GPIO设置成上拉输入时,相应的输出寄存器也设置为1.

      将按键电路与I/O引脚结构图连起来看,就清晰多了,当GPIO设置为上位输入时,上拉电阻与按键的330欧、220K欧串联,这时IO口所读到的电平就是330欧与220K欧电阻分压的总合,由于这两个电阻阻值过大,因引读出的电压大于逻辑'1'的阀值。OK问题找到了,于是将IO设置成下拉输入,问题就解决了。因此这里得出一个结论,IO口是上拉还是下拉要根据,IO口外部接的空闲电平有关,如按键不按下时是低电平,则应该设置为下拉输入。

      在调试时还发现另一种方法可以让代码正常运行,就是当设置上拉输入时,将其输出值设置为0,这样电平就被直接拉低了,按键的接地电路基本就不起作用了,但这样做有一个坏处,前面已经说过了,这种情况会导致上拉电阻直接接地了,增加了不必要功耗,而且将3.3V电压直接加在了输出驱动器的N-MOS上,时间长了之后可能会造成芯片损坏!

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值