问题引出:在正点原子的“输入捕获试验”中,目的是捕获高电平的持续时间,也就是捕获按键WK_UP的按下时间。在外围电路中,按下WK_UP,PA0是高电平。
按照《STM32中文参考手册》8.1.11外设的GPIO配置要求,需要把PA0配置为浮空输入。如图所示:
但是在例程代码里把PA0配置为下拉输入。结果:配置为下拉输入,程序正常运行;配置为浮空输入,程序无法运行。
疑问解答:
我们现在要捕捉的信号只有高电平,没有低电平,并且外围电路也没加下拉。要捕获高电平,输入引脚平时应该为低电平。
PA0设置为浮空的时候,有1.几伏不确定的电平,单片机也认为是高电平,和按键按下的高电平没有区分开,捕获不到上升沿。
PA0设置为下拉输入,平时PA0被内部强制下拉为低电平,按下按键,PA0为高电平,能捕获到上升沿。
引申:什么时候可以用浮空输入?
当捕获方波信号的时候,应该用浮空输入,不能用下拉输入。因为方波信号本身既有高电平也有低电平,强制下拉为低电平会影响方波信号。
总结:
捕获发生在上升沿或者下降沿,如果没有上升沿和下降沿,就无法发生捕获。被捕捉的信号本身没有上升沿或下降沿,要通过IO口输入设置造出上升沿或下降沿,被捕捉信号本身有上升沿或下降沿的,IO口设置为浮空输入即可。
浮空输入理解:
http://www.openedv.com/thread-21980-1-1.html
http://www.openedv.com/forum.php?mod=viewthread&tid=424&extra=&page=1
引脚设置为浮空输入,输入信号完全由外部决定,包括平时和输入时。上拉输入,平时为高电平(内部决定);下拉输入,平时为低电平(内部决定)。上下拉输入,只有在信号输入的时候,引脚状态才由外部决定。