stm32f103 rt-thread fal easyflash移植过程

需求:使用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就完成了。

 

 

 

 

posted @ 2021-08-21 22:57  DW039  阅读(878)  评论(0编辑  收藏  举报