历史上的今天

今天是:2025年02月08日(星期六)

正在发生

2020年02月08日 | 基于STM32的IAP升级程序分享

发布者:数据之翼 来源: elecfans关键字:STM32  IAP  升级程序 手机看文章 扫描二维码
随时随地手机看文章

因为之前写个STM32的IAP升级程序,所以我总结了做IAP升级的三个主要的难点:

1、如何设置中断向量,也就是说中断向量的重定向

2、如何配置程序的起始地址

3、如何从IAP跳转到APP程序

4、使用库函数要注意的地方(防止被坑)

说文章的时候我已经完成了一个最简单的IAP升级程序,可以通过串口接收bin文件写入到flash里面,然后再运行。

基于STM32的IAP升级程序分享

1、如何设置中断向量,也就是说中断向量的重定向

STM8不像STM32那样有个一寄存器管理着中断向量的地址,所以STM32的中断可以任意设置(符合要求的情况之下),但是STM8的中断向量表是固定的

在0X8000地址,不能修改,所以BOOT区不能开中断,否则会和APP区的中断打架,但是APP区的一但开启中断后就会跳转到0x8000地址,这样就跳到了BOOT区,因此需要使用跳转指令将中断跳回到APP区,

通过下面的方式就可以重定向APP的中断向量,但是bootloader就不可以使用中断了,但是网上有人说可以把中断定向到arm里面,通过arm的属性在bootloader和APP分别重定向,就可以实现bootloader和APP都使用中断,但是我还不会 ,如果你们会可以留言告诉我 谢谢

__root const long reintvec[]@“.intvec”=

{

0x82008080,0x8200A804,0x8200A808,0x8200A80c,

0x8200A810,0x8200A814,0x8200A818,0x8200A81c,

0x8200A820,0x8200A824,0x8200A828,0x8200A82c,

0x8200A830,0x8200A834,0x8200A838,0x8200A83c,

0x8200A840,0x8200A844,0x8200A848,0x8200A84c,

0x8200A850,0x8200A854,0x8200A858,0x8200A85c,

0x8200A860,0x8200A864,0x8200A868,0x8200A86c,

0x8200A870,0x8200A874,0x8200A878,0x8200A87c,

}; 这就是我的重定向中断 ,因为STM8的flash从0x8000开始到0xA800 正好是0x2800字节 ,这个数正好是10K,也就是说我给bootloader预留了10K的空间,而我用的stm8s207R8t6是64k


2、如何配置程序的起始地址

配置bootloader程序空间的大小是在一个后缀为icf的文件里面设置,这个文件在iar的安装目录里面的有

我安装的目录如下C:Program Files (x86)IAR SystemsEmbedded Workbench 7.0stm8config

在这里面可以看到好多.icf后缀的文件,然后选择一个和芯片一致的,我就选择lnkstm8s207r8.icf,复制到我们的工程里面,再在IAR里面如下设置

r

然后打开icf文件修改如下

define region NearFuncCode = [from 0x8000 to 0xA7FF];

define region FarFuncCode = [from 0x8000 to 0xA7FF];

// “ [from 0x10000 to 0x17FFF];

define region HugeFuncCode = [from 0x8000 to 0xA7FF];

这面都是说修改的是bootloader的程序

下面是修改app的icf文件

define region NearFuncCode = [from 0xA800 to 0x17FFF];

define region FarFuncCode = [from 0xA800 to 0xFFFF]

| [from 0x10000 to 0x17FFF];

define region HugeFuncCode = [from 0xA800 to 0x17FFF];

到这里地址的修改也就完成了,下面开始说下跳转


3、如何从IAP跳转到APP程序

STM8的跳转很容易,利用如下汇编就可以实现跳转

asm(”LDW X, SP “);

asm(”LD A, $FF“);

asm(”LD XL, A “);

asm(”LDW SP, X “);

asm(”JPF $A800“);

这个就是实现跳转到app的程序


4、使用库函数要注意的地方(防止被坑)

使用库函数读写flash的时候一定要注意,因为STM8的flash的库函数有点问题,他把地址都强制转换成16位的了,16位的寻址范围是0至0xFFFF的64K空间,但是STM8的flash使用0x8000开始,64kflash的大小空间到了0x17FFF,所以如果不修改库函数的读写就会出错。

这就是库函数的,我们要把它改成uint32_t这样才可以读写超过0xFFFF的地址

关键字:STM32  IAP  升级程序 引用地址:基于STM32的IAP升级程序分享

上一篇:单片机外部接上下拉电阻的好处是什么
下一篇:STM32单片机设计extern全局变量的定义解析

推荐阅读

Vicor 针对最新铁路运输及基础设施应用发布新一代 DCM,其所采用的一系列宽输入范围(43 - 154V 输入)3623(36 x 23 毫米)ChiP 支持高达 240W 的功率以及高达 93% 的效率。 现代铁路基础设施需要各种 DC-DC 转换器,为货运及客运市场提供各种不同的全新服务。客运轨道交通系统需要能够支持家庭信息娱乐的移动办公通信功能,而货运铁路系...
还记得英伟达去年推出的StyleGAN吗?全新的生成器架构让这个“新一代GAN”生成的人脸真实到可怕。现在,StyleGAN已经开源,包括源代码和官方TensorFlow实现,附有详细使用说明。多说一句,还请谨慎使用,不要让StyleGAN成为第二个DeepFake。还记得英伟达震撼世人的新一代GAN吗?以假乱真的精细人脸生成,令不少研究人员都惊呼:已经无法分辨虚拟和现实!上...
内容说明本发明实施例涉及流量测量技术领域,尤其涉及超声流量计。发明背景作为目前世界上最先进、精确的流量测量仪表之一,超声流量计在石油、石化、化工、制药、造纸、食品和能源等行业工艺过程的检测和贸易交接计量等场合广泛应用,它可以容易地确定管道中的体积流量。现有的超声流量计,每个换能器既为发射换能器,又为接收换能器,能够沿着介质流动方...
当Daniella Chusyd在伯明翰的阿拉巴马大学研究生院学习时,她注意到许多同事都使用Fitbits等计步器来研究人们的肥胖和活动。她想知道自己是否可以在自己的研究中使用相同的方法来研究肥胖和新陈代谢如何影响生殖健康,唯一的区别是:Chusyd研究大象。与专注于人类的研究人员不同,Chusyd无法使用随时可以使用的消费者健身追踪器。一方面,大象是巨大的。...

史海拾趣

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved