[STM32F4] 关于usb的上拉软断开功能

[复制链接]
2742|6
 楼主| KC_CEC 发表于 2014-9-1 17:07 | 显示全部楼层 |阅读模式
本帖最后由 KC_CEC 于 2014-9-1 17:09 编辑

现在我用F4做MSC,但美中不足就是当在设备和电脑保持连接的时候复位设备,电脑就无法识别。

经过查看发现是因为复位后上拉电阻会使得电脑来枚举设备,但是设备此时还没有将USB初始化
完成,所以不会返回描述符导致枚举失败。

按照我的理解是,先将上拉断开,初始化好内部USB后再重新连接即可。

现在的问题是如何有效的断开和重连上拉?

按照F4手册说明:
<OTG_FS_DCTL>寄存器下的<SDIS>位可以软断开和重连。

那么我的步骤如下:
1、先断开上拉--------->DCD_DevDisconnect
2、再执行初始化------>USBD_Init
3、最后连接上拉------>DCD_DevConnect
事后进调试发现第一步没有成功断开<SDIS>位,应该是USB寄存器没有初始化所以无动作。

那么修改步骤如下:
1、先执行初始化------>USBD_Init
1、再断开上拉--------->DCD_DevDisconnect
3、最后连接上拉------>DCD_DevConnect
这次上拉可以断开并连接了,但是从电脑<设备管理器>观察到主机根本就没有觉察到设备被拔出

最后我直接进调试模式,让设备全速跑起来。然后手动的断开上拉,依然电脑没有发现断开设备。
并且奇怪的是,我手动断开然后再次连接以后,将USB拔插一次,主机便无法枚举了。

是不是我哪里理解错了,希望大家帮帮忙谢谢!
zh113214 发表于 2014-9-1 23:20 | 显示全部楼层
没有用过F4啊,希望高手能帮助你!!
 楼主| KC_CEC 发表于 2014-9-2 09:17 | 显示全部楼层
按理说这个应用很简单吧。怎么没有人解答啊
悲伤流逝 发表于 2014-9-2 10:18 | 显示全部楼层
这个必须顶
 楼主| KC_CEC 发表于 2014-9-3 15:03 | 显示全部楼层
本帖最后由 KC_CEC 于 2014-9-3 15:10 编辑

找到解决办法了,其实不用那么复杂。只需要开机的时候将IO口配置成下拉方式即可,这样在初始化完成USB之前,主机是不能觉察设备插入的。
万万没想到,啦啦啦啦啦.............
那么结贴了.......

评分

参与人数 1威望 +6 收起 理由
dong_abc + 6

查看全部评分

小浣熊 发表于 2014-9-3 16:58 | 显示全部楼层
解决了就好,恭喜楼主。。
bjxdylzsts 发表于 2014-9-3 17:01 | 显示全部楼层
之后再 重新初始化 usb模块。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

169

帖子

1

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