硬汉嵌入式论坛

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

[SD/SDIO] [求助帖]USB+SD+FATFS制作虚拟U盘

  [复制链接]

1

主题

4

回帖

7

积分

新手上路

积分
7
发表于 2023-7-20 12:05:30 | 显示全部楼层 |阅读模式

全程使用CubeMX进行配置
情况如下:
1. SD卡工作正常, 可通过HAL_SD_GetCardInfo(&hsd1, &SDCardInfo);等函数对其进行操作
2. FATFS工作正常, 可通过f_write等函数对SD卡进行文件系统上的操作
3. 不插入USB时正常工作
出错情况:
插入USB后立刻卡死不动, debug调试发现, 插入USB后进入USB中断, 随后开始一系列初始化, 最终在USB中断触发的一系列初始化中的SD_Init中卡死, 电脑上位机也无法正常识别到STM32的USB device.
并且复位之后发现STM32无法正常挂载FATFS, 拔下SD卡重新插回后可以正常挂载及读取等操作

描述略粗糙, 如果有同志也遇到了类似情况的话或许能理解, 如果有大佬愿意深究一下, 我就进一步再补充代码及报错log等等


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2023-7-20 15:49:21 | 显示全部楼层
设置NVIC优先级分组为4,HAL_Init函数默认是配置的4

然后设置滴答定时器的中断优先级要高于你的USB中断优先级,USB中断有用到基于滴答定时器的时间基准,早期我们移植的时候,在这个地方花了很多时间才发现。
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2023-7-20 20:54:59 | 显示全部楼层
eric2013 发表于 2023-7-20 15:49
设置NVIC优先级分组为4,HAL_Init函数默认是配置的4

然后设置滴答定时器的中断优先级要高于你的USB中断 ...

谢谢硬汉哥回答 果断解决了卡死的问题, 但是又有一个新的问题产生了: 电脑无法和MCU建立稳定连接
现象:
在"我的电脑"中查看, 会迅速闪过"U盘"->"可移动硬盘"的变换, 随后消失.
但此时在设备管理中查看USB端口, 可以看到端口处识别到了"USB大容量存储设备"

这是什么原因呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2023-7-21 09:13:53 | 显示全部楼层
Nino 发表于 2023-7-20 20:54
谢谢硬汉哥回答 果断解决了卡死的问题, 但是又有一个新的问题产生了: 电脑无法和MCU建立稳定连接
现象:
...

换个USB线,换个USB接口试试。
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2023-7-23 11:34:41 | 显示全部楼层
eric2013 发表于 2023-7-21 09:13
换个USB线,换个USB接口试试。

谢谢硬汉哥, 问题已经解决了 就是中断优先级的问题, 现在按照你给的解决方法已经成功运行 等下我把正常工作的代码贴出来分享一波 使用了FreeRTOS+FATFS+USB Mass Storage device
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2023-7-23 12:49:42 | 显示全部楼层
STM32H7+FATFS+RTOS+USB Device, 基于cubeMX生成

STM32_Mass.zip

20.93 MB, 下载次数: 63

回复

使用道具 举报

2

主题

10

回帖

16

积分

新手上路

积分
16
发表于 2023-12-7 12:02:11 | 显示全部楼层
我也遇到一个类似的问题,不知道大神有没有遇到过这样的问题,就是我们在用闪迪、朗科、川宇的SD卡的时候,用stm32F103都能够正常读写,但是在当虚拟U盘使用的时候,闪迪的SD卡没有问题,但是朗科、川宇等品牌都不行,有可能是那里的问题?
回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2024-1-10 16:17:46 | 显示全部楼层
怎么识别USB的插拔呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2024-1-11 09:56:56 | 显示全部楼层
wenjian1 发表于 2024-1-10 16:17
怎么识别USB的插拔呢?

你的插入电脑上,让电脑识别插拔,还是外挂U盘,让MCU识别插拔。
回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2024-1-11 14:06:28 | 显示全部楼层
eric2013 发表于 2024-1-11 09:56
你的插入电脑上,让电脑识别插拔,还是外挂U盘,让MCU识别插拔。

硬汉哥,就是FatF+SD卡制作虚拟U盘,插上usb可以自动识别U盘,拔掉USB之后关闭U盘,目前参考的是《基于STM32H7的FreeRTOS+ FatFS + emWin + ST USB的综合模板》这个例程,但是我看里面是通过发送指令的方式进入usbd_OpenMassStorage和usbd_CloseMassStorage打开和关闭,怎么修改这个例程实现插拔USB自动识别呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2024-1-12 08:13:32 | 显示全部楼层
wenjian1 发表于 2024-1-11 14:06
硬汉哥,就是FatF+SD卡制作虚拟U盘,插上usb可以自动识别U盘,拔掉USB之后关闭U盘,目前参考的是《基于STM3 ...

ST库的USB库有个接口文件的,有标识插入和拔出。
回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2024-1-24 11:30:13 | 显示全部楼层
eric2013 发表于 2024-1-12 08:13
ST库的USB库有个接口文件的,有标识插入和拔出。

硬汉哥,USB插拔识别测试好了,但是就是识别U盘的速度太慢了,大概8秒左右,有什么方法可以提高识别速度吗。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2024-1-25 00:32:33 | 显示全部楼层
wenjian1 发表于 2024-1-24 11:30
硬汉哥,USB插拔识别测试好了,但是就是识别U盘的速度太慢了,大概8秒左右,有什么方法可以提高识别速度 ...

使用新版HAL库,解决这个问题了。
回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2024-1-26 17:11:53 | 显示全部楼层
eric2013 发表于 2024-1-25 00:32
使用新版HAL库,解决这个问题了。

用的就是新版的,感觉可能与接扩展坞上面的USB有关系,接笔记本的识别就很快了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2024-1-27 09:14:17 | 显示全部楼层
wenjian1 发表于 2024-1-26 17:11
用的就是新版的,感觉可能与接扩展坞上面的USB有关系,接笔记本的识别就很快了

那基本可以认为正常了。
回复

使用道具 举报

5

主题

81

回帖

96

积分

初级会员

积分
96
发表于 2024-3-8 08:56:21 | 显示全部楼层
wenjian1 发表于 2024-1-26 17:11
用的就是新版的,感觉可能与接扩展坞上面的USB有关系,接笔记本的识别就很快了

你好,可以共享你的例程吗,如何自动通过USB插拔识别U盘,谢谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 17:55 , Processed in 0.212367 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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