浅析STM32中GPIO的上/下拉电阻
扫描二维码
随时随地手机看文章
开启上拉电阻或下拉电阻的作用
STM32内部的上拉其实是一个弱上拉,也就是说通过此上拉电阻输出的电流很小,如果想要输出一个大电流。那么就需要外接上拉电阻了,其实就是增加导线的输出电流。
下拉电阻情况相反,让STM32的CPU引脚输出低电平,结果由于后续电路影响输出的低电平达不到GND。所以接个下拉电阻,其实就是为了降低导线的输出电流。
另外当上下拉电阻都不开启,此时是浮空模式,引脚的电压是不确定的,此模式下的管脚电压会时不时改变。
所以为了防止引脚悬空,产生积累电荷、静电荷,造成电路不稳定。一般情况下,我们都会给引脚设置成上拉或者下拉模式,使它有一个确定的默认电平状态。
以上拉电阻举例,在STM32刚上电的时候,芯片引脚电平是不确定的。特别引脚是接按键的时候,必须给他个确定的电平。下拉电阻的作用就是,强制让电平保持在低电平。
STM32中的GPIO及其上/下拉电阻功能
在STM32微控制器中,GPIO(General Purpose Input/Output,通用输入输出)是一个至关重要的功能模块。它不仅提供了灵活的输入输出能力,还支持配置上拉和下拉电阻,以实现对输入信号的预处理和稳定。通过合理配置GPIO的上/下拉电阻,用户可以有效地控制信号的电平状态,从而满足不同的电路需求。

以STM32中的GPIO为例,其结构如图所示。关于GPIO的工作原理,可以参考相关文章进行详细了解。在GPIO的结构图中,我们可以看到上拉和下拉电阻上各有一个开关,通过配置这些开关,我们可以控制引脚的默认电平。具体来说,开启上拉电阻将使引脚默认电压为高电平,而开启下拉电阻则会使引脚默认电压为低电平。若上拉和下拉电阻都不开启,则引脚处于浮空模式,其电压状态是不确定的。
为了确保引脚的稳定性和避免电路不稳定,我们通常会将引脚配置为上拉或下拉模式。这样,即使在没有外部输入信号的情况下,引脚也能保持一个确定的默认电平状态。例如,在STM32刚上电时,芯片引脚电平是不确定的。特别是在引脚接按键时,必须给予它一个确定的电平。此时,下拉电阻的作用就至关重要,它能确保电平保持在低电平状态,从而防止引脚悬空和积累电荷的问题。
另外,根据拉电阻的阻值大小,我们可以将其分为强拉或弱拉。阻值越小,表示电平能力越强,同时也能增强抵抗外部噪声的能力,但相应的功耗也会有所增加。
按键的上拉电阻,常见的选择有3k、7k、1k以及10k等。然而,电阻值越小,意味着通过的电流越大,同时功耗也会相应增加。通常,10k的上拉电阻所提供的电流是大多数芯片能够正常识别的引脚电流范围。若电阻值过大,导致电流过小,芯片可能无法正常识别引脚状态。因此,10k的电阻值被视为一种折中的选择。这里的电流大小,可以通过简单的公式VDD/R拉电阻进行计算得出。
入门题:1)什么是开漏输出,什么是推挽输出?
2)芯片空余的引脚如何处理,接地?接电源?悬空?
进阶题:软件工程师说按键按下,CPU一直检测不到低电平,一直都是高电平,一口咬定是硬件问题,实测CPU的引脚确实也是3V左右的高电平。请问是软件问题还是硬件问题,原因是什么?
高级题:控制器输出0~10V电压,控制风扇的转速。目前该控制器存在这个问题:控制一上电,端口处就会输出400mS/5V左右的脉冲,导致上电瞬间风扇突然转动,客户不可接受,需整改。怎么解决?
骨灰题:下项目组一共开发了2款电表,高端版和低端版,主板是完全一样的,区别在于高端版带显示器,低端版不带显示器。两款设备在做EMC的ESD测试中,低端版设备做完实验后无法启动,高端版则正常,请问可能的原因在哪里?
一、GPIO的基础知识GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。GPIO口一是个比较重要的概念,用户可以通过GPIO口和硬件进行数据交互(如UART),控制硬件工作(如LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。几乎所有的CPU、MCU都会具GPIO功能,以下是作者统计的GPIO的种类,几乎囊括了所有的MCU的GPIO类型。
1) 输入浮空:即输入端口既不上拉也不下拉,电平由外部输入决定;这种模式较少,一般模拟量输入、按键扫描输入使用该模式。
2) 输入上:即输入端口配置一个电阻到电源端,该电阻可以使芯片内置,也可以是外部电阻。
3) 输入下:即输入端口配置一个电阻到地,该电阻可以使芯片内置,也可以是外部电阻。
4) 模拟输入:模拟量信号输入,需要芯片内部支持AD转换功能才可以。
5) 开输出: 漏极开路输出(OD) 和集电极开路输出(OC)十分相似,都是无法输出高电平,只能输出低电平,需要高电平时需要外接上拉电阻。
6) 推挽式输出:推挽输出既可以输出高电平也可以输出低电平,无需外配置电阻。
7) 推挽式复用功能:即推挽式输出和输入功能,使用时需要配置具体使用哪一种。
8) 开复用功能:即开漏输出和输入功能,使用时需要配置具体使用哪一种。
很多人看到上面一堆IO引脚的功能种类,肯定都是云里雾里的。先不急,看完下面这张“葵花宝典”,可以肯定市面上99%的CPU的GPIO功能都囊括了,拿着这张表,硬件工程师可以说服驱动工程师,驱动工程师可以忽悠软件工程师,就可以责任清晰,和平共处了。
二、上下拉电阻作用1) 上拉就是将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!下拉同理,下拉就是将不确定的信号通过一个电阻嵌位在低电平!电阻同时起限流作用!
2) 上拉是对器件注入电流,下拉是输出电流。
3) 弱强只是上拉电阻的阻值不同,没有什么严格区分。
4) 对于非集电极(或漏极)开路输出型电路(如普通门电路)提升电流和电压的能力是有限的,上拉电阻的功能主要是为集电极开路输出型电路输出电流通道。
5) 一般作单键触发使用时,如果IC本身没有内接电阻,为了使单键维持在不被触发的状态或是触发后回到原状态,必须在IC外部另接一电阻。
6) 数字电路有三种状态:高电平、低电平、和高阻状态,有些应用场合不希望出现高阻状态,可以通过上拉电阻或下拉电阻的方式使处于稳定状态,具体视设计要求而定!
7) 一般说的是I/O端口,有的可以设置,有的不可以设置,有的是内置,有的是需要外接。
8) 上拉电阻是用来解决总线驱动能力不足时提供电流的。一般说法是拉电流,下拉电阻是用来吸收电流的,也就是我们通常所说的灌电流。
9) 在I/O引脚悬空时,接电阻就是为了防止输入端悬空,从而提高系统的抗干扰能力。减弱外部电流对芯片产生的干扰。
10) 通过上拉或下拉来增加或减小驱动电流。
11) 上下拉电阻改变电平的电位,常用在TTL-CMOS匹配。
12) 上拉电阻可以为OC门或者OD门提供电流。
上下拉电阻阻值的大小
根据拉电阻的阻值大小,可以分为强拉或弱拉(weak pull-up/down)。拉电阻阻值越小则表示电平能力越强,为强拉,可以抵抗外部噪声的能力也越强,相应的功耗也越大。