本人刚用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会进行复位,但实际上静电后,输入失效,灯并没有闪烁,也就是并没有进行复位动作。
原理图和电路板如下:
总结:
静电后有时候USB会自动重连,有时候USB会卡住没有反应。
SWD在静电后无法查看MCU运行到哪里,每次都会失去连接……
MCU并没有复位到main函数的开头(因为启动文件里直接指向main,可以说是没有进行复位动作)
疑问:
MCU在地线遇到静电之后运行到了哪里?(不知道这个静电问题是需要从硬件上避免,还是从软件上去解决)
现在希望避免USB失去连接(希望不要断开重连,因为上位机对应的游戏程序不支持),要如何在USB出错后,不重新检测设备的情况下恢复到正常状态?
万分感谢各位!
此帖出自
小平头技术问答
一周热门 更多>