一、IAP原理

1、在正常情况下,程序运行路流程: 

  

  和STM32类似,STM8内部闪存(FLASH)地址起始于 0x8000(STM32是0x08000000),一般情况下,程序文件就从此地 址开始写入,通过一张“中断向量表” 来响应中断,程序启动后,将首先从“中断向量表”取出复位中断向量,执行复位中断程序完成启动,而这张“中断向量表”的起始地址是 0x8000(STM32是0x08000004),当中断来临,STM32 的内部硬件机 制亦会自动将 PC 指针定位到“中断向量表”处,并根据中断源取出对应的中断向量执行中断 服务程序。 (STM8复位和中断向量表的起始地址都是 0x8000,STM8复位地址是0x08000000,中断向量表的起始地址是0x08000004)

  当复位后,先从0x8000(STM32是0x08000004) 地址取出复位中断向量的地址,并跳 转到复位中断服务程序,如图标号①所示;在复位中断服务程序执行完之后,会跳转到main 函数,如图标号②所示;而我们的 main 函数一般都是一个死循环,在 main 函数执行过程 中,如果收到中断请求(发生重中断),此时 MCU 强制将 PC 指针指回中断向量表处,如图 标号③所示;然后,根据中断源进入相应的中断服务程序,如图标号④所示;在执行完中断服务程序以后,程序再次返回 main 函数执行,如图标号⑤所示。

  (2)加入 IAP 程序之后,程序运行流程:

  

   STM8复位后,还是从 0x8000(STM32是0x08000004) 地址取出复位中断向量的地 址,并跳转到复位中断服务程序,在运行完复位中断服务程序之后跳转到 IAP 的 main 函数, 如图标号①所示,在执行完 IAP 以后,跳转至新写入程序的复位中断向量表(0X08000004+N+M--例如9000),取出新程序的复位中断向量的地址,并跳转执行新程序的复位中断服务程 序,随后跳转至新程序的 main 函数,如图标号②和③所示,同样 main 函数为一个死循环,并 且注意到此时 STM32 的 FLASH,在不同位置上,共有两个中断向量表。

  在 main 函数执行过程中,如果 CPU 得到一个中断请求,PC 指针仍强制跳转到地址 0x8000(STM32是0x08000004) 中断向量表处,而不是新程序的中断向量表,如图标号④所示;程序再根据我们设 置的中断向量表偏移量,跳转到对应中断源新的中断服务程序中,如图标号⑤所示;在执行完 中断服务程序后,程序返回 main 函数继续运行,如图标号⑥所示。

二、难点

  需要重定向中断向量表!

参考博客:http://blog.sina.com.cn/s/blog_b5e6d3de0102vm6o.html

IAP升级的更多相关文章

  1. STM32IAP升级-----编写IAP升级遇到的问题总结

    IAP的源代码等资料我上传了,压缩包内有12个文件.,http://download.csdn.net/detail/f907279313/7524849(要积分的辛苦收集的你们就给点积分吧) 还有还 ...

  2. STM32 Bootloader基于ymodem传输协议串口IAP升级详解

    硬件:stm32f103cbt6 软件:STM32F10x_StdPeriph_Lib_V3.5.0 文章目录 1 预备知识 2 Bootloader 2.1 启动流程 2.2 校验跳转地址是否有效 ...

  3. STM32 IAP 升级官方资料汇总

    整理了一下SMT32标准外设库进行IAP升级的官方demo: 标准库版本 STM32F10xxx in-application programming using the USART (AN2557) ...

  4. STM32 IAP升级

    STM32 IAP在线升级,用Jlink设置读保护后前5K字节是默认加了写保护的,导致IAP升级时擦除和写入FLASH不成功,可以做两个boot,前5k为第一个boot程序,上电时负责跳转到APP还是 ...

  5. STM32 IAP 升级功能

    IAP In Application Programming 可通过USB,CAN,UART,I2C,SPI等接口实现 IAP流程 Bootloader程序:接收升级程序,更新到flash指定地址:跳 ...

  6. 【转】stm32 IAP升级程序

      一.什么是IAP,为什么要IAP       IAP即为In Application Programming(在应用中编程),一般情况下,以STM32F10x系列芯片为主控制器的设备在出厂时就已经 ...

  7. IAP升级功能编写初期的一些困惑与疑问---完毕功能后的总结

    IAP的源代码等资料我上传了,压缩包内有12个文件,,http://download.csdn.net/detail/f907279313/7524849(要积分的辛苦收集的你们就给点积分吧) 还有还 ...

  8. STM32SD卡 (U盘)IAP升级

    http://www.openedv.com/posts/list/65104.htm

  9. 基于IAP和Keil MDK的远程升级设计

    写在前面:三个周之前,我突然想写一个远程升级的程序.那个时候我只是大概知道IAP的意思是在应用编程,但怎么编,我还一无所知.我给自己定下一个个阶段目标,从最基础的代码一点点写起,解决一个又一个的问题. ...

随机推荐

  1. Python基础:06条件和循环

    1:条件表达式(三元操作符) Python 在很长的一段时间里没有条件表达式(C ? X : Y), 或称三元运算符.人们试着用 and 和 or 来模拟它, 但大多都是错误的. 根据 FAQ , 正 ...

  2. oracle函数 current_date

    [功能]:返回当前会话时区中的当前日期 [参数]:没有参数,没有括号 [返回]:日期 [示例]select current_date from dual; 返回:2008-11-14

  3. django 中models表的多对一,多对多的理解

    django 表的理解 好处:设计的好,会清晰,易于理解和维护,后期开发事半功倍,一目了然. 1. 一对一的表,两表的属性实际上完全可以合并成一个表,共用一个主键即可: 2. 一对多的表,可以设中间关 ...

  4. clear简单的例子

    非常实用,非常简单的例子,结果都在图片里 <html> <head> <style> .keepbj { width:800px; height: 300px; b ...

  5. Pytorch | BERT模型实现,提供转换脚本【横扫NLP】

    <谷歌终于开源BERT代码:3 亿参数量,机器之心全面解读>,上周推送的这篇文章,全面解读基于TensorFlow实现的BERT代码.现在,PyTorch用户的福利来了:一个名为Huggi ...

  6. laravel validate 设置为中文(验证提示为中文)

    把 resources\lang 下en 的文件夹 复制在同一目录并改名为 zn 把zn 中的 validation.php文件修改为 https://laravel-china.org/articl ...

  7. Activiti6-快速开始

    下载 https://www.activiti.org/download-links 快速开始 https://www.activiti.org/quick-start 用户指南 https://ww ...

  8. python单例模式的实现与优化

    python单例模式的实现与优化 阅读目录(Content) 单例模式 实现单例模式的几种方式 1.使用模块 2.使用装饰器 3.使用类 4.基于__new__方法实现(推荐使用,方便) 5.基于me ...

  9. H3C Easy IP配置举例

  10. P1109 桃花岛

    题目描述 不是任何人都可以进入桃花岛的,黄药师最讨厌象郭靖一样呆头呆脑的人.所以,他在桃花岛的唯一入口处修了一条小路,这条小路全部用正方形瓷砖铺设而成.有的瓷砖可以踩,我们认为是安全的,而有的瓷砖一踩 ...