stm8 bootloader IAP升级

发布者:zhuanshi最新更新时间:2017-11-20 来源: eefocus关键字:stm8  bootloader  IAP升级 手机看文章 扫描二维码
随时随地手机看文章

首先,stm8的中断向量的跳转地址是固定的。也就是说发生中断时,芯片会跳转到0x8000对应中断的偏移地址。而大部分bootloader都是在该区域实现。也就是说中断向量会被bootloader所占用。当用户程序执行中断时会跳转到bootloader程序的中断向量。也就会执行bootloader对应的中断。如果要执行用户代码区的中断函数则需要在bootloader的向量表区存放跳转置用户软件中断向量表。如下图跳转:

【原创】stm8 <wbr><wbr>bootloader自制bootloader(IAP远程升级)填写图片摘要(选填)

以上是带有bootloader的用户软件的运行步骤,这样在bootloader区按道理是无法实现中断的。因为向量表是跳转到用户软件向量表。实质上是可以同时在boot和app区实现中断的,但为了boot区越简单越好的原则这样做就足够了。

其次,如何实现boot区中断向量的改写将其跳转至用户中断向量表区?实现代码如下:

 __root const long reintvec[]@".intvec"=

{   

    0x82008080,0x82009004,0x82009008,0x8200900c,                                                                                                           0x82009010,0x82009014,0x82009018,0x8200901c,

    0x82009020,0x82009024,0x82009028,0x8200902c,

    0x82009030,0x82009034,0x82009038,0x8200903c,

    0x82009040,0x82009044,0x82009048,0x8200904c,

    0x82009050,0x82009054,0x82009058,0x8200905c,

    0x82009060,0x82009064,0x82009068,0x8200906c,

    0x82009070,0x82009074,0x82009078,0x8200907c,

};                                

这是将该数组的值固定存储在intvec区域。

在icf文件中我们可以找到以下语句:

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

define block INTVEC with size = 0x80 { ro section .intvec };

place at start of NearFuncCode  { block INTVEC };

以上三条是系统默认的,只要在bootloader代码中加入以上数组,那么向量表就会被改变。在使用IAR仿真时可以看到以下内容:

【原创】stm8 <wbr><wbr>bootloader自制bootloader(IAP远程升级)填写图片摘要(选填)

0x82008080是上电复位跳转指令,后面0x82009004是用户中断向量表区对应中断。如果用户代码并非存放在0x9000区,则该数组值也要相应改变。

在地址0x9000用户代码区数据如下:

【原创】stm8 <wbr><wbr>bootloader自制bootloader(IAP远程升级)填写图片摘要(选填)

该区域才是真正的中断入口地址。

最后就是写bootloader代码了。可以通过串口、I2C、SPI或者CAN来接收用户代码并写入到FLASH中。写入成功后执行跳转指令进入用户APP。升级步骤如下:

【原创】stm8 <wbr><wbr>bootloader自制bootloader(IAP远程升级)填写图片摘要(选填)

最终,使用的是st官方的跳转指令如下:

        asm("LDW X,  SP ");

        asm("LD  A,  $FF");

        asm("LD  XL, A  ");

        asm("LDW SP, X  ");

        asm("JPF $9000");


关键字:stm8  bootloader  IAP升级 引用地址:stm8 bootloader IAP升级

上一篇:单片机功能测试:PCA功能
下一篇:单片机C语言模块化编程方法

推荐阅读最新更新时间:2024-03-16 15:45

STM8 模拟/数字转换器(ADC) 转换模式
STM8模拟/数字转换器(ADC)转换模式 ADC支持5种转换模式:单次模式,连续模式,带缓存的连续模式,单次扫描模式,连续扫描模式。 单次模式 在STM8的ADC单次转换模式中,ADC仅在由ADC_CSR寄存器的CH 选定的通道上完成一次转换。该模式是在当CONT位为0时通过置位ADC_CR1寄存器的ADON位来启动的。 一旦转换完成,转换后的数据存储在ADC_DR寄存器中,EOC(转换结束)标志被置位,如果EOCIE被置位将产生一个中断。 连续和带缓存的连续模式 续转ADC在完成一次转换后就立刻开始下一次的转换。当CONT位被置位时即在连换模式中,将ADC设为连续模式,该模式是通过置位ADC_CR1寄存器的ADON
[单片机]
使Arduino支持ATMEGA 168P(烧录BOOTLOADER
最近在做一个小玩意,因为第一个DEMO是在Arduino Pro Mini上完成的,使用各种模块用漆包线连接搭起来的,决定还是继续在使用Arduino框架的基础上制作完整的PCB板。 在选购单片机芯片时,发现ATMEGA168P 比 ATMEGA328P便宜一些,在Arduino IDE上似乎可以支持,IDE芯片选型上有ATMEGA168的选项,虽然DEMO是基于ATMEGA328P的,但是Arduino上更换芯片,程序并不需要进行修改,于是就购买了ATMEGA168P,(真是给自己挖了个坑)。 芯片到了以后,因为Arduino程序一般是串口下载的,我画的PCB板上也只留了串口的接口(其实是可以使用ISP下载的,使用11、
[单片机]
使Arduino支持ATMEGA 168P(烧录<font color='red'>BOOTLOADER</font>)
STM8 I口模拟串口通信
使用普通的IO口,模拟串口协议, 和PC端串口调试软件实现通信。 网上找了很多资料,有很多网友有些程序,但是感觉都不是很完整,无意间看到ST官方居然有实现,直接下载代码开始用。 针对官方的IO口模拟串口软件,简单介绍下用到资源。 由于模拟的串口RX脚,对于电平的输入判断用到定时器的输入捕获功能,所以官方用的是定时器3的通道2。 我自己在STM8S003F3P6最小系统上,移植到了TIM2的CH1即PD4用来做串口的RX脚,和PC端串口调试器的TX脚连接。 模拟串口的TX脚没有特殊要求,我这里用的PD3。。。。 修改了MAIN里面的函数,实现模拟串口直接发送接收到的数据。 PPS,关于串口波特率的配置,
[单片机]
STM8单片机学习总结初步03
实物焊接及对应驱动程序全部调试完成,视屏地址为: 自制蓝牙灯操作视屏 网络地址:http://v.youku.com/v_show/id_XMjk0ODk1MjUyMA==.html; 实物图01为: 实物图02为: --------------- 对程序代码均使用“函数分割”形式实现,并添加“适当注释”,这种代码编写方式在初期编写时,会很繁琐,因为其将本可使用“1个函数”实现的代码分割为“2个或2个以上”的“函数”,但在后期维护或是别人接手你的“代码”时,会大大缩短所需时间; 在实际工作中,个人建议,所有东西留2份,若你是个好人,请直接忽略“02”所说内容!!!: 01、第一份:带详细内容注释、问题注释、注意
[单片机]
<font color='red'>STM8</font>单片机学习总结初步03
STM8】外挂存储器W25Q16
文章里面提到的页编程,就是写数据了,因为这是英文直译的结果(PageProgram) 为了测试这个外挂Flash存储器,我在淘宝买了一个小板,3元不到 其实也可以直接买芯片回来自己接,反正没几个元件 这个芯片是用SPI通讯的 我找不到没水印的图片,暂时先用W25Q128的 不过他俩板子长得一模一样,元件也一样。除了芯片型号 板子上的LED和电阻串联,上电后LED就亮,没别的意思 电容是滤波用的,它紧靠芯片的VCC引脚 另外附上两个链接,这是我之前写的博客,是关于『STM8开发环境』和『STM8 - SPI通讯』,这篇博客的测试基础,是建立在STM8上的 关于如何接线,SPI通讯这篇博客有提到,如果有需要可以观看 STM
[单片机]
【<font color='red'>STM8</font>】外挂存储器W25Q16
STM8库编程笔记之时钟管理
STM8库函数学习笔记之时钟管理 相关函数: void CLK_DeInit(void); void CLK_HSECmd(FunctionalState NewState); void CLK_HSICmd(FunctionalState NewState); void CLK_LSICmd(FunctionalState NewState); void CLK_CCOCmd(FunctionalState NewState); void CLK_ClockSwitchCmd(FunctionalState NewState); void CLK_FastHaltWakeUpCmd(FunctionalState New
[单片机]
基于STM8的RFID程序设计
好久好久没有更新了~ 现在开始在实习,正好公司最近在做一款宾馆用的插卡取电模块,用的是STM8配合RFID MFRC522模块实现的,国庆没事正好在淘宝上买了一款RFID模块,配合自己的STM8,体验一下。 MFRC522 模块使用了支持 SPI UART I2C,但是一般都使用SPI接口开发(难道是因为淘宝上的程序都是SPI?!) MFRC522是个很有故事的芯片,因为打开它的数据手册,映入眼帘的是一大团寄存器,我去这尼玛是哪家新出的单片机,说好的芯片不就是几个引脚的故事吗! 不过好在这些寄存器的操作我们不用去了解,直接使用库函数即可。 关于接口 因此在我们移植程序的时候,需要将STM8的 SCK设置为输
[单片机]
基于<font color='red'>STM8</font>的RFID程序设计
基于P89C51RD2 IAP功能的数据存取与软件升级
摘要:分析Boot ROM中的部分源代码,重点是IAP功能以及ISP和IAP的相互关系;应用IAP功能将剩余程序空间转化为数据空间,以及自编ISP程序来实现仪器的软件升级。 关键词:P89C51RD2 Boot ROM IAP(ISP)功能 软件升级 1 概述 P89C51RD2是Philips公司的80C51系列单片机中的佼佼者,具有1KB的片上RAM和64KB的片上内存;具有3种编程方式,即在系统编程ISP(InSystem Programming)、在应用中编程IAP(In-Application Programming)以及通过商用编程器的并行编程。ISP是指电路板上的空白器件可以编程写入最终用户代码,而不需要从电路
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved