【STM32】IAP升级00 预备知识

news2024/11/24 7:27:58

IAP(In Application Programming)简介

Flash够大的情况下,上电后的程序通过修改 MSP 的方式,可以在一块Flash上存在多个功能差异的程序。

IAP是为了在执行正常功能前,为了升级功能,提前运行的一段程序。这个程序不执行正常的功能操作,而只是通过某种通信方式(如 USB、USART)接收程序或数据,执行对第二部分代码的更新;
1)检查是否需要对第二部分代码进行更新
2)如果不需要更新则转到 4)
3)执行更新操作
4)跳转到第二部分代码执行

第一部分称为bootloader程序,第二部分称为APP。可以有多个APP,STM的APP可以运行在Flash或者SRAM中

在 0x1FFF F000 这个地址上官方写入了一段 BootLoader 用户使用,我们也可以自己写一段 BootLoader 程序方便自己使用,是我们自己把程序分成了 BootLoader部分和 应用程序部分,大概的意思如下图所示:
在这里插入图片描述

为什么要使用用户 BootLoader :

在有些项目中,可能因为某些原因需要经常更换 程序,如果每次都是重新烧录,特别的麻烦,那么我们就可以自己设计一个 BootLoader,通过 SD卡进行升级:
上电后先运行 BootLoader,BootLoader主要工作是检测是否有SD卡,SD卡中是否有需要的BIn文件,
如果检测到就将其复制到 应用程序区域 使得程序得以更新,更新结束以后跳转到应用程序执行;
如果没检测到相应的SD卡,就说明程序不需要更新,也跳转到应用程序执行;

STM32的启动模式

单片机复位

从0x0000 0000启动

单片机的复位方式有3种:上电复位,硬件复位,软件复位

且离开复位状态后,CM4 内核做的第一件事就是读取下列两个 32 位整数的值
在这里插入图片描述
1、从地址 0x0000 0000 处取出堆栈指针 MSP 的初始值,该值就是栈顶地址
2、从地址 0x0000 0004 处取出程序计数器指针 PC 的初始值,该值指向复位后执行的第一条指令

既然这里说stm32都是从0x0000 0000 开始启动的,那为什么我们看到的启动模式是从0x0800 0000,0x2000 0000,0x1FFF F000开始启动呢?

将 0x0000 0000 和 0x0000 0004 两个的地址重映射到其他地址空间,就是启动模式选择。这样访问0x0000 0000就相当于访问0x0800 0000,0x2000 0000或者0x1FFF F000

重映射也就是"启动模式选择"

STM32的启动方式(自举模式)有3种:内部 FLASH内部 SRAM系统存储器
在这里插入图片描述
注:启动引脚的电平:0:低电平;1:高电平;x:任意电平,即高低电平均可

FLASH 启动方式:么内核会从地址 0x0800 0000 处取出堆栈指针 MSP 的初始值,从地址 0x0800 0004 处取出程序计数器指针PC 的初始值。CPU 会从 PC 寄存器指向的地址空间取出的第 1 条指令开始执行程序,就是开始执行复位中断服务程序 Reset_Handler。也就是开始执行中断向量表。

内部 SRAM 启动方式:地址0x00000000 和 0x00000004 被映射到内部 SRAM 的首地址0x20000000 和 0x20000004,内核从SRAM 空间获取内容进行自举。在实际应用中,由启动文件 starttup_stm32f407xx.s 决定了0x00000000 和 0x00000004 地址存储什么内容,链接时,由分散加载文件(sct)决定这些内容的绝对地址,即分配到内部 FLASH 还是内部 SRAM。

系统存储器启动方式:内核将从系统存储器的 0x1FFFF000及 0x1FFFF004 获取 MSP 及 PC 值进行自举。系统存储器是一段特殊的空间,用户不能访问,ST 公司在芯片出厂前就在系统存储器中固化了一段代码。因而使用系统存储器启动方式时,内核会执行该代码,该代码运行时,会为 ISP(In System Program)提供支持,在 STM32F4 上最常见的是检测 USART1 传输过来的信息,并根据这些信息更新自己内部 FLASH 的内容,达到升级产品应用程序的目的,因此这种启动方式也称为 ISP 启动方式。

中断向量表

在这里插入图片描述
stm32的flash内存起始于0x0800 0000,基于 Cortex-M3/M4 内核的微控制器时,其内部通过一张“中断向量表”来响应中断。

中断向量是地址(指向中断服务函数),程序启动后,将首先从“中断向量表”取出复位中断向量的地址,执行复位中断程序完成启动,而这张“中断向量表”的起始地址是 0x0800 0004,当运行中中断来临,STM32的内部硬件机制亦会自动将 PC 指针定位到“中断向量表”处,并根据中断源取出对应的中断向量执行中断服务程序。

加入IAP程序之后,程序运行流程

在这里插入图片描述

复位后执行Reset_Handler后进入IAP升级程序

加入IAP升级程序之后,单片机复位之后,还是从 0x08000004 地址取出复位中断向量的地址,并跳转到复位中断服务程序(Reset_Handler在这个函数中初始化时钟系统等)。在运行完复位中断服务程序之后跳转到 IAP 的 main 函数:

①复位后,从 0x08000004 地址取出复位中断向量的地址并跳转到复位中断服务程序,在运行完复位中断服务程序之后跳转到 IAP 的 main 函数。

执行IAP函数

将APP程序写入指定的flash地址。

执行APP程序的Reset_Handler

执行完IAP程序之后,进入APP函数的中断向量表取出新程序的复位中断向量的地址。并跳转执行APP程序的复位中断服务程序,随后跳转至APP程序的 main 函数

此时STM32F407的FLASH,在不同位置上,共有两个中断向量表。

APP函数执行过程中,如果 CPU 得到一个中断请求,PC 指针仍然会强制跳转到地址0x08000004 中断向量表处,而不是新程序的中断向量表,如图标号④

程序再根据我们设置的中断向量表偏移量,跳转到对应中断源新的中断服务程序中如图标号⑤。

IAP程序设置条件

新程序必须在 IAP 程序之后的某个偏移量为 x 的地址开始;
新程序必须在 IAP 程序之后的某个偏移量为 x 的地址开始;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1050089.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

26608-2011 工业用回收一氯甲烷 学习笔记

声明 本文是学习GB-T 26608-2011 工业用回收一氯甲烷. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了工业用回收一氯甲烷的要求、试验方法、检验规则及标志、包装、运输、贮存及安全。 本标准适用于副产回收生产的工业用一氯甲…

一些杂题(9.23)

八月赛 A. Extra Large Knapsack 我的思路 是否可行只要看所有异或在一起是否为0就可以了 可行的方案只要有一个在第一个包里&#xff0c;剩下的都在第二个包里就可以了 注意&#xff1a;n1的时候不可行&#xff0c;要特判 代码 #include<bits/stdc.h> using name…

手写Hystrix基本原理

本文已收录于专栏 《中间件合集》 目录 概念说明什么是HystrixHystrix解决的问题 提供服务工作流程代码实现HystrixSDKMyHystrixCommand注解MyHystrixProperty注解MyAspect注解解释器 发送请求端引入Hystrix的依赖调用代码 接收请求端执行效果发送请求端 总结提升 概念说明 什…

树莓集团又一力作,打造天府蜂巢成都直播产业园样板工程

树莓集团再次推出惊艳之作&#xff0c;以打造成都天府蜂巢直播产业园为目标。该基地将充分展现成都直播产业园的巨大潜力与无限魅力&#xff0c;成为一个真正的产业园样板工程。 强强联手 打造未来 成都天府蜂巢直播产业园位于成都科学城兴隆湖高新技术服务产业园内&#xff0…

毕业设计选题之Java+springboot线上蔬菜销售与配送系统(源码+调试+开题+lw)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…

基于Java的药品管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

国庆节难忘回家路:趣事、风景、反思

文章目录 前言趣事游记旅途风光在人气爆棚的小七孔古桥大七孔在喯珠泻玉的拉雅瀑布奇异罕见的水上森林在云雾缭绕的鸳鸯湖在天然地宫——天钟洞飞瀑流泉 反思人们在死亡之前自己会有预感吗&#xff1f;求索生死大问 中秋国庆的规划后记 前言 中秋国庆&#xff0c;双节汇在一起…

8、绩效看板与日清计划

6、片花关联长视频 7、脏话检测 内容仓的办公区挂着几台电视&#xff0c;显示每个人目前完成的工作量&#xff0c;这就是绩效看板&#xff08;如下图&#xff09;&#xff0c;每位来参观的领导&#xff0c;都觉得这个绩效看板的想法很有意思。绩效看板是制造业常用的管理方法&…

【数据结构初阶】六、线性表中的队列(链式结构实现队列)

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 【数据结构初阶】五、线性表中的栈&#xff08;顺序表实现栈&#xff09;_高高的胖子的博客-CSDN博客 1 . 队列&#xff08;Queue&#xff09; 队列的概念和结构&#xff1a; 队列…

基于Java的食堂管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统功能具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域…

【设计模式】备忘录模式

文章目录 1.备忘录模式定义2.备忘录模式的角色3.备忘录模式实现3.1.场景说明3.2.结构类图3.3.代码实现 4.备忘录模式优缺点5.备忘录模式适用场景6.备忘录模式总结 主页传送门&#xff1a;&#x1f481; 传送 1.备忘录模式定义 备忘录&#xff08;Memento Pattern&#xff09;模…

图像处理: 马赛克艺术

马赛克 第一章 马赛克的历史渊源 1.1 马赛克 艺术中的一种表面装饰&#xff0c;由紧密排列的、通常颜色各异的小块材料&#xff08;如石头、矿物、玻璃、瓷砖或贝壳&#xff09;组成。与镶嵌不同的是&#xff0c;镶嵌是将要应用的部件放置在已挖空以容纳设计的表面中&#xff0…

ubuntu20安装nvidia驱动

1. 查看显卡型号 lspci | grep -i nvidia 我的输出&#xff1a; 01:00.0 VGA compatible controller: NVIDIA Corporation GP104 [GeForce GTX 1080] (rev a1) 01:00.1 Audio device: NVIDIA Corporation GP104 High Definition Audio Controller (rev a1) 07:00.0 VGA comp…

国庆周《Linux学习第三课》

国庆周《Linux学习第三课》 国庆周《Linux学习第二课》_IHOPEDREAM的博客-CSDN博客 总结 用户的管理 增加一个用户 删除一个用户 修改一个用户 查看一个用户 用户组的管理 增加一个组 删除一个组 修改一个组 查看一个组 将用户成员增加到该组中去 移除组的成员 1 用户

怎样在CSDN插入代码块 怎么变色?

添加代码块&#xff0c;通常有三种方式&#xff1a; 文章目录 ①点击 工具栏中的代码块 代码块 </>&#xff0c;② 快捷键 ctrlshiftk③ 先粘贴上代码&#xff0c;在选中 ctrlshiftk4 如果代码没有变彩色 ①点击 工具栏中的代码块 代码块 </>&#xff0c; 例如 选…

UWB技术在汽车智能制造的应用

返修区车辆管理项目 应用背景 在车辆总装生产线中&#xff0c;车辆下线后检测与返修是最后一个关键环节&#xff0c;整车一旦下线&#xff0c;由于流水线装配工艺、来料等原因&#xff0c;可能会出现部分整车存在瑕疵&#xff0c;进而进入返修区域待检。由于可能出现问题的不确…

探索设计模式:从组合到享元的软件架构之旅 (软件设计师笔记)

&#x1f600;前言 设计模式是软件开发中常见和经常使用的一种最佳实践方式&#xff0c;它们是为了解决在软件设计中反复出现的一类问题而提出的通用解决方案。本文主要探讨了四种设计模式&#xff1a;Composite&#xff08;组合&#xff09;、Decorator&#xff08;装饰器&…

Passper for Excel v3.7.3.4 Excel 密码恢复工具

网盘下载 Passper for Excel 是 Windows 上一款 Excel 密码恢复工具。可以恢复任何丢失或忘记的 Excel 文档密码。具有高恢复率和 100% 的数据安全性。支持通过 GPU 加速恢复密码&#xff0c;恢复速度提高 10 倍以上。 字典&#xff0c;根据内置或自定义词典恢复密码。 一般来…

【接口测试】测试基础

一、接口测试简介 1.接口测试的定义 接口测试是一种测试系统组件间接口的测试&#xff0c;主要目标是检测外部系统与系统之间以及内部各个子系统之间的交互点&#xff0c;以检查数据的交换、传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 随着前后端分离…

Visio如何对文本打下标、上标,以及插入公式编辑器等问题(已解决)

解决这个问题的本质问题&#xff0c;就是在Visio中插入公式编辑器&#xff08;这不是visio的常用命令&#xff0c;需要添加&#xff09;。 打开Visio--》文件--选项 点击选项&#xff0c;弹出对话框。在自定义功能区中&#xff0c;点击 常用命令&#xff0c;在下拉选项中&#…