可以注意到的是,大部分的stm32芯片是支持usb从机的,当然这类的标准库例程也有,比如野火的例程就有,只要将例程稍做修改就可以实现内部flash虚拟成U盘,但遗憾的是,我们并不知道实际项目会使用什么样的芯片去做,比如M3跟M4的标准库又不一样,即使是同一内核的芯片,移植的时候也免不了一堆的修修改改。那么接下来就给大家分享一个简单快捷的解决方案。
使用软件版本
cubemx6.1.2、MDK 5.33、使用芯片stm32f103c8t6
建立一个基础工程
首先使用cubemx工具建立工程选择usb设备,芯片的时钟选择最大72M,usb设备时钟也需要调节好,默认他48M即可。
再然后就是Middleware选项下选择Mass Storage Class并把MSC_MEDIA_PACKET修改为1024字节,刚好对应于芯片1K的扇区。
其他的选择默认即可,可以添加一个PB12的引脚操作LED。
添加flash操作代码
在工程创建好以后,接下来就是在usb_storage_if.c这个文件里面对应的函数里面添加上flash操作代码即可。
首先要修改一下宏定义,cubemx原来给的宏定义有点大所以我直接注释掉重新写了。代码如下
//被注释掉的原来的代码
//#define STORAGE_LUN_NBR 1
//#define STORAGE_BLK_NBR 0x10000
//#define STORAGE_BLK_SIZ 0x200
/* USER CODE BEGIN PRIVATE_DEFINES */
//自己重新写的部分
#define STORAGE_LUN_NBR 1 //1个盘
#define STORAGE_BLK_NBR 48 //U盘的大小48k
#define STORAGE_BLK_SIZ