静电干扰后STM32处于怎样的情况?(以及USB如何恢复)

2019-03-23 18:34发布

本人刚用STM32不到一年,因为这次遇到的问题实在不知道要如何解决,故上来求助。



问题如下:

产品功能是一个USB-HID键盘设备,外壳是金属的,已与主机电源的地线相接。



在干燥天气时,人体对键盘的金属外壳放静电,会导致键盘输入功能失效,已测试遇到的情况有如下几种:

(以下情况是同一种电路板,焊接了多块测试出的,每一块都会产生所有的情况)

1、对键盘外壳放静电,导致无法输入内容,windows系统里没有USB断开的声音。

2、对键盘外壳放静电,导致无法输入内容,windows系统里有USB断开的声音,过了大约1秒之后又有USB连上,然后恢复输入。

3、对主机电源外壳放电,也会产生如上的两种情形。

(主机上同时插有雷柏和logit的键鼠,静电产生后仍然能正常使用)



使用bus hound检测USB的时候,产生静电时会提示以下内容:


13  USTS   04 00 00 c0                pid stalled    4.0ms    123906.1.0        

13  USTS   00 70 00 c0                error          9.4ms    123907.1.0        




使用SWD在板子上进行监控,当静电释放到外壳后,产生如上情况,此时想看MCU运行到哪里时,SWD提示找不到设备……





程序中没有使用看门狗。

在main程序的开始增加了一个LED闪烁0.2秒的程序,当静电释放后原以为MCU会进行复位,但实际上静电后,输入失效,灯并没有闪烁,也就是并没有进行复位动作。





原理图和电路板如下:

QQ截图20150601142622.png

QQ图片20150601141141.png

QQ截图20150601141204.png





总结:

静电后有时候USB会自动重连,有时候USB会卡住没有反应。

SWD在静电后无法查看MCU运行到哪里,每次都会失去连接……

MCU并没有复位到main函数的开头(因为启动文件里直接指向main,可以说是没有进行复位动作)



疑问:

MCU在地线遇到静电之后运行到了哪里?(不知道这个静电问题是需要从硬件上避免,还是从软件上去解决)

现在希望避免USB失去连接(希望不要断开重连,因为上位机对应的游戏程序不支持),要如何在USB出错后,不重新检测设备的情况下恢复到正常状态?





万分感谢各位!


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。