需求:使用Stm32F103片内Flash进行数据存储
硬件平台:Stm32F103C8t6(由于Stm32F103C8t6的Flash标注为64k实际为128K,64KFlash在使用rt-thread+finsh后已经捉襟见肘 。因此在配置将其配置为Stm32F103Cb,将Flash扩至128K)
项目开发工具:Env+MDK5
代码要求:根据Stm32F103CB芯片信息制作出
一、Env配置
1、修改board目录下的Kconfig,增加下图选项
2、Env配置
3、保存后更新软件包
pkgs --update
4、生成MDK5项目
scons --target=mdk5
二、FAL概念与配置
本人是刚接触RT-Thread的新手,对FAL中涉及到的概念最初毫无了解。通过看资料和实践总结一下个人心得,欢迎拍砖交流。
1、Flash设备
在RT-Thread中串口、Pin等都被定义为设备。正常情况下设备都需要通过驱动程序在RT-Thread操作系统中注册,注册完成后就能查找、调用。片内Flash存储器按理说也应该注册,但实际上它并未在系统设备中注册(至于为什么没有注册,本人尚未搞明白)。
但是在移植过程中,还是有该Flash设备的定义的:
Flash设备对象是: stm32_onchip_flash,它的名称是:onchip_flash,具体参考:FAL的说明
以上这些都是系统配置后自动生成的,不需要修改。
2、Flash设备表
它的意义是指明系统中有哪些Flash设备,类似指明windows操作系统中有多少块硬盘(windows设备管理器里面的硬盘数量)。
将项目目录下的:\packages\fal-v0.5.0\samples\porting\fal_cfg.h 拷贝到:\packages\fal-v0.5.0\src\inc中,修改如下:
上图所示,我的系统中只有一个Flash设备(&stm32_onchip_flash),它就是在drv_flash_f1.c中定义的:stm32_onchip_flash
3、分区表
它的意义就是指定某个系统Flash设备上的存储空间分区情况,类似与电脑指明电脑中每个硬盘的分区情况。
如上图所示:我的系统中有一个分区,它的名字叫“easyflash”(其实也可以叫它“d:”);这个分区位于名字叫“onchip_flash”的Flash设备上;它的起始地址为:120*1024,大小为:8*1024字节。
通过上述信息,FAL的设备及分区信息就配置完成了。
4、运行查看信息:
在程序运行时调用:fal_init();
三、easyflash配置
1、将项目目录下的:\packages\EasyFlash-v4.1.0\ports\ef_fal_port.c 拷贝到:\packages\EasyFlash-v4.1.0\src下,修改如下:
指明:easyflash要使用的Fal的分区名称
2、在程序运行时调用:easyflash_init()
效果:
首次运行easyflash时会显示红色框中的警告信息
到此stm32f103上运行RT-Thread+FAL+easyflash就完成了。