打印
[STM32F1]

usb接上线程序能跑,拔了线程序不跑?

[复制链接]
1803|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lcdi|  楼主 | 2014-1-25 15:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lcdi 于 2014-3-31 09:12 编辑

调试usb发现个奇怪现象。usb虚拟串口,移植官方例程,4.0的库。
然后加入自己的程序。接上usb,则程序能够运行。
拔掉usb,程序就不动了。很奇怪!
有没有遇到同样问题的?

————————————————————————————————————————————
确认问题与休眠有关。拔掉usb后,例程里有代码进入休眠,系统就进入stop模式了,所以还是对例程了解不透,谢谢大家帮忙!
沙发
清风致影| | 2014-1-25 16:32 | 只看该作者
我也遇到过这个问题,但检查是boot管脚接电阻部分,虚焊造成的,你检查看看

使用特权

评论回复
板凳
拿起书本| | 2014-1-25 19:41 | 只看该作者
看情况应该是硬件问题,楼主照楼上提供的方法仔细检查一下,希望早日解决问题。

使用特权

评论回复
地板
dirtwillfly| | 2014-1-25 20:57 | 只看该作者
同意硬件问题

使用特权

评论回复
5
lcdi|  楼主 | 2014-1-26 16:48 | 只看该作者
清风致影 发表于 2014-1-25 16:32
我也遇到过这个问题,但检查是boot管脚接电阻部分,虚焊造成的,你检查看看 ...

没查出问题呢。
接上usb,程序就运行,拔下来程序就暂停,再接上又会继续(不是复位)。
屏蔽了usb中断,程序就能跑了。

使用特权

评论回复
6
lcdi|  楼主 | 2014-1-26 16:51 | 只看该作者
拿起书本 发表于 2014-1-25 19:41
看情况应该是硬件问题,楼主照楼上提供的方法仔细检查一下,希望早日解决问题。 ...

屏蔽了usb中断程序就能跑了。我猜测是软件问题吧?不知道是否st的usb库或者例程有问题?

使用特权

评论回复
7
lcdi|  楼主 | 2014-1-26 16:53 | 只看该作者
dirtwillfly 发表于 2014-1-25 20:57
同意硬件问题

似乎是usb中断占用了大量cpu时间,因为屏蔽了中断就能跑了。
甚至没接usb的时候,用镊子给usb信号注入一点噪声,程序也能胡乱跑一些。

使用特权

评论回复
8
dirtwillfly| | 2014-1-26 21:26 | 只看该作者
lcdi 发表于 2014-1-26 16:53
似乎是usb中断占用了大量cpu时间,因为屏蔽了中断就能跑了。
甚至没接usb的时候,用镊子给usb信号注入一 ...

那有没有可能是USB电路的干扰和电平状态影响的?

使用特权

评论回复
9
玄德| | 2014-1-27 10:03 | 只看该作者
7楼正确。

我遇到类似情况,即使和PC连接,也会频繁运行USB底层程序,占用CPU时间。暂时用别的方法绕开。

使用特权

评论回复
10
hbchf| | 2014-1-27 14:14 | 只看该作者
简单的共地问题

使用特权

评论回复
11
lcdi|  楼主 | 2014-1-27 15:17 | 只看该作者
dirtwillfly 发表于 2014-1-26 21:26
那有没有可能是USB电路的干扰和电平状态影响的?

不是吧,因为是加入噪声程序才跑的。不加的话程序几乎不跑(其实还是极慢的在跑)。

使用特权

评论回复
12
lcdi|  楼主 | 2014-1-27 15:17 | 只看该作者
玄德 发表于 2014-1-27 10:03
7楼正确。

我遇到类似情况,即使和PC连接,也会频繁运行USB底层程序,占用CPU时间。暂时用别的方法绕开。 ...

我的又不同,连上pc的usb,就一切正常了。程序也能跑起了。

使用特权

评论回复
13
dirtwillfly| | 2014-1-27 16:30 | 只看该作者
lcdi 发表于 2014-1-27 15:17
不是吧,因为是加入噪声程序才跑的。不加的话程序几乎不跑(其实还是极慢的在跑)。 ...

:L不明白你的程序时怎么跑的

使用特权

评论回复
14
lcdi|  楼主 | 2014-1-29 10:44 | 只看该作者
dirtwillfly 发表于 2014-1-27 16:30
不明白你的程序时怎么跑的

本来是一个信息采集加液晶显示波形的东西。
现象就是看液晶刷屏(在定时中断中启动,然后spi中断中刷新数据)。
接上电脑的usb则正常。没接上的话屏幕几乎不刷,等一下刷几个点,这样子的。用镊子给usb的信号注入一点噪声,刷屏就间或跑起来一下(瞬间)。

接上电脑usb正常,拔下不刷屏,再插上又正常,有波形显示,再插拔一次波形接上次的位置。所以可以看出过程中程序没有复位。那么应该不是复位电路的问题。

屏蔽了usb低优先中断则刷屏正常。所以猜想是usb中断占用了太多时间,但是usb线都没接,为什么会频繁中断呢?
倒是接上usb估计有正确的信息,中断处理就比较顺了,所以就正常了?!

直接用的4.0的库,中断程序没改动过,所以有点疑惑?

使用特权

评论回复
15
jack249| | 2014-1-29 17:14 | 只看该作者
ST有些官方例程的中断会在侦察到USB没接上时让程式进入低功耗模式
去看看usb_pwr.c里的 void Suspend(void)
里面有进入STOP模式的code
你看看是不是进入STOP模式了

使用特权

评论回复
16
caijie187| | 2014-1-29 20:26 | 只看该作者
学习一下

使用特权

评论回复
17
pattywu| | 2014-3-30 18:01 | 只看该作者
15楼正确。

使用特权

评论回复
18
香水城| | 2014-3-31 16:09 | 只看该作者
按道理,USB拔出后,USB设备是不应该进入挂起状态的(Suspend),也因此走不到Suspend()这个函数的调用。看来,应该在suspend时,延迟一下,看是否已经断开和主机的连接:是的话,就不是挂起状态。

看来,USB的这个库还是需要再改改。

使用特权

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

本版积分规则

个人签名:http://www.eeboard.com/avago-shengji?invite_id=5579

33

主题

417

帖子

7

粉丝