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