硬汉嵌入式论坛

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

[ThreadX全家桶] ThreadX USBX的模拟U盘功能时,重复挂载卸载功能的实现

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115804
QQ
发表于 2021-1-23 09:12:22 | 显示全部楼层 |阅读模式
已经初步搞定这个功能了,USBX模拟U盘基本问题不大了。

USBX有专门的复位初始化函数


  1. _ux_dcd_stm32_uninitialize((ULONG)USB2_OTG_FS, (ULONG)&hpcd_USB_OTG_FS);
  2. _ux_device_stack_uninitialize();
  3. _ux_device_stack_class_unregister(_ux_system_slave_class_storage_name, _ux_device_class_storage_entry);
复制代码


回复

使用道具 举报

4

主题

1445

回帖

1457

积分

至尊会员

积分
1457
发表于 2021-1-23 10:12:31 | 显示全部楼层
回复

使用道具 举报

681

主题

3487

回帖

5555

积分

论坛元老

积分
5555
发表于 2021-1-23 12:51:59 | 显示全部楼层
大神,filex + usbx ,单片机读写u盘并识别中文文件名有没有研究一下啊 ?
回复

使用道具 举报

8

主题

42

回帖

66

积分

初级会员

积分
66
发表于 2021-1-23 13:11:39 | 显示全部楼层
请问能够虚拟U盘后利用单片机格式化TF卡吗,项目有这个需求
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115804
QQ
 楼主| 发表于 2021-1-23 13:22:56 | 显示全部楼层
junlianzi 发表于 2021-1-23 13:11
请问能够虚拟U盘后利用单片机格式化TF卡吗,项目有这个需求

当前可以格式化,但是不会反馈到电脑端,需要重新虚拟下。

实时反馈后面有时间了研究。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115804
QQ
 楼主| 发表于 2021-1-23 13:24:04 | 显示全部楼层
hpdell 发表于 2021-1-23 12:51
大神,filex + usbx ,单片机读写u盘并识别中文文件名有没有研究一下啊 ?

有专门的unicode api,可以搞搞。
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2021-2-22 17:07:57 | 显示全部楼层
大佬的重复枚举是怎么实现的?

我这边在使用 USB 之后,软件关闭 USB (不拔USB线)。
参考你的例程:
1、停止USB外设。
2、反初始化和卸载 USBX 。
3、反初始化USB外设,关闭时钟,关闭中断。
4、重新初始化 USB 引脚为 GPIO 功能,DM 和 DP 拉低。

前 3 步执行之后,电脑检测不到USB,但不是正常的关闭,而是显示 “不能识别的USB”。
第 4 步之后,DP 引脚不能被拉低。 这就导致了重新初始化 USB 时, DP 不能上升沿跳变,所以不能重新枚举。。。

代码如下:
void usb_slave_close(void)
{
    /* 停止 USB 外设 */
    HAL_PCD_Stop(&pcd_hs_handle);

    /* 反初始化 USB 任务 */
    _ux_dcd_stm32_uninitialize((ULONG)USB_OTG_HS, (ULONG)&pcd_hs_handle);
    _ux_device_stack_class_unregister(_ux_system_slave_class_storage_name, _ux_device_class_storage_entry);
    _ux_device_stack_uninitialize();

    /* 关闭 USB 外设 */
    HAL_PCD_DeInit(&pcd_hs_handle);
    __HAL_RCC_USB_OTG_HS_CLK_DISABLE();
    HAL_NVIC_DisableIRQ(OTG_HS_IRQn);

    /* DM DP 信号线置低 */
    usb_otg_gpio_deinit();
}


void usb_otg_hs_gpio_deinit(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    HAL_GPIO_DeInit(GPIOB, GPIO_PIN_14|GPIO_PIN_15);

    /**USB_OTG_HS GPIO Configuration
    PB14     ------> USB_OTG_HS_DM
    PB15     ------> USB_OTG_HS_DP
    */
    GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_RESET);
}


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115804
QQ
 楼主| 发表于 2021-2-23 08:16:01 | 显示全部楼层
ihavedone 发表于 2021-2-22 17:07
大佬的重复枚举是怎么实现的?

我这边在使用 USB 之后,软件关闭 USB (不拔USB线)。

我这个是H7的,可能和你的不太一样。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-20 04:06 , Processed in 0.306274 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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