硬汉嵌入式论坛

 找回密码
 立即注册
查看: 445|回复: 6
收起左侧

[USB] 如何获取USB连接状态

[复制链接]

3

主题

21

回帖

30

积分

新手上路

积分
30
发表于 2024-1-3 17:15:10 | 显示全部楼层 |阅读模式
如题,在实际应用中,读写文件系统跟使用USB和SD卡模拟u盘来操作文件不能同时进行,所以需要判断USB的连接状态,连接时当U盘用,不连接时,往文件里写数据。本来想使用USB的EN脚的高低点平来实现的,结果发现EN脚实际使用时是悬空的,无法作为判断依据,所以想请教下,又没有什么USB库函数可以判断usB连接状态的?
回复

使用道具 举报

8

主题

21

回帖

45

积分

新手上路

积分
45
发表于 2024-1-3 19:40:00 | 显示全部楼层
我记得USB有各种事件类型,插入、拔除,根据那个试试?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2024-1-4 08:56:19 | 显示全部楼层
以ST的USB库为例,有个接口函数的。

好像是在类似usb_usr.C这种文件里面。
回复

使用道具 举报

3

主题

21

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2024-1-4 14:21:47 | 显示全部楼层
eric2013 发表于 2024-1-4 08:56
以ST的USB库为例,有个接口函数的。

好像是在类似usb_usr.C这种文件里面。

在conf.c里面有一些回调函数,但是根本就都没调用啊,HAL_PCD_ConnectCallback跟HAL_PCD_DisconnectCallback
回复

使用道具 举报

3

主题

21

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2024-1-4 14:46:54 | 显示全部楼层
屏幕截图 2024-01-04 142128.png

找到没有调用的原因了,我之前初始化USB的时候,如果连接了usb线的话,初始化完后就直接弹出来了,然后我不想让他直接弹出,所以我把USB初始化函数中的USBD_Start(&hUsbDeviceFS);给拿出来了。这样在初始化函数中的
void MX_USB_DEVICE_Init(void)
{
if (USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS) != USBD_OK)
  {
    Error_Handler();
  }
  if (USBD_RegisterClass(&hUsbDeviceFS, &USBD_MSC) != USBD_OK)
  {
    Error_Handler();
  }
  if (USBD_MSC_RegisterStorage(&hUsbDeviceFS, &USBD_Storage_Interface_fops_FS) != USBD_OK)
  {
    Error_Handler();
  }
}
就剩这3个,初始化完成后确实不会弹出来,然后单独调用USBD_Start(&hUsbDeviceFS)也可以启动u盘,但是这种情况下conf.c里的回调函数就都不执行了,我设置的标志也没有置。
  然后我把USBD_Start(&hUsbDeviceFS)还是加在MX_USB_DEVICE_Init后面,然后执行判断,判断USB是否连接,连接了就调用USBD_Start启动u盘,没有连接就打开文件存数据。这次就能进回调函数里了,我的标志也调用了。就很奇怪。。。。。。。。 最变态的是执行第一个USBD_Start时,u盘没启动
屏幕截图 2024-01-04 142128.png
回复

使用道具 举报

3

主题

21

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2024-1-4 14:49:01 | 显示全部楼层
屏幕截图 2024-01-04 142128.png 第一个USBD_Start的位置, 屏幕截图 2024-01-04 142128.png 第二个USBD_Start的位置

回复

使用道具 举报

3

主题

21

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2024-1-4 15:52:18 | 显示全部楼层
eric2013 发表于 2024-1-4 08:56
以ST的USB库为例,有个接口函数的。

好像是在类似usb_usr.C这种文件里面。

不过现在好像有个新问题,usb插上会调用USBD_LL_SetUSBAddress()这个函数 ,但是他不是没次插上都会调用,只有设备第一次连接电脑时才会调用,有没有什么稳定的函数,会在usb连接时被调用的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 06:53 , Processed in 0.184711 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表