stm32上拉输入和下拉输入怎么用?
用法很简单的,你按键是对地的肯定是要上拉输入了,下拉本来就基本是地了。
上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平。而在信号输入为低电平是输入端的电平应该也为低电平。
如果没有上拉电阻,在没有外界输入的情况下输入端是悬空的,它的电平是未知的无法保证的,上拉电阻就是为了保证无信号输入时输入端的电平为高电平,同样还有下拉电阻它是为了保证无信号输入时输入端的电平为低电平。
扩展资料:
需要注意的是,下拉输入和上拉输入是通过端口输出寄存器GPIOx_ODR来区分的。因此,在进行上拉/下拉输入配置时候,虽然对GPIO进行的关于输入的操作,但是仍要对和输出相关的寄存器ODR进行配置。
上述注意事项在实际代码编写时表现为:
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 下拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_ResetBits(GPIOA,GPIO_Pin_0); //PA0 下拉 ODR=0<strong>
</strong>
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 下拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_ResetBits(GPIOA,GPIO_Pin_0); //PA0 下拉 ODR=0<strong>
</strong>
虽然GPIO_Mode中区分了上拉输入模式GPIO_Mode_IPU和下拉输入模式GPIO_Mode_IPD,如下图所示,但是在GPIO初始化配置时候仍然需要对ODR寄存器进行设置
这是上拉电阻和下拉电阻的作用!所以你在这里设置时!是没有多大的区别的!
RCC->APB2ENR|=1CRH&=0XFF0FFFFF;
GPIOA->CRH|=0X00E00000;
GPIOA->ODR&=~(1<<13);
这段因该是把PA13设置成了下拉输入,但是我用电压表测是高电平。
可是我设置了上拉和下拉,结果都一样
你怎么检测的? 开了端口时钟了没?
2,GPIOA_CRH |=0x00E00000;表示把PA13设置成了复用功能开漏输出模式,最大输出速度2MHz,所以你的设置有误,正确的写法是:
GPIOA_CRH |=0x00800000;
GPIOA_ODR |=1<<13;
你是用万用表测的?