STM32F4中GPIO_PuPd寄存器为什么设置上拉与下拉其原因是什么

本文深入解析STM32F4中GPIO_PuPd寄存器的功能与配置,探讨上拉与下拉电阻的作用及应用场景。详细解释了上拉与下拉电阻如何防止IO浮空,以及它们在电路设计中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STM32F4中GPIO_PuPd寄存器设置上拉与下拉问题

 

首先 上下拉 是给IO一个默认的状态 比如控制EN的话,那么高有效的我们就下拉,低有效的话我们就上拉
而 很多IO 由于CMOS工艺问题会出现float的现象,所以不能悬空 需要PU PD。

 

上拉和下拉是指GPIO输出高电位(上拉)还是低电位(下拉)。
上拉就是输入高电平,然后接一个上拉电阻(起保护作用),知道上拉就表示该端口在默认情况下输入为高电平。

下拉就相反了,指输入低电平,然后接一个下拉电阻。

那么,什么是高电平,什么是低电平呢?这是电路方面的知识,百度百科讲的,表示不太懂。

上拉就是将不确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用。
下拉同理。也是将不确定的信号通过一个电阻钳位在低电平。
不过从程序设计的角度讲,
上拉就是如果没有输入信号则此时I/O状态为1,下拉相反。

具体配置为上拉还是下拉,要看电路图。看外部有没有上下拉电阻。

 

 

上拉寄存器是控制对应端口上拉使能的。当对应位为0时,设置对应引脚上拉使能,为1时,禁止对应引脚上拉使能。如果上拉寄存器使能,无论引脚功能寄存器如何设置(输入,输出,数据,中断等),对应引脚输出高电平。可见对应于S3C2410的GPB-BPH口内部有上拉电阻寄存器,当相应的上拉电阻使能时,对应的I/O引脚悬空时,表现出高电平。反之,表现出低电平。

 

上拉是一个电阻接到一个电压,其实就是增强IO的驱动能力。下拉是一个电阻接到地,保证IO口是低电平。

 

主要是用在TTL电平和CMOS电平之间的相互驱动上面。TTL电平和CMOS电平的逻辑0和1的定义是不一样的,打个比方,你的IO输出逻辑1时电平是3.3V,而接到IO上的元件的逻辑1是5V,这时就要将这个IO接一个上拉,使该IO的逻辑1能够和其驱动的设备的逻辑1电平相当。具体上拉下拉电阻怎么计算,这要看IO输出的电流是多少,这个电流经过上下拉电阻时会产生一个压降,一般上拉电阻接到的电源电压减去这个压降就是该IO可以被拉到的电平值,要求这个上拉电平值能够达到逻辑1的下限。具体那篇文章可以在论坛里搜索一下。

1、一般作单键触发使用时,如果IC本身没有内接电阻,为了使单键维持在不被触发的状态或是触发后回到原状态,必须在IC外部另接一电阻。
2、数字电路有三种状态:高电平、低电平、和高阻状态,有些应用场合不希望出现高阻状态,可以通过上拉电阻或下拉电阻的方式使处于稳定状态,具体视设计要求而定。
3、I/O端口,有的可以设置,有的不可以设置,有的是内置,有的是需要外接,I/O端口的输出类似与一个三极管的C,当C接通过一个电阻和电源连接在一起的时候,该电阻成为上C拉电阻,也就是说,如果该端口正常时为高电平,C通过一个电阻和地连接在一起的时候,该电阻称为下拉电阻,使该端口平时为低电平,作用:比如,当一个接有上拉电阻的端口设为输入状态时,他的常态就为高电平,用于检测低电平的输入。 
4、上拉电阻有时是用来解决总线驱动能力不足时提供电流的,一般说法是拉电流;下拉电阻是用来吸收电流的,也就是灌电流。比如有I2C总线使用会上拉一个10k的电阻。

端口选择还应该注意端口的初始的状态。这个状态是系统复位时的状态,是不受上层软件控制的,假如选择的端口正常是高电平有效的,那么应该选一个系统复位时,是下拉状态的端口。

v 通过引脚 GPIO_PinAFConfigO将其连接到相应的复用功能 、 通过函数 GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF 配置为复用模式、 通过 GPIO_PuPd, GPIO_OType 和 GPIO_Speed选择上拉下拉,类型和速度 094 GPIO_InitO 通过函数GPIO_ReadlnputDataBit()读取输入数据寄存器的数据 > 在输出模式时,通过函数 GPIO_SetBitsO)/GPIO_ResetBits0配置引脚的置位和复位系统复位后,复用功能是被禁止的,引脚默认被配置成浮空输入模式(除了JTAG 引脚 LSE 振荡器引脚 OSC32_IN/OSC32_OUT 可以分别用做GPIO 的PC14/PC15,条件是LSE 振荡器功能被关闭,LSE 振荡器功能始終优先于通用1/0 口的功能。 > HSE 振荡器引脚 OSC_IN/OSC_OUT 可以分别用做GPIO 的 PHO/PH1,条件是 HSE 振荡器功能被关闭,LSE 振荡器功能始终优先于通用1/0 口的功能。 .1.6 GPIO 库的功能配置函数 GPIO 的初始化和配置函数主要有以下几个: void GPIO_Delnit(GPIO. _ TypeDef* GPIOx) 初始化 GPIO 寄存器到默认的复位值,参数中GPIOx为结构体指针变量针对特定的引脚,通过下面的函数实现 void GPIO_Init(GPIO_ TypeDef* GPIOx, GPIO_ _Init TypeDef* GPIO_InitStru 这个函数主要实现 GPIO 的初始化,stm32f4xx_gpio.c 文件里面最主要! 函数了,举个简单的例子,有兴趣的可以研究下这个函数的具体代码。配 18 推挽输出,速度 100MHz。 /* GPIOG Periph clock enable */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE); /* Configure PG6 and PG8 in output pushpull mode */ GPIO InitStructure. GPIO _Pin= GPIO_Pin_6| GPIO_Pin_8; GPIO InitStructure. GPIO _Mode = GPIO_ Mode_OUT; GPIO_InitStructure. GPIO_OType = GPIO_OType_PP; GPIO_ InitStructure. GPIO_Speed = GPIO_Speed_100MHz; GPIO _InitStructure. GPIO_PuPd = GPIO. _PuPd _NOPULL; GPIO_Init(GPIOG, &GPIO_InitStructure); void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct) 这个函数将 GPIO_InitStructure 作为参数传递到配置结构体,然后在该函数内部实现了相应寄存器的配置。一行一行解释以上代码
最新发布
06-11
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值