STM32F407通过cube模拟U盘

前言

  1. 在学习USB协议中,学习到mass storage device的时候,想要通过stm32cubemax配置stm32f407的模拟U盘并且通过源码学习相关协议。前期很顺利,window能够正常识别U盘,但是总是无法格式化,网上看了很多例程,配置步骤都是一模一样都无法正常格式化。搞了2天左右,突然灵光一现,是不是U盘容量设置太小了,导致格式化的时候有些映射表之类的无法正常写入。由于是通过RAM模拟U盘的,因此一开始只是配置了20×512的大小,后来改为64×512=32k后就正常了。因此记录下具体操作过程和问题点。

一、使用cubemx配置USB MASS STORAGE DEVICE

1、添加USB组件

选择USB设备
选择设备
选择st自己的第三方组件,Mass Storage class,都采用默认选项即可,有特殊需要可以自己根据说明配置

配置时钟,USB的总线频率一定要是48MHZ
在这里插入图片描述

生成keil工程,栈配置大一些
在这里插入图片描述
配置mass storage的盘符数量、块数量、块大小
在这里插入图片描述
在usbd_storage_it.c文件中,把需要自己实现的接口补充完整。我这边为了偷懒,直接用单片机自身的RAM模拟U盘的,因此只需要实现这两个函数。如果用单片机内部flash或外部flash,需要把这个文件中其他函数自己实现。
在这里插入图片描述
PC识别到U盘后,提示需要格式化
在这里插入图片描述
在这里插入图片描述
格式化完成后,在线仿真可以看到数据区域写入了一些数据。应该是磁盘头部信息,映射表之类的,具体没有细究,有空研究一下。
在这里插入图片描述

二、遇到的问题

1、格式化失败

由于一开始太抠门,怕RAM不够,块数量配置的太小,导致PC识别到的U盘容量太小,格式化的时候总是失败。我估计是磁盘格式化的时候对最小容量有要求,需要写入头部信息,因此无法正常格式化。一开始配置的磁盘容量如下:

在这里插入图片描述
导致格式化失败
在这里插入图片描述
实际也没有写入任何数据
在这里插入图片描述
后面把块数量改为64,块大小还是512,总容量32k后,就正常了
在这里插入图片描述

源码连接

源码

总结

遇到问题,有时候虽然会灵光一闪解决了,但这是建立在之前不放弃,不断找资料、看代码、思考解决方法的基础上的。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大翔子子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值