打印

[求救]STM32f103/105手摸8M晶振后,USB不再接收,其它正常

[复制链接]
5465|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kevin_ares|  楼主 | 2011-9-22 17:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 kevin_ares 于 2011-9-23 09:46 编辑

我用的是otgd_fs  V3.3.0 的USB库,

103和105用的是同样的板,只是MCU不同,

均用的这个3.30的USB库,当然根据宏不同,他们用的完全是不同的内容,

如果没有干扰,一切都工作正常.,

但当用手摸8M晶振后,两块板出现同样症状,USB只能发给PC,不能收到PC的东西 ,

其它功能都全正常,就是USB不再生产 OUT中断了

这个USB库基本没有错误处理,我觉得是主时钟乱了后,USB没办法从出错中恢复过来

但我对USB底层硬件不太熟,所以也没办法帮他加上去,请各位高手指点
沙发
kevin_ares|  楼主 | 2011-9-23 09:48 | 只看该作者
主要是产品在客户那测试,发现过了不定时间(几小时-几天)会出现不再理会PC的指令

于时拿回来测试,发现手摸的时候会马上出错

后来再反复测试,发现手同时摸到8M晶振的2只脚,就立即出现这种情况

使用特权

评论回复
板凳
香水城| | 2011-9-23 09:59 | 只看该作者
手碰到晶振会停振。

LZ的产品是裸奔吗?没有外壳?正常工作时手还能接触到内部元器件?

使用特权

评论回复
地板
kevin_ares|  楼主 | 2011-9-23 10:07 | 只看该作者
产品确实没有外壳,而且环境内还有电机之类的干扰源

在没有手摸的时候,要(几小时-几天)不定时出现这问题..

使用特权

评论回复
5
kevin_ares|  楼主 | 2011-9-23 10:10 | 只看该作者
版主能指导一个软件上可以解决的办法吗.

例如USB模块能不能在不影响其它部分的情况下,将自己复位

使用特权

评论回复
6
香水城| | 2011-9-23 10:16 | 只看该作者
重新调用USB的初始化部分可以复位USB。

使用特权

评论回复
7
IJK| | 2011-9-23 10:30 | 只看该作者
在我看来,这完全是LZ板子的问题。一般情况下,8M晶振的外壳都是金属的(银白色),正规的做法是:8M晶振的外壳焊接到板子的地上,这样就可以避免手摸的问题。

使用特权

评论回复
8
kevin_ares|  楼主 | 2011-9-23 10:38 | 只看该作者
我把晶振外壳已经接到地了...
直接摸晶振没事
把手指同时摸到晶振的两个脚才会这样
我刚试过把USB时钟关了再开,然后重新调用USB_Init()函数没有反应,
PC端也无法重新open device,只能复位stm32板

使用特权

评论回复
9
kevin_ares|  楼主 | 2011-9-23 10:40 | 只看该作者
当手摸晶振时,串口输出也是乱的,但手离开后,串口就能恢复正常工作

现在主要问题是,当主时钟乱了后,USB模块如果做出错恢复

使用特权

评论回复
10
香水城| | 2011-9-23 10:51 | 只看该作者
复位USB的一个简单做法是,把D+的1.5K上拉电阻暂时断开,然后再接通即可。这个过程可以通过程序控制,剩下的事情主机与USB库会自动完成重新连接。

使用特权

评论回复
11
香水城| | 2011-9-23 10:53 | 只看该作者
说实话,USB的设计初衷不适用于有电机之类干扰源的环境,这种环境下应该考虑使用CAN、485等抗干扰能力强的通信协议。

使用特权

评论回复
12
kevin_ares|  楼主 | 2011-9-23 11:43 | 只看该作者
因为是和PC通迅,所以没办法用这些,

我正好PA8来控制USB的D+,

我刚试了下,在出错后,将PA8设低一段时间后,再拉高,

PC端在右下角会提示找到一个无法识别的USB设备,PID VID全是0

使用特权

评论回复
13
香水城| | 2011-9-23 11:46 | 只看该作者
因为是和PC通迅,所以没办法用这些,

我正好PA8来控制USB的D+,

我刚试了下,在出错后,将PA8设低一段时间后,再拉高,

PC端在右下角会提示找到一个无法识别的USB设备,PID VID全是0 ...
kevin_ares 发表于 2011-9-23 11:43


将PA8设低一段时间后,再拉高。这个过程要长一些,最好10~20秒以上。

使用特权

评论回复
14
kevin_ares|  楼主 | 2011-9-23 13:55 | 只看该作者
谢谢香版指点,断开久一点,再加上usb_init确实是可以在PC端重新打开

但我本来需要就需要心跳来检测USB是否已经异常,这需要差不多五秒

再断开几秒,这样已经影响数据的连续性,

不知道是否有一些状态寄存器来指示这些错误情况

使用特权

评论回复
15
wei2ai| | 2011-9-23 13:57 | 只看该作者
bucuo

使用特权

评论回复
16
zhangli542| | 2011-9-23 14:05 | 只看该作者
看看

使用特权

评论回复
17
香水城| | 2011-9-23 14:07 | 只看该作者
谢谢香版指点,断开久一点,再加上usb_init确实是可以在PC端重新打开

但我本来需要就需要心跳来检测USB是否已经异常,这需要差不多五秒

再断开几秒,这样已经影响数据的连续性,

不知道是否有一些状态寄存器来指示这些 ...
kevin_ares 发表于 2011-9-23 13:55


没有某个状态寄存器专门用于指示你这种错误,况且现在谁也说不清你具体遇到的是什么错误。

估计你要多花点时间仔细地对比一下正常与不正常情况下,所有相关寄存器有哪些不同,然后再分析怎么解决。目前看,我也没有什么好办法。

使用特权

评论回复
18
香水城| | 2011-9-23 14:09 | 只看该作者
而且因为我在11楼说的原因,有可能找不到一个非常有效又满意的办法,这是一个体制的问题而不是简单的技术问题。

使用特权

评论回复
19
一览| | 2011-9-23 14:58 | 只看该作者
USB接口不是太适合长时间工作的,尤其在工业场合。
这个当然也和USB核设计有关。

使用特权

评论回复
20
aozima| | 2011-9-23 15:20 | 只看该作者
晶振停了,HOST侧会移除这个设备.

可以使用打开时钟异常中断,如果有的话,不知道STM32有没有.

重新连接时,应该断开数据线上面的上拉电阻,相当于插拔USB线.

手都摸到晶振两个脚了,死了也不能怪芯片.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

47

帖子

2

粉丝