【STM32F7】详解STM32F7 MMC工程

  • LiuYang
  • LV5工程师
  • |      2015-10-21 20:48:33
  • 浏览量 4067
  • 回复:8

    以传统方式使用SD卡,除了要实现SDIO或SPI的驱动,一般还需要再移植个类似FatFS过来,才能方便的使用文件系统。而且在移植的过程中,还要考虑SD卡的版本、速度等问题,保证驱动程序的正确性,然后再去实现FatFS所要求的接口,短时间内不一定能实现的了。现在这些问题已经不再是问题了,因为这些工作Keil已经帮我们做好了,还是只要点几下鼠标就完成了,可以把时间和精力全部放在逻辑业务的处理上,同时代码简洁易读,方便维护。下面来看一下实现SD卡文件系统工程的建立方法。


    此工程同样从三部分考虑:选择Keil中间件、设置必要的选项参数、实现自己的功能。


***********************************************************************************************
    同样,板级支持(Board Support),专门针对某种板子提供的驱动。为了可以在任意的STM32F7开发板上使用,这项选不选随意。

    

【STM32F7】详解STM32F7 MMC工程

    1.CMSIS部分,操作系统相关,有了系统好办事,而且包括了网络硬件的驱动,所以此项必选。
    CORE是核心部分,不能少
    Keil RTX是操作系统,可以开线程

    另外还要加一项MCI,MCI的全称是“Memory Card Interface”,不用解释了吧。

    

【STM32F7】详解STM32F7 MMC工程

    2.STM32F7的硬件层驱动部分,可以选择Classic,也可以用STM32CubeMX。如果选了STM32CubeMX,就要使用这个软件来生成配置代码再放到MDK里。Classic足够了,是MDK自带的。
    其中Startup必选,这个是启动文件
    其他的,如Common、Cortex都需要选上。这个图不全,下面还有PWR、RCC都需要选上。当然多选了没有关系,少选的话这个配置窗体会实时显示依赖关系,依赖项没有选上会用橘黄色标识,提示应该选择。

    

【STM32F7】详解STM32F7 MMC工程

    3.File System,最重要的一部分。这里没有使用FatFS,而是使用了MDK自带的MDK-Pro,可以适用于MDK支持的各种MCU,不用改动任何代码。

    其中Drive里,至少选择一种存储介质。使用SD卡的话就是“Memory Card”了。


************************************************************************************************
    第二步,配置各种选项和参数。展开工程树,所有带有黄钥匙的文件都是不需要更改的,所以略过不看,只看各种配置文件。

【STM32F7】详解STM32F7 MMC工程

    1.RTX_Conf_CM.c,操作系统相关的配置。双击该文件后代码在右边显示,但是直接看代码可没那么好看,所以用MDK提供的功能:Configuration Wizard配置精灵就方便多了。
    这里面改动的不多,主要是“RTOS Kernel Timer input clock frequency”,STM32F7是216MHz,改成216000000,216后面6个0,别写错了。
    另外“Defualt Thread stack size”和“Main Thread stack size”要改大一些,400和800。普通小程序无所谓用默认的就行了,但是一旦用了某些协议栈或图形界面之类的,默认的就不够了,如果不改会在运行时进入osError,然后就完蛋了。

    

【STM32F7】详解STM32F7 MMC工程

    2.RTE_Device.h,和TCP工程不一样了,这次要选择SDMMC,然后更改为对应的引脚,还是参考手册吧。

    

【STM32F7】详解STM32F7 MMC工程

    3.FS_Config.c和FS_Config_MC_0.h,这两个文件里的东西一般用默认的就行了,除非有特殊要求,根据实际情况修改,这里不做改动。


************************************************************************************************
    所有的配置项完成,接下来该写程序了。大部分功能已经完成,代码量相对少了很多,节省了不少时间。
【STM32F7】详解STM32F7 MMC工程

    系统时钟配置、MPU设置和Cache设置的代码和TCP工程完全一样,直接拷贝过来,图中略过。

    程序入口点,这里我开了个主线程,没什么用,习惯罢了。SD工程更简单,主循环里什么都不要了。

    

【STM32F7】详解STM32F7 MMC工程

    开始写自己的代码,也就是SD操作的各种功能。为了代码清晰,我用类封装了一个,虽然对于一个SD的操作比C没有什么特别的地方,甚至代码稍微多了一些,但是如果对多个SD或SD、Nand等混合使用的时候优势就明显了,一个实例对应一个设备,比C的代码就好写多了。

    

【STM32F7】详解STM32F7 MMC工程

    看到断点的那三行代码了吗,只要对类实例化一下,就可以调用类中的方法了。

    开始运行,实例化M0:后,获取文件系统和总容量,然后再创建一个文件夹。

    运行到断点处,看变量的内容,变量FS得到文件系统类型,Capacity获得容量。

    

    FS的值是0x04,0x04是什么呢?这里有定义:

【STM32F7】详解STM32F7 MMC工程

    一个枚举类型,4就是FAT32格式了。

    

    Capacity的值是0x1D62DFE00,十进制就是7888305664字节,/ 1024 / 1024 / 1024,就是7.34GB,容量也正确。

    

    把SD卡插到电脑上

【STM32F7】详解STM32F7 MMC工程

    刚刚创建的文件夹就在这里,功能完成。

    最后强调一下,使用Keil的MDK-Pro功能,就不能选择MicroLib了,自己斟酌吧。

    

工程附件:




  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:7
413401139@qq.co 2016-07-23
不看白不看,看也不白看
0   回复
举报
发布
spd 2016-05-07
又学习了,谢谢
0   回复
举报
发布
liunine@netease 2015-10-26
学习了...
0   回复
举报
发布
LiuYang 2015-10-22
谢谢
0   回复
举报
发布
guodiqing 2015-10-22
谢谢分享,学习了。
0   回复
举报
发布
LiuYang 2015-10-22
谢谢
0   回复
举报
发布
SingleYork 2015-10-22
不错不错……顶起来……
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子