查看: 376|回复: 7
打印 上一主题 下一主题

【STM32F7】详解STM32F7 MMC工程

[复制链接] qrcode

29

主题

31

帖子

94

积分

注册会员

Rank: 2

积分
94
楼主
跳转到指定楼层
发表于 2015-10-21 08:48 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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


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


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

    

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

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

    

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

    

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

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


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

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

    

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

    

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


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

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

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

    

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

    

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

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

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

    

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

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

    

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

    

    把SD卡插到电脑上

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

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

    

工程附件:

游客,如果您要查看本帖隐藏内容请回复


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

3

主题

89

帖子

17

积分

新手上路

Rank: 1

积分
17
沙发
发表于 2015-10-22 09:14 AM | 只看该作者
不错不错……顶起来……
回复 支持 反对

使用道具 举报

0

主题

81

帖子

10

积分

新手上路

Rank: 1

积分
10
板凳
发表于 2015-10-22 09:41 AM | 只看该作者
谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

2

主题

96

帖子

58

积分

注册会员

Rank: 2

积分
58
地板
发表于 2015-10-22 10:11 AM | 只看该作者
谢谢分享,学习了。
回复 支持 反对

使用道具 举报

21

主题

447

帖子

753

积分

高级会员

Rank: 4

积分
753
5#
发表于 2015-10-22 10:11 AM | 只看该作者
谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

1

主题

81

帖子

23

积分

新手上路

Rank: 1

积分
23
6#
发表于 2015-10-26 10:25 PM | 只看该作者
学习了...
回复 支持 反对

使用道具 举报

0

主题

97

帖子

30

积分

新手上路

Rank: 1

积分
30
7#
发表于 2016-1-28 01:24 PM | 只看该作者
不错不错……顶起来……
回复 支持 反对

使用道具 举报

2

主题

85

帖子

48

积分

新手上路

Rank: 1

积分
48
8#
发表于 2016-5-7 01:38 PM | 只看该作者
又学习了,谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表