记录STM32F103ZET6制作SPI接口外部Flash下载算法的过程

        在做嵌入式UI开发的时候发现有时候UI图片很大,而单片机的Flash有限,所以考虑挂载外部flash,将UI图片、字库等耗资源的部分放到外部flash中,于是了解到可以通过MDK制作外部flash下载算法来实现这个,再次对该过程做一次记录。

 1、准备工作

        1、Keil V5版本、STM32Cube(可选)

        2、外部Flash驱动工程,(工程可以自己制作,或者用其他的标准例程来修改),保证读写檫除等功能都是OK的

2、开始制作

        笔者使用的是STM32F103ZET6开发板,板上挂载了W25Q64 8M的外部Flash,用STM32cube生成配置,将Flash初始化,读写接口,檫除接口一并移植到工程中,其中有两处注意

        Project中选择不生成main函数

        Code Generator中选择只复制需要的文件到工程目录下,这样可以减小工程大小

        (1)找到Keil安装目录中ARM/CMSIS/_Template_Flash文件夹下,将其中的几个文件拷贝到刚生成的工程目录下

        (2)添加目录到工程文件中

        (3)修改FlashPrg.c文件中的接口函数

        Init()初始化,将初始化的接口都放在其中

        

        EraseChip(),檫除全片,把Flash接口中的檫除全片接口在此处调用

        

        EraseSector(),区檫除,把Flash接口中的檫除区接口在此处调用

        

        ProgramPage(),页编程,把Flash接口中的页编程接口在此处调用

        

        Verify(),自己编写

        

        (4)修改FlashDev.c文件FlashDevice,其中注意Device Type改成EXTSPI,外部SPI设备,0x90000000为调用起始地址,和单片机Flash地址区分开,0x00800000为外部Flash大小,此处为8M,页大小256字节,区大小4096字节

        

        (5)将原工程中的启动文件屏蔽掉,右键->Options for file

        (6)修改编译内容

Output->Name of Executable下的名称为最后生成算法的名称

User->Run #1中填写  cmd.exe /C copy "STM32F103ZET6_W25Q64\%L" ".\@L.FLM"

其中注意字段STM32F103ZET6_W25Q64为输出文件的目录

C/C++项下,注意以下几处的配置

Linker项下

取消第一项的勾选

选择Target.lin文件

在Misc中填写--diag_suppress L6305

之后再开始编译

编译成功后在工程目录下生成一个.FLM文件

笔者之前遇到过一个编译失败的情况

cannot use the address of 'RWPI (R9 used as SB)' function

后来发现是移植之前测试Flash驱动的时候,在Target中勾选了Use MicroLIB的原因,把这个勾选去掉之后,编译就通过了,没有错误

        (7)生成FLM之后,将该生成文件移动到Keil安装目录下ARM/Flash文件夹中即可。

        (8)在Keil/Flash Download项下点击Add,可以找到我们刚生成的算法

        

        (9)笔者目前还没有试过如何使用,后面尝试之后再看是否需要记录使用过程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值