一、GPIO的四种输入模式
1、上拉输入(GPIO_Mode_IPU)CNF[1:0](10) MODE[1:0](00)
上拉输入,就是信号进入芯片后被内部一个上拉电阻上拉,再经过施密特触发器转换为0、1信号,因此,复位后该引脚电平为高电平。(亦可理解为按下按键后输入高电平)
2、下拉输入(GPIO_Mode_IPD)CNF[1:0](10) MODE[1:0](00)
下拉输入,就是信号进入芯片后被内部的一个下拉电阻下拉,再经过施密特触发器转化为0、1信号,因此,复位后该引脚电平为低电平。(亦可理解为按下按键后输入低电平)
3、模拟输入(GPIO_Mode_AIN)CNF[1:0](00) MODE[1:0](00)
信号进入芯片后不经过上拉电阻或者下拉电阻,也不经过施密特触发器,经由另一线路把电压信号传到片上相对应的外设模块,例如,通常是ADC模块,然后由ADC采集电压信号。因此,可以将这种方式理解为模拟输入的信号是未经过处理的信号,是“原味”信号。
4、浮空输入(GPIO_Mode_IN_FLOAITING)CNF[1:0](01) MODE[1:0](00)
信号进入芯片内部后,既不经过上拉电阻也不经过上拉电阻,只经过由施密特触发器输入。如果配置成该模式,用电压表测量其引脚电压为1V左右,是个不确定的值。由于其输入阻抗比较大,所以一般这种模式用于标准通信协议,如I2C、USART等。
二、应用
1、原理图:
声明:参考普中科技STM32F1开发板
在这里可以看到,KEY_UP按键是高电平有效的,即当按下该按键时,GPIO读到高电平。KEY1/2/3是低电平有效的,即当按下该按键时,GPIO读到低电平。而且外部电路都没有上下拉电阻。所以,需要在STM32内部配置上下拉。上拉就是将不确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用。下拉同理,也是将不确定的信号通过一个电阻钳位在低电平。
2、配置程序如下:
3、注意事项:
按键的应用还需要注意消抖。
经典消抖示意图:
按键消抖通常处理:当检测到按键有效电平后,延时5~10ms,再次判断电平是否有效。