- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
如何在Keil4下通过J-Link下载文件数据到STM32外部的Nor Flash
如何在Keil4下通过J-Link下载文件数据到STM32外部的Nor Flash
实验目的:
把一张320*240像素的图片文件,通过J-Link下载到STM32外部的Nor Flash里去,然后再读到LCD显示屏显示出来。用LCD转换图片工具把图片搞成一个C文件。
准备烧写算法:
声明:图例中用到的地址需要根据你自己的情况作相应调整。
Keil单片机开发平台是根据预先设定好的Flash烧写算法将用户程序烧到单片机的Flash内部的,那么由于这个算法是固定的,我们往往不关心,所以我们对其原理不是很了解,实际上,我们都知道,要将程序烧进去,需要在工程选项中选择对应的单片机型号,如下图所示。
这个过程就是准备Flash的烧写算法,选中了某个单片机型号,就确定了其使用的Flash特征,那么这些算法藏在什么地方呢。这些算法就藏在Keil安装的根目录下X:\Keil\ARM\Flash目下,该目录下有很多的文件夹,每个文件夹里有对应的工程,每个工程都是某种型号单片机的Flash烧写算法,他们具体的内容不同,但是具有统一的接口,以便被Keil调用。
现在我们要烧写STM32的外部Nor Flash,所以我们要新建一个算法:
新建一个文件夹,如Test。将X:\Keil\ARM\Flash\STM32F10x\下的所有文件拷进Test文件夹来,将X:\Keil\ARM\Flash\SST39x160x\下的FlashPrg.c文件也拷进Test文件夹来并覆盖同名文件,将X:\Keil\ARM\Flash\下的FlashOS.h文件也拷进Test文件夹来。如果你使用的Nor Flash不在MDK自带驱动的范围内,那么需要根据FlashPrg.c文件自行编写相关函数。
打开工程文件STM32Fx.uvproj,此时会报一个错误,提示没有选择STM32的Device型号。
这时你根据你的STM32的型号选择相应的就OK了,如下图所示。
在FlashDev.c中添加如下代码,有关这段代码请参考X:\Keil\ARM\Flash\SST39x160x\FlashDev.c,如下图所示:
本例中Nor Flash在STM32F10的地址映射中,其首地址是0且Nor Flash为16位模式,大小位2MB,Sector大小是4KB。该算法将其命名为STM32F10x NOR Flash,以后在工程选项中选择它即可。
修改FlashDev.c和FlashPrg.c中的头文件引用,改为如下图所示:
在目标属性中修改宏定义和输出文件,如下图所示:
编译此工程,将得到的STM32F10x_NOR.FLM文件拷入X:\Keil\ARM\Flash\文件夹中。然后在Keil的Flash下载设置中就出现了NOR Flash的选项:
这样我们就得到了Keil对Nor Flash的接口文件,一个新的Flash烧写算法诞生了,接下来是如何在工程中将数据弄到Nor Flash上。
准备烧写数据
新建工程,最好将要烧入Nor Flash的数据单独放在一个C文件里,不放也没关系,只是自己要很清楚哪些文件的数据需要烧到Nor Flash里。例如,本例的将数据放在picture.c中,编译后数据放在picture.o里。
添加烧写算法
烧写算法共两种,一部分将程序烧到片内Flash,一部分将数据烧到片外Nor Flash。Keil会根据不同的地址采用不同的算法。
指定烧写内容
选择使用Scatter 文件。点击Edit,做如下修改,将picture.o文件烧到外部Nor Flash。
自定义分散加载文件,在这里把数据定义到Nor Flash中,注意地址要根据你自己的情况来设置。我的picture数据是150KB,我从0始写入,预留0x40000(256KB)给它。
保存该文件后,在程序中要对数据进行使用,否则编译后未用到的数据可能会被优化掉,如,我这样用了下:
设置初始化操作文件,文件中的Bank初始化要根据你的情况来调整,我的板子的Nor Flash接在了stm32的FSMC_Bank1_NORSRAM2。
编译,点击Load就可以把程序和数据分别烧入STM32内部Flash和外部Nor Flash了,在烧写过程中可以看到最下方进度条中的地址是不同的。以后程序中就可以使用Nor Flash中的数据了。不过事先得初始化FSMC。
如此操作后数据文件picture.c也就没什么用了,可以从工程中删除,同时还要修改分散加载文件,加个分号屏蔽掉。
文档评论(0)