电子发烧友网 > 控制/MCU > 正文

基于STM32的IAP升级程序分享

2018年11月01日 16:16 ? 次阅读

因为之前写个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 Systems\Embedded Workbench 7.0\stm8\config

在这里面可以看到好多.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的地址

技术专区

下载发烧友APP

打造属于您的人脉电子圈

关注电子发烧友微信

有趣有料的资讯及技术干货

关注发烧友课堂

锁定最新课程活动及技术直播
收藏 人收藏
分享:

评论

相关推荐

STM32单片机设计extern全局变量的定义解...

当你建立一个头文件库时,经常会遇到一个问题,就是在A文件中定义一个temple变量,想把它的值传递给...

发表于 2018-11-01 16:10 ? 2次阅读
STM32单片机设计extern全局变量的定义解...

怎样用STM32单片机的GPIO控制LED显示状...

ODR寄存器可读可写:既能控制管脚为高电平,也能控制管脚为低电平。 管脚对于位写1 gpio ...

发表于 2018-11-01 15:45 ? 8次阅读
怎样用STM32单片机的GPIO控制LED显示状...

基于STM32单片机高级控制定时器TIM1和TI...

STM32的通用定时器是一个通过可编程预分频器(PSC)驱动的16 位自动装载计数器(CNT)构成。...

发表于 2018-10-30 16:10 ? 72次阅读
基于STM32单片机高级控制定时器TIM1和TI...

基于STM32单片机对跑马灯的控制

首先要知道普通的IO就两种功能一个为输入,一个为输出。然后再以输入和输出细分为以哪种模式输出、以哪种...

发表于 2018-10-30 16:02 ? 54次阅读
基于STM32单片机对跑马灯的控制

如何选择STM32的启动代码

●小容量产品是指闪存存储器容量在16K 至32K 字节之间的STM32F101xx、STM32F10...

发表于 2018-10-30 16:00 ? 41次阅读
如何选择STM32的启动代码

基于STM32单片机对流水灯的控制

1.跟着例程自己创建自己的工程时,出现了GPIO库文件里有undefined等等,在我们刚开始学习新...

发表于 2018-10-30 15:42 ? 69次阅读
基于STM32单片机对流水灯的控制

基于STM32单片机秒中断源和闹钟中断源的解决方...

在计算机应用上,2038年问题可能会导致某些软件在2038年无法正常工作。所有使用UNIX时间表示时...

发表于 2018-10-30 14:58 ? 29次阅读
基于STM32单片机秒中断源和闹钟中断源的解决方...

基于STM32单片机在手持设备中的应用设计

STM32作为现在最流行的单片机,广泛应用与各个领域。现在的手持设备也经常用STM32作为主控芯片。...

发表于 2018-10-29 15:53 ? 91次阅读
基于STM32单片机在手持设备中的应用设计

基于STM32单片机流水灯控制中的GPIO_In...

学习STM32时,首先要熟悉流水灯例程,在这里就来分析流水灯中的GPIO_Init()函数 例...

发表于 2018-10-29 15:42 ? 66次阅读
基于STM32单片机流水灯控制中的GPIO_In...

基于STM32单片机FSMC协议分析

FSMC对于类RAM存储器的读操作过程一般是:先发出片选信号、读写信号和地址信号,然后等待数据建立完...

发表于 2018-10-26 15:42 ? 43次阅读
基于STM32单片机FSMC协议分析

基于ESP8266和STM32单片机的程序代码编...

ESP8266模块在STM32上做Server时,外部对其端口进行收发数据的程序,大部分代码都备注了...

发表于 2018-10-25 15:12 ? 136次阅读
基于ESP8266和STM32单片机的程序代码编...

基于stm32单片机利用通用定时器输出PWM

第一步:开启时钟使能 RCC-》APB1ENR:1 位 //开启定时器3 时钟使能 第二...

发表于 2018-10-25 15:05 ? 100次阅读
基于stm32单片机利用通用定时器输出PWM

ST推出了STLINK-V3下一代STM8和ST...

意法半导体推出了STLINK-V3下一代STM8 和STM32微控制器代码烧写及调试探针,进一步改进...

发表于 2018-10-25 14:48 ? 83次阅读
ST推出了STLINK-V3下一代STM8和ST...

基于STM32单片机低功耗模式机制详细解析

本文主要解读STM32低功耗模式的机制,并不侧重STM32低功耗的程序实现,而且借助STM32固件库...

发表于 2018-10-24 16:16 ? 106次阅读
基于STM32单片机低功耗模式机制详细解析

基于STM32单片机的串口使用解析

STM32串口功能比较强大,但仅仅使用串口来说,是很简单的

发表于 2018-10-24 16:11 ? 95次阅读
基于STM32单片机的串口使用解析

基于STM32F103系列单片机的11个定时器解...

STM32F103系列的单片机一共有11个定时器,其中: 2个高级定时器 4个普通定时器...

发表于 2018-10-23 15:54 ? 62次阅读
基于STM32F103系列单片机的11个定时器解...

基于STM32单片机ADC连续采集和DMA循环转...

描述:用ADC连续采集11路模拟信号,并由DMA传输到内存。ADC配置为扫描并且连续转换模式,ADC...

发表于 2018-10-22 15:28 ? 112次阅读
基于STM32单片机ADC连续采集和DMA循环转...

基于STM32单片机通过使用宏assert_pa...

固件函数库通过检查库函书的输入来实现运行时间错误侦测。通过使用宏assert_param来实现运行时...

发表于 2018-10-22 15:12 ? 62次阅读
基于STM32单片机通过使用宏assert_pa...

基于STM32时钟系统的开发及配置

研究过时钟来源,再来研究时钟的去向,MCU自身要能正常运作,即需要一个时钟,这个时钟既是系统时钟(S...

发表于 2018-10-19 15:55 ? 158次阅读
基于STM32时钟系统的开发及配置

STM32单片机常见的工作异常现象分析及解决方案

工作异常现象:main函数中的系统运行指示灯不闪烁,但是初始化过程中点的一个灯是亮的!说明程序运行一...

发表于 2018-10-19 15:55 ? 105次阅读
STM32单片机常见的工作异常现象分析及解决方案

基于stm32单片机,FLASh先擦后写的函数分...

void FLASH_WriteByte(u32 addr ,u16 flashdata1) ...

发表于 2018-10-18 15:30 ? 124次阅读
基于stm32单片机,FLASh先擦后写的函数分...

基于STM32单片机利用ST库函数设置Systi...

对于STM32系列的微处理器中,执行一条指令只需要几十ns,进行for循环时,要实现N毫秒延时,那么...

发表于 2018-10-18 15:12 ? 90次阅读
基于STM32单片机利用ST库函数设置Systi...

基于STM32单片机的功能及特点

STM32是32位的单片机却只要八位单片机的价格,速度也是八位的好几倍。 更重要的是它作为ARM入...

发表于 2018-10-17 16:51 ? 176次阅读
基于STM32单片机的功能及特点

STM32单片机外部晶振配置时钟设置

由于STM32的库默认是外部晶振8M的情况下实现的,所以配置串口波特率的时候也是按8M,包括主频。 ...

发表于 2018-10-12 16:11 ? 181次阅读
STM32单片机外部晶振配置时钟设置

基于通过寄存器和调用库函数的方式,对比测试STM...

通过在线调试的方式,可以看出1条C语句:GPIOA -> BSRR = 1<<3;//PA3输出高电...

发表于 2018-10-12 15:59 ? 97次阅读
基于通过寄存器和调用库函数的方式,对比测试STM...

STM32单片机特性解析

其基于专为要求高性能、 低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核,同时具有一...

发表于 2018-09-10 16:55 ? 402次阅读
STM32单片机特性解析

单片机的简介51单片机和STM32单片机的区别及...

单片微型计算机简称单片机,简单来说就是集CPU(运算、控制)、RAM(数据存储-内存)、ROM(程序...

发表于 2018-07-06 15:57 ? 1391次阅读
单片机的简介51单片机和STM32单片机的区别及...

在keil中仿真stm32单片机

发表于 2018-07-06 06:54 ? 385次阅读
在keil中仿真stm32单片机

STM32串口SPI主从通信源程序

发表于 2018-07-06 03:08 ? 364次阅读
STM32串口SPI主从通信源程序

在keil中仿真stm32单片机

发表于 2018-07-02 01:20 ? 145次阅读
在keil中仿真stm32单片机

7个基于STM32单片机的精彩设计实例

STM32是ST公司推出的基于ARM-Cortex-M3内核的32位单片机。

发表于 2018-04-13 17:11 ? 2950次阅读
7个基于STM32单片机的精彩设计实例

stm32单片机休眠模式后无法下载程序怎么办

利用stm32单片机的休眠模式,使单片机间歇的休眠从而实现低功耗的目的。往往会出现进入休眠后无法唤醒...

发表于 2018-03-23 14:40 ? 548次阅读
stm32单片机休眠模式后无法下载程序怎么办

stm32单片机入门c语言解析

学习思路(仅供参考):步骤一,安装完STM32学习的软件,比如J-Link、Keil for ARM...

发表于 2017-12-23 15:26 ? 9074次阅读
stm32单片机入门c语言解析

电流检测哪种方法好用?

发表于 2017-12-10 20:37 ? 5098次阅读
电流检测哪种方法好用?

stm32单片机gpio工作原理是怎样的呢?看完...

黄色的高亮部分显示了数据传输通道,外部的电平信号通过左边编号1的I/O 端口进入STM32内部经过编...

发表于 2017-11-28 07:32 ? 4310次阅读
stm32单片机gpio工作原理是怎样的呢?看完...

STM32单片机GPIO口的学习

STM32的每个IO端口都有7个寄存器来控制。他们分别是:配置模式的2个32位的端口配置寄存器CRL...

发表于 2017-11-25 09:52 ? 685次阅读
STM32单片机GPIO口的学习

stm32单片机中使用GPIO口模拟PWM输出解...

STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核...

发表于 2017-11-24 17:33 ? 2113次阅读
stm32单片机中使用GPIO口模拟PWM输出解...

单片机RS485通信接口、控制线、原理图及程序教...

RS232 标准是诞生于 RS485 之前的,但是 RS232 有几处不足的地方:接口的信号电平值较...

发表于 2017-04-24 14:12 ? 9224次阅读
单片机RS485通信接口、控制线、原理图及程序教...

单片机STM32的引脚模式设置

单片机STM32的引脚有多种方式可以选择。 如果你是用直接写寄存器来配置的话,那么,看上手册,给配置...

发表于 2016-08-16 18:21 ? 6862次阅读
单片机STM32的引脚模式设置

工厂自动化难题,用STM32-F2全方位解决方案...

工业环境正在对嵌入式控制系统开发人员构成日益严峻的挑战,究其主要原因,当前系统和通信协议栈变得越来越...

发表于 2013-06-13 11:33 ? 4864次阅读
工厂自动化难题,用STM32-F2全方位解决方案...

工程师应该掌握的STM32单片机关键基础精华

从51开始,单片机玩了很长时间了,有51,PIC,AVR等等,早就想跟潮流玩玩ARM,但一直没有开始...

发表于 2013-04-15 11:45 ? 19717次阅读
工程师应该掌握的STM32单片机关键基础精华

STM32学习手记(5):数据的保存与毁灭!

据说,32位单片机很可能会取代8位单片机或16位单片机,诸如51,PIC,AVR等。于是等到Cort...

发表于 2012-12-11 09:36 ? 36565次阅读
STM32学习手记(5):数据的保存与毁灭!

工程师STM32单片机学习基础手记(4):用PW...

用PWM的方法实现荧火虫灯——上次提到要用Timer的PWM功能来实现荧火虫灯。当然还是找一个现成的...

发表于 2012-11-07 15:24 ? 19119次阅读
工程师STM32单片机学习基础手记(4):用PW...

工程师STM32单片机学习手记(3):修修改改玩...

在第6篇笔记中,我用软件延时的方法实现了荧火虫,学了定时器,当然就要用一用定时器了,这里仍是用荧火虫...

发表于 2012-10-25 10:18 ? 24202次阅读
工程师STM32单片机学习手记(3):修修改改玩...

工程师STM32单片机学习基础手记(2):从勉强...

将蓝色框内的GPIOC改为GPIOD。这个是最先写的,但实际上一开始根本没注意到这个地方,没有改成G...

发表于 2012-10-11 11:53 ? 18796次阅读
工程师STM32单片机学习基础手记(2):从勉强...

STM32单片机,想说爱你不容易!?

电子发烧友网讯:单片机领域从来就不缺激烈观点的碰撞,也许不同观点间的碰撞,会容易擦出更为绚丽的智慧火...

发表于 2012-09-28 15:07 ? 16994次阅读
STM32单片机,想说爱你不容易!?

STM32单片机小Tips(1):充分准备与开始...

前言:从51开始,单片机玩了很长时间了,有51,PIC,AVR等等,早就想跟潮流玩玩ARM,但一直没...

发表于 2012-09-27 11:03 ? 32413次阅读
STM32单片机小Tips(1):充分准备与开始...
a计划博彩 a计划博彩,连环夺宝注册送,唯品会注册送60元