一、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. 使用 VSCODE 在 Windows 10 WSL 中远程开发

    使用 VSCODE 在 Windows 10 WSL 中远程开发 安装 VSCODE 1.35+ 版本. 在 VSCODE 中安装 WSL 插件. 点击左下角的 WSL 图标. 打开项目,提示路径. ...

  2. python if elif else 区别

    if data_ori=='医疗': # 医疗 df = pd.read_excel(path_apply + 'apply/YS_ZY_HZSQ_样例.xls', encoding='gbk', e ...

  3. ocilib linux编译安装

    1.首先下载ocilib到自己目录 github:https://github.com/vrogier/ocilib 2.在下载instantclient 11.2.2的文件: instantclie ...

  4. 洛谷P2947 [USACO09MAR]向右看齐Look Up

    #include<cstdio> #include<algorithm> #include<stack> #include<cctype> using ...

  5. Android教程 -08 ToolBar的使用和主题的介绍

    ActionBar 简介 视频为本篇播客知识点讲解,建议采用超清模式观看, 欢迎点击订阅我的优酷 讲解ToolBar之前首先需要了解 ActionBar, 两者使用起来基本上一致. Android 3 ...

  6. CODE FESTIVAL 2017 qual B D 101 to 010(dp)

    除非人品好,能碰巧想到思路,否则基本是做不出来dp的,除了那几个经典的dp模型.. 看了几个前几名的代码,还是t神的代码比较清晰.膜tourist 代码的思路和题解思路基本一致..... #inclu ...

  7. 通过Ajax提交form表单来提交上传文件

    Ajax 提交form方式可以将form表单序列化 然后将数据通过data提交至后台,例如: $.ajax({      url : "http://localhost:8080/" ...

  8. px em rem %作为单位使用

    博客地址 :https://www.cnblogs.com/sandraryan/ px 我们都很熟悉啦,但是固定大小无法适配各种屏幕. rem是CSS3新增的一个相对单位(root em,根em), ...

  9. Python--day21--复习

    序列化模块总结: jison格式化输出: Serialize obj to a JSON formatted str.(字符串表示的json对象) Skipkeys:默认值是False,如果dict的 ...

  10. hdu 1716 排序2(dfs)

    排列2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...