Nino 发表于 2023-7-20 12:05:30

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


全程使用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等等


eric2013 发表于 2023-7-20 15:49:21

设置NVIC优先级分组为4,HAL_Init函数默认是配置的4

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

Nino 发表于 2023-7-20 20:54:59

eric2013 发表于 2023-7-20 15:49
设置NVIC优先级分组为4,HAL_Init函数默认是配置的4

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

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

这是什么原因呢?

eric2013 发表于 2023-7-21 09:13:53

Nino 发表于 2023-7-20 20:54
谢谢硬汉哥回答 果断解决了卡死的问题, 但是又有一个新的问题产生了: 电脑无法和MCU建立稳定连接
现象:
...

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

Nino 发表于 2023-7-23 11:34:41

eric2013 发表于 2023-7-21 09:13
换个USB线,换个USB接口试试。

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

Nino 发表于 2023-7-23 12:49:42

STM32H7+FATFS+RTOS+USB Device, 基于cubeMX生成

tangdoudou_1 发表于 2023-12-7 12:02:11

我也遇到一个类似的问题,不知道大神有没有遇到过这样的问题,就是我们在用闪迪、朗科、川宇的SD卡的时候,用stm32F103都能够正常读写,但是在当虚拟U盘使用的时候,闪迪的SD卡没有问题,但是朗科、川宇等品牌都不行,有可能是那里的问题?

wenjian1 发表于 2024-1-10 16:17:46

怎么识别USB的插拔呢?

eric2013 发表于 2024-1-11 09:56:56

wenjian1 发表于 2024-1-10 16:17
怎么识别USB的插拔呢?

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

wenjian1 发表于 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自动识别呢?

eric2013 发表于 2024-1-12 08:13:32

wenjian1 发表于 2024-1-11 14:06
硬汉哥,就是FatF+SD卡制作虚拟U盘,插上usb可以自动识别U盘,拔掉USB之后关闭U盘,目前参考的是《基于STM3 ...

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

wenjian1 发表于 2024-1-24 11:30:13

eric2013 发表于 2024-1-12 08:13
ST库的USB库有个接口文件的,有标识插入和拔出。

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

eric2013 发表于 2024-1-25 00:32:33

wenjian1 发表于 2024-1-24 11:30
硬汉哥,USB插拔识别测试好了,但是就是识别U盘的速度太慢了,大概8秒左右,有什么方法可以提高识别速度 ...

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

wenjian1 发表于 2024-1-26 17:11:53

eric2013 发表于 2024-1-25 00:32
使用新版HAL库,解决这个问题了。

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

eric2013 发表于 2024-1-27 09:14:17

wenjian1 发表于 2024-1-26 17:11
用的就是新版的,感觉可能与接扩展坞上面的USB有关系,接笔记本的识别就很快了

那基本可以认为正常了。

流型 发表于 2024-3-8 08:56:21

wenjian1 发表于 2024-1-26 17:11
用的就是新版的,感觉可能与接扩展坞上面的USB有关系,接笔记本的识别就很快了

你好,可以共享你的例程吗,如何自动通过USB插拔识别U盘,谢谢
页: [1]
查看完整版本: [求助帖]USB+SD+FATFS制作虚拟U盘