[求助帖]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等等
设置NVIC优先级分组为4,HAL_Init函数默认是配置的4
然后设置滴答定时器的中断优先级要高于你的USB中断优先级,USB中断有用到基于滴答定时器的时间基准,早期我们移植的时候,在这个地方花了很多时间才发现。 eric2013 发表于 2023-7-20 15:49
设置NVIC优先级分组为4,HAL_Init函数默认是配置的4
然后设置滴答定时器的中断优先级要高于你的USB中断 ...
谢谢硬汉哥回答 果断解决了卡死的问题, 但是又有一个新的问题产生了: 电脑无法和MCU建立稳定连接
现象:
在"我的电脑"中查看, 会迅速闪过"U盘"->"可移动硬盘"的变换, 随后消失.
但此时在设备管理中查看USB端口, 可以看到端口处识别到了"USB大容量存储设备"
这是什么原因呢? Nino 发表于 2023-7-20 20:54
谢谢硬汉哥回答 果断解决了卡死的问题, 但是又有一个新的问题产生了: 电脑无法和MCU建立稳定连接
现象:
...
换个USB线,换个USB接口试试。
eric2013 发表于 2023-7-21 09:13
换个USB线,换个USB接口试试。
谢谢硬汉哥, 问题已经解决了 就是中断优先级的问题, 现在按照你给的解决方法已经成功运行 等下我把正常工作的代码贴出来分享一波 使用了FreeRTOS+FATFS+USB Mass Storage device STM32H7+FATFS+RTOS+USB Device, 基于cubeMX生成 我也遇到一个类似的问题,不知道大神有没有遇到过这样的问题,就是我们在用闪迪、朗科、川宇的SD卡的时候,用stm32F103都能够正常读写,但是在当虚拟U盘使用的时候,闪迪的SD卡没有问题,但是朗科、川宇等品牌都不行,有可能是那里的问题? 怎么识别USB的插拔呢? wenjian1 发表于 2024-1-10 16:17
怎么识别USB的插拔呢?
你的插入电脑上,让电脑识别插拔,还是外挂U盘,让MCU识别插拔。 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自动识别呢? wenjian1 发表于 2024-1-11 14:06
硬汉哥,就是FatF+SD卡制作虚拟U盘,插上usb可以自动识别U盘,拔掉USB之后关闭U盘,目前参考的是《基于STM3 ...
ST库的USB库有个接口文件的,有标识插入和拔出。 eric2013 发表于 2024-1-12 08:13
ST库的USB库有个接口文件的,有标识插入和拔出。
硬汉哥,USB插拔识别测试好了,但是就是识别U盘的速度太慢了,大概8秒左右,有什么方法可以提高识别速度吗。 wenjian1 发表于 2024-1-24 11:30
硬汉哥,USB插拔识别测试好了,但是就是识别U盘的速度太慢了,大概8秒左右,有什么方法可以提高识别速度 ...
使用新版HAL库,解决这个问题了。 eric2013 发表于 2024-1-25 00:32
使用新版HAL库,解决这个问题了。
用的就是新版的,感觉可能与接扩展坞上面的USB有关系,接笔记本的识别就很快了 wenjian1 发表于 2024-1-26 17:11
用的就是新版的,感觉可能与接扩展坞上面的USB有关系,接笔记本的识别就很快了
那基本可以认为正常了。 wenjian1 发表于 2024-1-26 17:11
用的就是新版的,感觉可能与接扩展坞上面的USB有关系,接笔记本的识别就很快了
你好,可以共享你的例程吗,如何自动通过USB插拔识别U盘,谢谢
页:
[1]