历史上的今天
返回首页

历史上的今天

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

正在发生

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

2020-02-08 来源:elecfans

因为之前写个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的地址

推荐阅读

史海拾趣

EPC公司的发展小趣事

某EPC公司始终将品质放在首位,建立了完善的质量管理体系和严格的质量控制标准。公司注重从源头上控制产品质量,通过严格筛选原材料、加强生产过程监控和检测等措施,确保产品的稳定性和可靠性。同时,公司积极响应客户需求和反馈,不断改进产品和服务质量,赢得了客户的广泛赞誉和信赖。凭借卓越的品质和口碑效应,公司逐渐在电子行业中树立了良好的品牌形象。

Appointech Inc公司的发展小趣事

Appointech Inc公司深知品质是企业的生命线。因此,公司建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格把控。同时,公司还注重品牌建设,通过不断提升产品质量和服务水平,树立了良好的企业形象和口碑。

Electronic Transistors Corp公司的发展小趣事

在电子行业的早期,ETC公司以其独特的技术创新能力在晶体管市场上崭露头角。公司创始人带领研发团队,通过不断的实验和改进,成功研发出一种新型的MOSFET晶体管,具有更高的性能和更低的功耗。这一创新成果迅速在市场上引起轰动,ETC公司的知名度也随之提升。随着产品销量的不断增长,ETC逐渐在电子行业中确立了其领导地位。

ELMOS公司的发展小趣事

ELMOS公司自创立以来,就专注于汽车电子领域的发展。多年来,公司不断积累在模拟混合信号集成电路设计方面的专业知识,形成了深厚的技术底蕴。这种长期的技术积累使得ELMOS在汽车和工业物理接口领域拥有广泛的产品线,特别是在供电和DC/DC方面积累了丰富的经验。这种技术积累不仅为ELMOS赢得了市场的认可,也为公司的持续发展奠定了坚实的基础。

DMS Electronic Components, Inc公司的发展小趣事

在电子行业中,市场拓展是企业发展的关键因素之一。DMS积极开拓国内外市场,与众多知名企业建立了长期稳定的合作关系。公司通过提供优质的产品和服务,赢得了客户的信赖和支持。同时,DMS还积极参与行业展会和交流活动,与同行进行技术交流和合作,共同推动电子行业的发展。

Compex Corporation公司的发展小趣事

随着电子行业的快速发展,Compex Corporation意识到只有不断创新才能在市场中保持竞争力。因此,公司加大了在研发方面的投入,积极引进先进的技术和设备。XXXX年,公司成功研发出了一款具有革命性的新型电容器,其性能远超市场上的同类产品。这一技术突破不仅提升了公司的技术水平,也进一步巩固了其在市场中的地位。

问答坊 | AI 解惑

pcb相关资料

PCB相关资料有吗?查到一个但上载不了…

查看全部问答>

有没有哪位大侠设计过这种电压-频率转换电路

输出频率与输入电压成正比,但是需要确保输出的波形(方波)占空比为一个固定的值。 拜谢!…

查看全部问答>

Mini2440 按键驱动程序详解

/*mini2440_buttons_my.c*/ /*后面加了_my*/ /*按键驱动程序*/ /*mini2440所用到的按键资源*/ /**************************************************/ /* 按键          对应的IO寄存器      ...…

查看全部问答>

m8最小系统原理图

想搞个m8最小系统的实验板 可是没有原理图 高手们给否给一张…

查看全部问答>

送分了进者有份啊

现有项目 个人 团队皆可合作 最好在广州或者深圳 有意邮件yqb_box@163.com 或者QQ:437395559 在PDA上做应用软件开发 PDA支持读卡器 条码扫描 CDMA GSM 网络 GPS 打印机等 应用相对简单 在PDA上能录入数据 检索服务器上的相关信息 驱动设备 设备 ...…

查看全部问答>

有人要热敏打印机驱动不,可以联系xgx_a1@163.com

有人要热敏打印机驱动不,可以联系xgx_a1@163.com…

查看全部问答>

如何在IAR442中产生bin/hex文件

                                 如何在IAR442中产生bin/hex文件,可用于flash loader…

查看全部问答>

大家学习STM32时会花很多精力去学习CM3底层架构吗?[转]

                                 大家学习STM32时会花很多精力去学习CM3底层架构吗?…

查看全部问答>

现在对430的时钟有点迷糊,希望高人指点?

ACLK,MCLK,SMCLK三个什么意思理解,可是有什么具体的关系,求指点?…

查看全部问答>

刚画了个简单的51仿PLC电路,各位大大们帮看一下哈!

我是新手,刚画了个简单的51仿PLC电路,想做个板子试试,但不知有没有什么问题,所以请大家帮指点一下。…

查看全部问答>