stm32设置内部上拉电阻_比较全面的电阻上、下拉介绍

stm32设置内部上拉电阻_比较全面的电阻上、下拉介绍_miss废柴的博客-优快云博客

1、拉电阻的作用

上拉(Pull Up )或下拉(Pull Down)电阻,两者统称为“拉电阻”,作用:将状态不确定的信号线箝位至高电平(上拉)或低电平(下拉)。

如果输入引脚接上拉或下拉电阻,可以将该引脚确定为高电平或低电平,防止外界的干扰,如下图所示:

2、选择上拉还是下拉

使用上拉电阻还是下拉电阻,取决于电路实际情况。

下拉电阻:

当我们希望某个引脚不控制时为低电平,同时控制时可以为高电平,如高电平有效的使能控制信号(EN),应使用下拉电阻。保证在上电后或运行中即使受到干扰仍为低电平。

上拉电阻:

对于低电平有效的复位控制信号(RST#),若处于悬空状态,刚上电或运行中受到干扰变成低电平,会导致错误复位,此时应该用上拉电阻。

一些比较简单的单片机(如STC89C51RC)内部可能没有集成上拉电阻或下拉电阻,需要在电路中增加,但大多数高级一些的控制芯片都会集成上拉或下拉电阻(如STC15W408AS),下图为STM32F4xx是GPIO内部上拉或下拉介绍(来自STM32F4xx数据手册):

3、选择强拉还是弱拉

根据阻值大小可分为强拉或弱拉(weak pull-up/down),一般芯片内部集成的电阻都比较大,为弱拉。拉电阻的阻值越小,电流越大,抗干扰能力越强,但电阻上的功耗也越大,如下图所示:


上拉电阻R1:控制器每次输出低电平L,都会有VCC/R1的电流消耗能量。

下拉电阻R2:控制器每次输出高电平H=VCC,都有VCC/R2R电流消耗能量。

强拉与弱拉之间的电阻值没有明显的分界,一般我们用的拉电阻都是弱拉,便于控制器改变信号线电平。

强拉电阻的极端就是电阻为0,如EEPROM存储芯片24C02的电路,如下图所示:


E0,E1,E2(地址配置位)通常直接VCC或GND,因为存储芯片的地址在运行中不再变化,同样,芯片的写控制引脚WC(Write Control)也被强下拉到GND。

4、输出引脚的拉电阻

对于开集(Open Collector,OC)或开漏(Open Drain,OD)模式的引脚接拉电阻有另一种意义,芯片的有些输出引脚是推挽输出结构(Output Push-Pull),如下图所示:

推挽输出结构特点:无论输出高电平“1”还是低电平“0”,驱动(输入或输出电流)能力都比较强。

灌电流(Sink Current):控制信号为低电平“0”时,Q1截止Q2导通,电流I1由电源VCC经负载RL与三极管Q2流向GND,如下图所示:

拉电流(Source Current):控制信号为高电平“1”时,Q1导通Q2截止,电流I1由电源VCC经三极管Q1与负载RL流向GND,如下图所示:

任何芯片的引脚驱动能力都是有限的,如下图所示为STM32单片机的IO最大电流(来自STM32F4xx数据手册):

5、拉电阻的阻值选择

如果引脚驱动的负载比较重,即负载电阻过小,将可能导致输出电平不正确(无法输出设定的电平),如下图所示:

假定芯片的供电电压为3.3V,则输出最大电流25mA时,负载RL的值约为132欧姆(3.3V/25mA),如果负载值小于132欧姆,理论上输出电流会更大(超过25mA),但是芯片引脚只能提供最大25mA的电流,因此,输出电平将会下降。

一般驱动重负载(小电阻)时不会烧芯片,但实际应用过程中尽量不要超出引脚的驱动能力。

而OC(OD)的引脚输出结构有所不同(OC结构存在于三极管,而OD结构存在于场效管,下面以OC输出结构为例,OD输出结构的原理是一致的),如下图所示:

当三极管Q1的基极为高电平“1”时,Q1导通,对应输出引脚为低电平,如下图所示:

基极为低电平“0”时,三极管Q1截止,如果没有上拉电阻,该引脚处于高阻态,无法输出高电平,即 OC/OD结构输出的引脚不能向外提供电流。因此,通常将OC/OD引脚接上拉电阻到VCC,如下图所示:

大多数比较器芯片的输出都是OD/OC输出结构,如下图所示(来自TI比较器LM393数据手册):

对于OD/OC结构的引脚,可以根据系统实际需要上拉到对应的电源VCC,不需要电平转换,如下图所示(来自东芝步进电机控制芯片TB6560数据手册)

I2C总线也是典型的OD输出结构的应用,如下图所示:

其中,SCL与SDA都是OD输出结构,如果芯片引脚使用推挽结构,则两个或多个芯片的引脚连接时将如下图所示:

上图中的芯片分别输出0与1,此时有非常大的电流自电源VCC经Q1与Q4到GND,虽然大多数情况下不至于烧芯片,但也会引起很大的功率消耗,同时也会导致数据不准确,芯片1要拉高电平,芯片2要拉低电平。

如果使用OC/OD输出结构,则相应的电路如下图所示:

此时,无论两个芯片的引脚输出什么状态,都不会引起数据冲突,即任何一方都可以将信号线拉高或拉低。我们所熟悉的51单片机P0口也是OD结构,如下图所示(来自单片机AT89C51数据手册):

前面所述上拉电阻的阻值对输入引脚引起的功耗同样适用于输出拉电阻,因此拉电阻不宜太小,但在输出信号速度比较快的电路下,拉电阻也不宜太大,因为电阻越大电流越小,导致电平变化缓慢。如下图所示为I2C总线上拉电阻的参考最大值(来自存储芯片 AT24C02数据手册)。

在总线上有些杂散电容CBUS,与上拉电阻RL形成RC充放电电路,上拉电阻越大则充放电常数越大,电平变化越缓慢,如下图所示,严重时导致数据无法正常识别。

END
————————————————
版权声明:本文为优快云博主「miss废柴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/weixin_32280593/article/details/112290797

<think>好的,我现在需要回答用户关于如何在STM32配置上拉电阻的问题。首先,我得回忆一下STM32的GPIO配置相关知识。用户提到了几个引用,我需要结合这些引用来整理正确的步骤。 根据引用[3],当按键有上拉电阻时,GPIO应配置为输入模式并开启内部上拉。这说明上拉电阻配置和GPIO模式有关。引用[2]提到GPIO的工作模式包括上拉、下拉、推挽、开漏等,而配置这些模式需要初始化相应的结构体参数。引用[4]则解释了推挽和开漏输出的结构,这可能与输出模式下的上拉有关,但用户的问题主要是关于设置上拉电阻,所以重点可能在输入模式。 首先,配置上拉电阻的步骤应该包括使能对应的GPIO时钟,然后设置GPIO的模式为上拉输入。例如,引用[3]中的例子是按键连接GPIO的情况,配置为输入模式并开启上拉。代码部分可能需要使用GPIO_InitTypeDef结构体,设置GPIO_Pin、GPIO_Mode为GPIO_Mode_IPU(上拉输入),然后调用GPIO_Init函数。 同时,引用[1]中的代码示例展示了如何配置GPIOA的PA13和PA14为推挽输出,但用户需要的是上拉输入。所以步骤应该是类似的,但模式不同。另外,需要注意是否需要使能AFIO时钟,但根据引用[1],当进行端口重映射时才需要使能AFIO,而普通的上拉配置可能不需要,所以可能只需使能对应GPIO端口的时钟。 总结步骤:1. 使能GPIO端口时钟;2. 配置GPIO引脚的模式为上拉输入;3. 初始化GPIO。此外,还需要确认是否需要配置其他参数,比如速度,但输入模式下速度可能不重要,不过有些库函数可能需要设置,需要参考具体库的文档。 可能还需要区分输入和输出模式下的上拉配置。例如,输出模式下可能需要不同的配置,但用户的问题是关于上拉电阻设置,通常用于输入模式。因此,正确的模式应该是GPIO_Mode_IPU,即输入上拉模式。 现在需要将这些整理成步骤,并引用相关的引用来源。同时,用户可能需要示例代码,类似引用[1]中的结构,但调整模式为上拉输入。例如,配置PA0为上拉输入: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 输入模式下速度可能可选 GPIO_Init(GPIOA, &GPIO_InitStructure); 需要确认GPIO_Mode_IPU是否正确,根据引用[3],是的。同时,引用[2]提到输入模式需要选择上拉或下拉,所以模式应该是GPIO_Mode_IPU。 最后,生成相关问题,比如如何配置下拉电阻,输入输出模式的区别,或者上拉电阻的应用场景。</think>在STM32配置GPIO上拉电阻的方法如下: ### 1. 使能GPIO端口时钟 通过RCC寄存器使能对应GPIO端口的时钟。例如配置PA5引脚: ```c RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIOA时钟[^2] ``` ### 2. 配置GPIO初始化结构体 设置`GPIO_Mode`为`GPIO_Mode_IPU`(Input Pull-Up,输入上拉模式)[^3]: ```c GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; // 选择引脚5 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 速度参数(输入模式下可选) ``` ### 3. 执行初始化 调用`GPIO_Init()`函数完成配置: ```c GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化PA5为上拉输入[^1] ``` ### 关键点说明 - **上拉电阻作用**:在无外部信号时,将引脚电平稳定在高电平[^3] - **模式选择**:输出模式(如推挽输出)与输入模式的上拉配置互斥[^4] - **应用场景**:常用于按键检测、总线空闲状态维持等需要确定默认电平的场合
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值