pwm和gpio接口编程心得(软件工程师遇到一个IO关不掉LED的问题)
pwm和gpio接口编程心得(软件工程师遇到一个IO关不掉LED的问题)我赶紧让软件工程师再仔细检查一下程序,为什么会出现方波。最后,在软件工程师的努力下,终于把原因找到了。原来他在软件里对LED进行了这样的操作,当检测到某个IO被拉低后,LED就快速闪烁。当把电路板装到设备上时,那个IO刚好是被拉低了,所以一直是闪烁的,又由于LED之间的亮灭延时没设置乛⼃⼀乛,延时太短,闪烁频率太快,肉眼看不出来,造成了LED熄灭不了的假象。
软件工程师告诉我,他遇到了一个奇怪的问题。他在调试一个控制板时,控制板上有一个IO口控制一个LED,可是这个IO口怎么也控制不了LED灭掉。电路是这样的。
从上图的电路可以知道,IO口给高电平时,电路就输出高电压,LED就被点亮;IO口给低电平时,电路就输出低电压,LED就熄灭。软件工程师说现在软件已经将IO置0了,但是LED却没有熄灭。
听完软件工程师的描述后,我开始了排查工作。第一时间第一反应就是用万用表测量IO口是不是低电平,结果测出来的电压是2V多。IO不是已经置0了吗,怎么还有2V多。我问软件工程师是不是确定IO已经置0了,他十分肯定地说是的,因为他已经反反复复检查程序很多遍了。
我半信半疑,但是我还是决定自己验证一遍。于是,我就自己新建了一个工程,程序里只有几条简单语句,就是让IO输出低电平。把这个程序编译好后,下载到板上,结果LED熄灭了,再用万用表测IO口电平,是0V。这样看来,软件工程师的程序应该是没有把IO置0。我叫软件工程师重新给我下了一个程序,结果我用示波器一测量,IO输出的是一个方波,并且方波的频率比较高,就算LED关断了,由于视觉暂留的原因,人眼看起来也是常亮的。
我赶紧让软件工程师再仔细检查一下程序,为什么会出现方波。最后,在软件工程师的努力下,终于把原因找到了。原来他在软件里对LED进行了这样的操作,当检测到某个IO被拉低后,LED就快速闪烁。当把电路板装到设备上时,那个IO刚好是被拉低了,所以一直是闪烁的,又由于LED之间的亮灭延时没设置乛⼃⼀乛,延时太短,闪烁频率太快,肉眼看不出来,造成了LED熄灭不了的假象。