打印
[STM32F1]

stm32f10x的usb怎么判断是否连上电脑USB口

[复制链接]
8439|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
djjyi|  楼主 | 2017-7-6 14:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在用stm32f10x的usb做虚拟串口,当连接上或断开电脑端usb口后,是否有相应的状态判断函数进行判断连接成功或断开连接?

沙发
djjyi|  楼主 | 2017-7-6 14:38 | 只看该作者
自己搜索了下,应该是这个bDeviceState变量 如果bDeviceState = UNCONNECTED代表断开连接
typedef enum _DEVICE_STATE
{
  UNCONNECTED,
  ATTACHED,
  POWERED,
  SUSPENDED,
  ADDRESSED,
  CONFIGURED
} DEVICE_STATE;
不知道是否正确

使用特权

评论回复
板凳
djjyi|  楼主 | 2017-7-6 14:45 | 只看该作者
测试发现 上电初始化bDeviceState = UNCONNECTED
但连接电脑后 会变bDeviceState = ADDRESSED ,如果拔掉USB线,bDeviceState = ADDRESSED ,无法探测是否断开usb

使用特权

评论回复
地板
icecut| | 2017-7-6 15:11 | 只看该作者
不同芯片usb库有区别,看一下断开usb 的相关代码.

使用特权

评论回复
5
kkzz| | 2017-7-6 17:34 | 只看该作者
电脑不能识别吗?

使用特权

评论回复
6
hudi008| | 2017-7-6 17:35 | 只看该作者
看设备管理器里面是否存在设备

使用特权

评论回复
7
lzmm| | 2017-7-6 17:35 | 只看该作者
djjyi 发表于 2017-7-6 14:45
测试发现 上电初始化bDeviceState = UNCONNECTED
但连接电脑后 会变bDeviceState = ADDRESSED ,如果拔掉U ...

这个有相关参考设计的。

使用特权

评论回复
8
minzisc| | 2017-7-6 17:35 | 只看该作者
虚拟串口是需要驱动的?

使用特权

评论回复
9
selongli| | 2017-7-6 17:36 | 只看该作者
这个是需要热插拔才能实现吗?

使用特权

评论回复
10
fentianyou| | 2017-7-6 17:36 | 只看该作者
usb没有开发过。

使用特权

评论回复
11
fentianyou| | 2017-7-6 17:37 | 只看该作者
在USB的协议里,只有主机和HUB具有设备移出检测功能,作为从设备(device)往往不具有设备断开连接的检测,需要自己设计一种检测机制,判断 USB主设备是否与之断开。STM32的USB是OTG设备,既可以作为主机也可以作为设备,当其作为设备通过USB与PC通信时,可能会需要STM32 检测是否与PC断开连接,这时候不可以向PC发数据,在PC连接上时,可以继续USB通信。

使用特权

评论回复
12
xiaoyaodz| | 2017-7-6 17:37 | 只看该作者
13
febgxu| | 2017-7-6 17:38 | 只看该作者
usb所使用的IO口在设置为usb后自动分配功能

使用特权

评论回复
14
sdlls| | 2017-7-6 17:38 | 只看该作者
这个以前用过stm32自己开发的例程。

使用特权

评论回复
15
kkzz| | 2017-7-6 17:39 | 只看该作者
这个都是电脑识别驱动的。

使用特权

评论回复
16
hudi008| | 2017-7-6 17:39 | 只看该作者
具体需要看usb的操作。

使用特权

评论回复
17
lzmm| | 2017-7-6 17:39 | 只看该作者
djjyi 发表于 2017-7-6 14:45
测试发现 上电初始化bDeviceState = UNCONNECTED
但连接电脑后 会变bDeviceState = ADDRESSED ,如果拔掉U ...

STM32F4有开发usb的库了。

使用特权

评论回复
18
minzisc| | 2017-7-6 17:39 | 只看该作者
楼主的上位机写好了吗?

使用特权

评论回复
19
selongli| | 2017-7-6 17:39 | 只看该作者
好像usb的热插拔,不容易识别。

使用特权

评论回复
20
fentianyou| | 2017-7-6 17:39 | 只看该作者
检测USB断开连接的方法有多种,USB在断开时会有SUSPEND中断,但是USB总线上没有数据时,主机也可以将其挂起,产生SUSPEND中断,所 以这种方法不可靠,另外就是PC定时向USB device发送数据,当USB device没有收到数据时即可认为USB断开连接,但是这种方法要想提高实时性,就需要传输大量的握手数据,占用USB总线,不利于USB数据的高效 率、高速度的传输。最好的方法是通过硬件实现,在USB的VBUS上做**,USB主机会像device供电,STM32可以检测该电源引脚,在USB连 接时产生上升沿,断开时产生下降沿,据此可以快速判断是否与USB主机断开连接。

使用特权

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

本版积分规则

43

主题

294

帖子

0

粉丝