[STM32F4] 新的stm32f4 usb dcd库使用

[复制链接]
 楼主| bjxdylzsts 发表于 2014-4-22 11:50 | 显示全部楼层 |阅读模式
浏览一下论坛里关于 usb的帖子,基本都是 usb fs 老版本的库,有人使用新版本的库么?使用过程中有啥问题没有?有的话 大家分享一下 以后也少走弯路。

起个头

usb_dcd_ini.c  DCD_WriteEmptyTxFifo函数有个bug,会导致经常死讯混,导致usb库耗时过长。应该如下修改:
错误.png
 楼主| bjxdylzsts 发表于 2014-4-22 11:51 | 显示全部楼层
有人用f4 的新的库的么,顶起来,沙发我占了~
玄德 发表于 2014-4-22 13:30 | 显示全部楼层
也用这个库,遇到类似问题,有时会死机。

怎么改,lz能说清楚点吗?

 楼主| bjxdylzsts 发表于 2014-4-22 13:48 | 显示全部楼层
玄德 发表于 2014-4-22 13:30
也用这个库,遇到类似问题,有时会死机。

怎么改,lz能说清楚点吗?

那个函数加图上红色部分就ok了啊
玄德 发表于 2014-4-22 13:59 | 显示全部楼层

明白了,回头试一试。

多谢了。


zcl143 发表于 2014-4-22 15:39 | 显示全部楼层
感谢楼主分享
jialaolian 发表于 2014-5-8 19:24 | 显示全部楼层
我也碰到了在这个地方死机,我是一直进入中断,不能退出,晚上回去试下看看,谢谢楼主啦
aoty 发表于 2014-5-15 10:45 | 显示全部楼层
楼主,你好!我最近也在调试USB,但是调出来的效果不是很令人满意的!
感觉USB对时间的要求比较严格,我使用的是F4的OTG功能,枚举大部分还是可以的,复位大约20-30次出现那么一次不成功,但是上电是没问题的!
还有一个问题就是USB设备会死机,大约使用100多次就会死机一次!立即复位一下就好了!
顺便补充一句的就是我可能官方的例程改的太多了,LCD显示改成了打印,还加了CAN的配置!
 楼主| bjxdylzsts 发表于 2014-5-15 12:28 | 显示全部楼层
aoty 发表于 2014-5-15 10:45
楼主,你好!我最近也在调试USB,但是调出来的效果不是很令人满意的!
感觉USB对时间的要求比较严格,我使 ...

是不是你的can的中断影响了usb的处理,把 usb中断优先级改的比can高试试。
aoty 发表于 2014-5-15 16:14 | 显示全部楼层
bjxdylzsts 发表于 2014-5-15 12:28
是不是你的can的中断影响了usb的处理,把 usb中断优先级改的比can高试试。

哥,不是的!我的CAN发送是查询发送的!!

还有一个恶心的地方就是USB不可以随便的加一些自己的东西,比如我多加一句打印,枚举的成功率就会降低!

不知道你有这方面的经验么、
 楼主| bjxdylzsts 发表于 2014-5-16 09:16 | 显示全部楼层
aoty 发表于 2014-5-15 16:14
哥,不是的!我的CAN发送是查询发送的!!

还有一个恶心的地方就是USB不可以随便的加一些自己的东西,比 ...

这个没经验,要不呼叫版主吧
xush1101 发表于 2014-8-1 22:06 来自手机 | 显示全部楼层
楼主这个问题我也有发现,可是改了以后出现了in端点停掉了,怎么都恢复不了,这是个什么情况啊?楼主有碰到没有?
 楼主| bjxdylzsts 发表于 2014-8-5 09:23 | 显示全部楼层
xush1101 发表于 2014-8-1 22:06
楼主这个问题我也有发现,可是改了以后出现了in端点停掉了,怎么都恢复不了,这是个什么情况啊?楼主有碰到 ...

我改了后 一般情况下 是正常的, 但在 干扰严重的情况下,或者in 管道数据负载比较重的情况下,主机读到三次in错误后,会把该管道 stall掉,此时必须重新初始化usb模块才可以重新启用改管道。 我还不确定 这种情况下 到底是哪块引起的,是不是这块我也不知道。 干扰影响一般是 in管道挂掉,out管道还正常,很纳闷。
yan2005 发表于 2014-8-11 15:04 | 显示全部楼层
bjxdylzsts 发表于 2014-8-5 09:23
我改了后 一般情况下 是正常的, 但在 干扰严重的情况下,或者in 管道数据负载比较重的情况下,主机读到 ...

"干扰严重的情况下,或者in 管道数据负载比较重的情况下",  这句话具体是指什么呢? 请楼主详细解答下吧。
 楼主| bjxdylzsts 发表于 2014-8-11 15:22 | 显示全部楼层
yan2005 发表于 2014-8-11 15:04
"干扰严重的情况下,或者in 管道数据负载比较重的情况下",  这句话具体是指什么呢? 请楼主详细解答下吧。 ...

跑电机的时候。电流波动比较大的时候。电磁干扰
yan2005 发表于 2014-8-12 08:25 | 显示全部楼层
bjxdylzsts 发表于 2014-8-11 15:22
跑电机的时候。电流波动比较大的时候。电磁干扰

那就放心了,我的板子上不使用电机。多谢!
玄德 发表于 2014-8-12 09:58 | 显示全部楼层
LZ无私,再顶一次。
yan2005 发表于 2014-8-21 12:49 | 显示全部楼层
bjxdylzsts 发表于 2014-8-5 09:23
我改了后 一般情况下 是正常的, 但在 干扰严重的情况下,或者in 管道数据负载比较重的情况下,主机读到 ...

"主机读到三次in错误后,会把该管道 stall掉,此时必须重新初始化usb模块才可以重新启用改管道。 我还不确定 这种情况下 到底是哪块引起的,是不是这块我也不知道。"

麻烦楼主介绍下"重新初始化usb模块才可以重新启用该管道具体是怎么做的"。按照楼主改法之后,我现在碰到了类似的问题了。多谢!
 楼主| bjxdylzsts 发表于 2014-8-21 14:25 | 显示全部楼层
{8F304CD2-621C-47E9-AAE9-BAEAE8C14853}.bmp

先让 上拉电阻断开, 然后 复位usb内核(时钟),然后 usb模块重新初始化。

上位机这  做成    发现设备重新枚举 即自动重新连接即可。

错误的判断, 一段时间内未收到 本应该 发送下来的请求。
yan2005 发表于 2014-8-21 17:07 | 显示全部楼层
楼主热心人啊,感谢回答。
1. 设备检测到了stall的发生之后,就开始复位重新初始化吧?
2. 这样做对速度的影响大吗? 晚上试下。

另外我这里刚才重新用bus hound看了下,是出现了xact error,查了手册,应该是发送了超过max packet size的数据,或者设备反应太慢所导致的。目前还不清楚到底是什么原因导致的。在bus hound最后的地方就是出现了reset pipe,应该也是pipe挂起了,和你的现象类似。我想用楼主上面的办法应该也有用。我PC那一侧的现象是ReadFile()读到的数据量为0,即一直读不到数据。我用的是High speed模式。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

129

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部