烽火社区

标题: 【STM32F7】详解STM32F7 MMC工程 [打印本页]

作者: 江腾子HydeKe    时间: 2015-10-21 08:48 PM
标题: 【STM32F7】详解STM32F7 MMC工程

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


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


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

    

[attach]31825[/attach]

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

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

    

[attach]31826[/attach]

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

    

[attach]31827[/attach]

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

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


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

[attach]31828[/attach]

    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,然后就完蛋了。

    

[attach]31829[/attach]

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

    

[attach]31830[/attach]

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


************************************************************************************************
    所有的配置项完成,接下来该写程序了。大部分功能已经完成,代码量相对少了很多,节省了不少时间。
[attach]31831[/attach]

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

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

    

[attach]31832[/attach]

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

    

[attach]31833[/attach]

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

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

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

    

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

[attach]31834[/attach]

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

    

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

    

    把SD卡插到电脑上

[attach]31835[/attach]

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

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

    

工程附件:



作者: oneside    时间: 2015-10-22 09:14 AM
不错不错……顶起来……
作者: zjzlgd2008    时间: 2015-10-22 09:41 AM
谢谢[attach]31836[/attach]
作者: 浩瀚天地    时间: 2015-10-22 10:11 AM
谢谢分享,学习了。
作者: 梦红尘    时间: 2015-10-22 10:11 AM
谢谢[attach]31837[/attach]
作者: Hugo    时间: 2015-10-26 10:25 PM
学习了...
作者: soaped    时间: 2016-1-28 01:24 PM
不错不错……顶起来……
作者: cy-yzm    时间: 2016-5-7 01:38 PM
又学习了,谢谢





欢迎光临 烽火社区 (http://bbs.cnecport.com/) Powered by Discuz! X3.2