STM32CUBE+USB+EMMC+SD,使用USB驱动挂载的两个存储介质(SD和EMMC)充当U盘使用。
现在要找到USB+SD的例子很多,关于驱动两个存储芯片却鲜有例子,正好自己的板子上同时搭载了SD和EMMC,便尝试做了一个这个驱动程序,同时也记录下来方便以后自己查看以及分享给需要的人。
一、STM32CUBE配置
我所使用的cube版本为6.2.1,使用的STM32为STM32H743IIKx。
1:配置EMMC
因为我的板子上的emmc有点问题,所以我分频系数选择了2(或更高)
2:配置SD
3:配置USB
选择Device_Only,打开VBUS_sensing
4:配置USB_DEVICE
选择MSC,其他均使用默认
5:时钟树
通过修改PLL1Q的输出来修改SDMMC和USB的时钟(接触的大多EMMC都是50MHz,所以这里修改为48MHz,SDMMC1,2也按照这个频率进行分频)
6:Project Manager
注意Stack调大一些
注意这里使用H7_V1.7.0(最新的包在初始化EMMC时有问题,就没去使用了,有时间再去定位问题)
:
二:软件部分
对sdmmc.c、usbd_core.h、usbd_storage_if.c做些修改即可
1:sdmmc.c
如果两个初始化函数中没有我框出来的这两个函数,请注意自己添加上去(有时候cube生成就有,有时候就没有,很纳闷)
2:usbd_core.h
注意框出来的函数中圈出来的两个变量类型,修改为uint32_t,不然会编译报错的(H7_V1.9.0解决了这个bug)
3:usbd_storage_if.c
重点来了,改动最大的文件,就不详述了,添加的部分都用红框标了出来(注意添加在USER BEGIN和END之间)
现在可以编译烧录了,下载好后将USB连接开发板和电脑,可以发现电脑读出了两个盘(F是SD,G是EMMC)