关于IAP与APP互相跳转的实现

发布时间:2021-06-08

关于IAP与APP互相跳转的实现

首先,在您动手做这个实验之前,先要弄清除咱俩的软硬件有什么不同:

1. 我的CPU是STM32F103ZET6,里面有512K的FLASH,您的CPU如果是其它类型,也不要紧,只是在程序里面,地址上限可能不一样。但是,个人觉得,最好能用256K以下的FLASH。

2. 我的外部存储介质是U盘,如果您的外部存储介质是SD卡,那也应该一样用,只是它们必须是FAT16,FAT32文件系统。如果您的板上没有外部存储介质,那也能做跳转实验,只是不能做加载APP实验。

3. 我的仿真器是JLINK7,如果您的仿真器是其它的,估计也没多大问题,只要您会用它就行了。什么?没有仿真器,那还是别做这个实验吧,出错了没法调试。

4. 我的开发环境是RVMDK 3。7,STM库是V2。03。使用其它开发环境的话,您要是能找到MDK中的设置对应到您那里怎么设置,估计也没问题。至于库嘛,您现在是用哪个就哪个吧,全部包在您的工程里,没问题的。

好了,开始啦。

先找个你以前调好的工程,当然,最好是非常可靠的,内容很精彩的,带液晶显示的,这样比较容易知道你后面有没有调好。这个工程还最好是在FLASH里面运行的,如果不是,要将它改回来。

至于什么开发文档,太麻烦了,不用看。我之前看了STM的IAP应用笔记AN2557,就觉得一个字“乱”,特别是心里还没谱的时候,更是越看越糊涂,这么大个工程,到最后对我有帮助的,就是一小段,就是如何擦除,如何编程那小段。当然,STM32的库还是非常有用的,如果不用库的话,学习、工作进度会慢很多。

说多啦,找好工程没有?找好工程咱就开工了。将这个工程复制两份,一份命名为IAP,一份命名为APP。

第一步:规划好你两个程序的存放位置。

IAP程序肯定是从0X08000000开始的,因为它是引导程序。将IAP程序放在0X08000000-0X0800FFFF的位置,给它64K空间,足够了。

APP程序从0X08010000-0X0807FFFF,给它448K空间。

如果您的CPU不同,那APP程序的空间小一点,也没问题。

第二步:制作你的APP程序。

1. 将程序定位在0X08010000开始的位置。

点魔术棒,打开目标选项设置。

选Target选项卡,IROM1改成从0X08010000开始,尺寸0X00070000; Debug选项卡,Load Application at Startup打上勾,Run to main()打上勾; Utilitiles选项卡,点settings按纽,弹出Flash download卡,Erase sectors打上勾,点你的编程算法,将底下的的起始地址改成0X08010000,尺寸

0X00070000。

2. 制作一个RunInFlashOffset.ini文件。文件内容为:

SP = _RDWORD(0x08010000); // Setup Stack Pointer

PC = _RDWORD(0x08010004); // Setup Program Counter

目的是在用JLINK调试的时候,引导程序运行。

点魔术棒,打开目标选项设置。

选Debug选项卡,Initialization File:项,选择上面的RunInFlashOffset.ini。

3. 为了从IAP程序跳来运行APP的时候正常开始,初始化时要恢复RCC为复位状态,恢复NVIC为复位状态。

在你的RCC初始化部分,第一句加上:

RCC_DeInit();

在你的NVIC初始化部分,第一句加上:

NVIC_DeInit ();

4. 重定位中断表到0X08010000位置。

在上面NVIC_DeInit ();后面加上:

NVIC_SetVectorTable (NVIC_VectTab_FLASH, 0x00010000);

关于IAP与APP互相跳转的实现.doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219