点击左上角的“关注”,定期更新 STM32 最新资讯,总有你想要的信息!

STM32 IAP 在线升级原理全解析

1. 什么是 IAP?

   IAP(In-Application Programming)是用户自己的程序在运行过程中对 User Flash 部分的区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信接口对产品中的固件程序进行更新升级。

2. 当无 IAP 功能时 STM32 程序的启动过程

图1 无 IAP 功能时 Flash 的存储分布图

  STM32F4 基于 Cortex-M4 内核。对于基于 Cortex-M3/M4 内核的芯片,复位后固定从 0x00000000 地址处取主堆栈指针(MSP)的值,从 0x00000004 处,取出 PC 的初始值(这个值是复位向量),然后从这个值对应的地址处取出复位中断入口向量,跳转执行复位中断服务程序,当运行完复位中断服务程序后再跳转到 main 函数执行应用程序。

// 中断向量表:
__Vectors       DCD     __initial_sp             ; Top of StackDCD     Reset_Handler            ; Reset Handler // 复位中断入口向量DCD     NMI_Handler              ; NMI HandlerDCD     HardFault_Handler        ; Hard Fault Handler......// 复位中断服务函数:
; Reset handler
Reset_Handler    PROCEXPORT  Reset_Handler             [WEAK]IMPORT  SystemInitIMPORT  __mainLDR     R0, =SystemInitBLX     R0LDR     R0, =__main     // 执行 main() 函数BX      R0ENDP

  那为什么图 1 显示的栈顶指针是指向 0x08000000 地址呢?
  原来 STM32 在 0x00000000 开始的一段地址空间是虚拟的,用户可以通过设置 BOOT[0:1] 引脚状态使其在启动时动态的将另外一段地址空间映射到这部分的地址上去。我们通过配置 BOOT 引脚选择主 flash 的自举模式,将 0x08000000 地址处的存储空间重映射到了 0x00000000 地址处,所以 0x08000000 地址和 0x00000000 地址处开始的存储空间是同一块物理空间,其内容也就是一样的了。

图2 0x00000000 地址数据和 0x08000000 地址数据对比图

图3 BOOT 引脚自举配置

3. 当有 IAP 功能时 STM32 程序的启动过程

图4 有 IAP 功能时 Flash 的存储分布图

  当 STM32 要实现 IAP 在线升级功能时,需要把 flash 分成 bootload 程序区和应用程序区。我们将 bootload 程序存放在 flash 的起始地址,这样 STM32 上电后就会先执行 bootload 程序。然后我们只需要在 bootload 程序中将程序跳转到应用程序的栈顶地址,则 STM32 就会开始执行应用程序的代码。

4. 在 bootload 层申请的动态内存不释放会影响到应用层吗?

图5 RAM的存储分布图

  答案是不会。当从 bootload 程序跳转到应用程序的起始地址后,应用程序会重新分配和初始化 RAM,所以 bootload 程序在进入应用程序前不需要担心申请的动态内存没有释放会对进入应用程序后产生什么影响的。

5. 在 bootload 层开启的外设会影响应用层吗?

  答案是会!在 bootload 程序开启的外设进入应用程序后是不会自动重置外设的。比如说在 bootload 程序开启了 UART1 外设,在跳转到应用程序后,UART1 依旧是 bootload 程序时的配置。所以在 bootload 程序想进入应用程序前,要先关闭外设中断和重置外设,以免在应用程序中无法正常的开启外设。

6. IAP 在线升级原理

  IAP 在线升级的原理很简单,先通过通信接口(串口)连接上位机与 STM32 设备,然后上位机通过传输协议(Ymodem)把升级固件(应用程序 bin 文件)发送给 STM32 设备,STM32 设备收到升级固件后将其烧录进应用程序区的 flash 地址。在烧录完所有升级固件后,再将程序跳转到应用程序的 flash 起始地址,开始执行应用程序的代码。

大家的支持就是我分享技术的动力,希望大家需转载时能附上原作者的博客:https://blog.csdn.net/u012993936,谢谢。

--- End ---

你可能还想看:

> STM32 IAP 在线升级项目实例剖析
> 免费的Zigbee抓包神器!比Ubiqua还好用!

文章都看完了,随手点个赞吧~

↓↓↓ ↓↓↓

STM32 IAP 在线升级原理全解析相关推荐

  1. CRC校验原理及STM32 IAP在线升级程序

    CRC校验原理: 什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错功能,对数据 ...

  2. STM32 IAP 在线升级详解

    (扩展-IAP主要用于产品出厂后应用程序的更新作用,考虑到出厂时要先烧写IAP  再烧写APP应用程序要烧写2次增加工人劳动力基础上写了"STM32 IAP+APP ==>双剑合一&q ...

  3. stm32 IAP在线升级的个人经验以及实现方法

  4. STM32F429实现USB通过IAP在线升级

    1.目标 1.实现STM32对U盘文件的读取. 2.实现STM32拓展外部SDRAM. 3.实现STM32拓展外部Flash. 4.实现内存管理. 5.实现Fatfs文件系统,读写U盘和外部Flash ...

  5. LPC2478(22)IAP在线升级

    目录 1.开发环境 2.特性 3.IAR编译器的相关文件 3.1.icf文件 3.2.IcfEditorFile文件内容 3.3.ddf文件 3.4.board文件 4.IAP相关 4.1.软件复位 ...

  6. bobsmith电路阻抗原理_串联谐振原理全解析 - 赫兹电力

    串联谐振赫兹电力为您导读:串联谐振原理全解析,串联谐振交流耐压试验在发电机绝缘试验中占据至关重要的地位,今天我们就来系统学习一下如何谐振及其原理解析吧. 谐振基础知识 谐振电路是在具有电阻R.电感L. ...

  7. Leon : YoloV5 结构原理全解析 思维导图版

    Leon : YoloV5 结构原理全解析 思维导图版 博客写到了 Head 部分 暂时断更 几天 --因为 互联网加的项目 快提交了 队员们 陆续 完成了 自己负责的策划书部分 得 开始 去修改策划 ...

  8. 基于Ymodem协议的stm32f405rgt6+CubeMx+IAP在线升级

    基于Ymodem协议的stm32f405rgt6+CubeMx+IAP在线升级 目录 一.CubeMX的配置 1.IAP 2.APP 二.移植Ymodem官方代码 1.文件移植 2.MDK文件.路径添 ...

  9. 51单片机IAP在线升级

    51单片机IAP在线升级 爱矽半导体E85F3325单片机IAP在线升级教程,此处可查看更新及demo下载 文章目录 前言 一.ROM资源 二.KEIL有关知识 1.BL51连接器: 2.LX51连接 ...

最新文章

  1. Opencv笔记(九)——图像阈值
  2. python 类-python--类
  3. asp.net控件本质
  4. 工作125:各个接口需要的token不同 token是获取数据的关键
  5. 第25课 成绩等级 《小学生C++趣味编程》
  6. mysql导出表部分数据
  7. python一对一_Python:在数据存储区中建立一对一的关系
  8. vb 饼状图显示百分比_Matplotlib-饼图
  9. mysql gtids_MySQL GTIDs(global transaction identifiers)
  10. Semaphore源码解读
  11. MYSQL 用户及权限管理
  12. 【LAMMPS系列】LAMMPS软件安装资料包
  13. tf.trian.match_filenames_once
  14. 牛客网之黑暗的字符串
  15. c语言--余数正负判断,printf函数占位符
  16. xorl %eax, %eax
  17. 编译安装php8,[PHP] 最新抢先编译安装PHP8.0.0 alph1以及FPM
  18. 2017湖湘杯Writeup
  19. 社区服务开启“云”智慧社区时代,CDN高防能否成为服务器的源动力呢?
  20. 《灵魂中转站》上线 春来变身“最有型死神”

热门文章

  1. 缘分天空之我的机器学习--(二)Tensorflow实例:利用LSTM预测股票每日最高价
  2. 三洋伺服驱动器维修RS1A30AAW驱动器电源维修
  3. Yield Guild Games:社区更新——2022 年第四季度
  4. iOS8开发视频教程Swift语言版-Part 11:访问Web Service-关东升-专题视频课程
  5. 云原生中间件——Redis Operator 篇
  6. HTML5+app开发学习之快速入门篇
  7. ArcGIS:如何新建图层组并添加数据、切换数据视图和布局视图、修改符号系统?
  8. subst映射盘符挂载盘符之后从我的电脑里看不到挂载的盘符但是从shell可以进入路径
  9. [转载]kaldi学习笔记:run.sh(egs/timit/s5)详细分析:从数据准备到特征提取
  10. 使用Platium库开发dlna投屏功能