要求:将连接按键的IO口配置为上拉输入,按键一端接IO口,一端接地,即当按键按下后,该IO口会产生一个下降沿,触发下降沿中断。
问题:将相应的IO口配置好后,测了引脚的的电压,并不是3.3V左右,而是0.1V左右。于是猜想:
- 外围电路对IO口产生了影响。
- STM32内部上拉能力较弱,一次只能上拉一个IO口。
于是开始从这两个想法着手解决。首先第一个,很容易就排除了。将外围电路撤掉,我用的是杜邦线,直接拔掉测量引脚上的电压,依然是0.1V左右,于是第1个猜想排除。
第二个,查看万能的参考手册,发现每一个IO口都是有独立的驱动电路,这样第2个也排除了。
最后各种纠结,然后发现:在主函数的开头部分初始化的时候,我把初始化的那个函数给注释掉了。低级错误,见笑了。
现在总结一下:
STM32的输入有4种输入模式:
模拟输入 GPIO_AIN
用于AD转换
浮空输入 GPIO_IN_FLOAtiNG
引脚处于浮空模式,电平状态是不确定的。外部信号输入什么,IO口就是什么状态。
上拉输入 GPIO_IPU
防止IO口出现不确定的状态,比如,当IO口悬空时,就会通过内部的上拉电阻将该点钳位在高电平。
下拉输入 GPIO_IPD
功能与上拉电阻类似,防止IO口出现不确定的状态,比如,当IO口悬空时,就会通过内部的下拉电阻将该点钳位在低电平。
STM32中空的I/O管脚是高电平还是低电平取决于具体情况。
1、IO端口复位后处于浮空状态,也就