STM8S全解析之系列文章4---STM8S芯片项目升级引导程序(使用中断接收升级数据)

本文介绍了如何在STM8S单片机上实现使用中断接收升级数据的引导程序,详细讲解了Flash的分区、中断向量重定向的方法,以及Boot和App代码的配置。通过修改IAR的ICF配置文件和编写特定的中断处理函数,实现了在不支持中断向量重定向的STM8S上进行稳定快速的升级。
摘要由CSDN通过智能技术生成

STM8S全解析之系列文章4—STM8S芯片项目升级引导程序(使用中断接收升级数据)

《STM8S全解析之系列文章1—STM8S芯片项目需求与解决方案》

《STM8S全解析之系列文章2—在IAR上新建STM8S芯片项目》

《STM8S全解析之系列文章3—STM8S芯片项目软件框架的搭建》

《STM8S全解析之系列文章4—STM8S芯片项目升级引导程序(使用中断接收升级数据)》

持续更新中 ^ _ ^



前言

用过STM8S都知道它没有中断向量重定向,也就意味着STM8S的中断向量没办法指向其他的位置,间接说明升级的引导程序没办法使用中断。其实这个不对的,有方法可以使用。。。那就是将中断向量固定的0x8000地址指向某个固定的地址(堆里的),然后通过改变堆里的地址指向我们项目中的中断向量地址就可以完成中断向量重定向。


一、Flash划分boot和App

以STM8S207R8为例,Flash带下0x08000 – 0x17FFF 共64K
在这里插入图片描述
这里需要配置Flash就需要用到lnkstm8s207r8.icf这个文件啦,在IAR文件夹下新建文件夹Linker留用
首先配置下IAR里的芯片,项目右键Options -> General Options -> Target -> Device 里面选择你使用的芯片(我这里是STM8S207R8)
同样在Options -> Linker -> Config -> Linker configeration file下选择相应芯片型号的文件,并将此文件复制到刚创建的文件夹Linker下,再把地址改成Linker下的地址,可以使用相对地址,见图
在这里插入图片描述首先打开STM8S_Demo_Boot文件夹下面的lnkstm8s207r8.icf文件,增加一个IntvecData,修改一点Flash范围
在这里插入图片描述
在这里插入图片描述
同样STM8S_Demo_App文件夹下面的lnkstm8s207r8.icf文件也要进行相应的调整
在这里插入图片描述
这样的话,项目就修改完成了,下面开始撸代码

二、如何配置升级代码呢

1.Boot代码配置

新建一个app_iap.c 一个app_iap.h文件,加到include.h文件下,app_iap.c添加如下代码

///==============================================================BootFlag======
#pragma location = ".reintvec"
__no_init volatile SCH_U32 intvec[32];
__root const long reintvec[]@".intvec"=
{
   
 0x82008080,0x82000004,0x82000008,0x8200000c,
 0x82000010,0x82000014,0x82000018,0x8200001c,
 0x82000020,0x82000024
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值