原先的项目是用MSP430单片机,按键的一端接上拉电阻后和单片机的IO口连接,另一端直接接GND。当没有按键按下时,IO口读取到的是高电平,当按键按下时,IO口读取的是低电平。
现在采用EFM32单片机,还是同样的按键电路,在测试时发现,有几个按键按下时,单片机直接复位重启,而另外几个按键则能正常使用。8个按键采用的PA7--PA14共8个IO口。仔细检查硬件连接,发现按键电路没有问题,在松开按键时确实是高电平,按下按键时确实是低电平,并且没有将单片机的复位引脚拉低,同时单片机的电源电压也都正常,没有噪声。
后来查看官方开发板的电路图,发现按键是这样连接的。
在按键和GND连接的一端串接了一个100R的电阻。将我的按键电路按照这种方式修改后,所有按键都能正常使用了。
由此看来,这个问题是EFM32单片机内部IO口电路结构引起的,由于没有IO口的电路结构图,所以不能找到具体原因。但是可以肯定是,EFM32单片机为了达到低功耗的要求,肯定是在内部电路结构上做了调整和优化,由此导致了和其他一些单片机在使用上的一些小差异。
所以,在降低功耗的同时,可能也引起了抗干扰性的降低,所谓“鱼和熊掌不能兼得”。
希望同好们在应用的时候能绷紧这个弦,在硬件电路设计和软件设计时能时刻考虑到干扰的影响和芯片的特性,以避免走弯路,浪费不必要的时间。