当前位置: 首页 > news >正文

【STM32】IAP升级 预备知识

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 的地址开始;

相关文章:

【STM32】IAP升级 预备知识

IAP(In Application Programming)简介 Flash够大的情况下,上电后的程序通过修改 MSP 的方式,可以在一块Flash上存在多个功能差异的程序。 IAP是为了在执行正常功能前,为了升级功能,提前运行的一段程序。这…...

asp.net网站的建立及运行

点击创建新项目 在输入框中输入asp.net,并选择图中的 点击下一步 点击创建 然后,右键,添加,新建项 选择web窗体 点击添加 点击视图,工具箱 选择一个label,记住这个id 空白处右键,查看代码 添…...

怎么把webm转换成mp4?

怎么把webm转换成mp4?与MP4这位视频格式大哥相比,Webm这种视频格式还有很多小伙伴对它不太熟悉,因为大家平时也是偶尔才能接触到,属于不常用的视频格式。Webm是一种开放、免费的媒体文件格式,尽管如今它的应用范围比以…...

RabbitMQ 消息应答

每日一句 物是人非事事休,欲语泪先流。 概述 为了保证消息在发送过程中不丢失,RabbitMQ引入了消息应答机制, 消费者在接收到消息并且处理该消息后,告诉RabbitMQ它已经处理了,RabbitMQ可以把消息删除了。 自动应答 消息发送后立即被认为已经传送成功,这种模式需要在…...

【C++】C++ 类中的 this 指针用法 ③ ( 全局函数 与 成员函数 相互转化 | 有参构造函数设置默认参数值 | 返回匿名对象与返回引用 )

文章目录 一、全局函数 与 成员函数 相互转化1、成员函数转为全局函数 - 多了一个参数2、全局函数转为成员函数 - 通过 this 指针隐藏操作数 二、有参构造函数设置默认参数值三、返回匿名对象与返回引用四、完整代码示例 一、全局函数 与 成员函数 相互转化 1、成员函数转为全局…...

游戏遇到的问题

天涯明月刀 就是天刀的假全屏,很多天刀玩家可能玩其他游戏比较少或者对电脑了解不多,不在意帧数,但是肯定还是有一部分玩家发现了这个问题,就是“我使命召唤12都能跑到60帧的机器跑个破天刀40帧甚至30帧?”问题何在呢&#xff1…...

高性能系统的性能优化技巧:从专家的经验中学习 | 开源日报 No.40

binhnguyennus/awesome-scalability Stars: 48.3k License: MIT 这个项目是一个阅读列表,用于说明可扩展、可靠和高性能大规模系统的模式。该项目通过知名工程师的文章和可信参考资料来解释概念,并从为数以百万计甚至十亿用户提供服务的经过实战验证的系…...

Linux系统编程——进程间通信的学习

学习参考博文: 进程间的五种通信方式介绍Linux 信号介绍 Linux系统编程学习相关博文 Linux系统编程——文件编程的学习Linux系统编程——进程的学习Linux系统编程——线程的学习Linux系统编程——网络编程的学习 Linux系统编程——进程间通信的学习 一、概述1. 无…...

人工智能AI 全栈体系(六)

第一章 神经网络是如何实现的 这些年神经网络的发展越来越复杂,应用领域越来越广,性能也越来越好,但是训练方法还是依靠 BP 算法。也有一些对 BP 算法的改进算法,但是大体思路基本是一样的,只是对 BP 算法个别地方的一…...

NPDP是什么?考了有用吗?

1)NPDP是什么? NPDP,全称为New Product Development Professional,即新产品开发专业人员。NPDP认证是由世界产品开发协会(PDMA)推出的一项专业认证。它旨在评估和认可个人在新产品开发领域的专业知识和技能…...

关于安卓SVGA浅尝(二)加载数据

关于安卓SVGA浅尝(二)加载数据 相关链接 SVGA官网 SVGA-github说明文档 背景 项目开发,都会和动画打交道,动画的方案选取,就有很多选择。如Json动画,svga动画,gif等等。各有各的优势。目前项…...

使用matlab产生二维动态曲线视频文件具体举例

使用matlab产生二维动态曲线视频文件举例 在进行有些函数变化过程时候,需要用到直观的动态显示,本博文将举例说明利用Matlab编程进行二维动态曲线的生成视频文件。 一、问题描述 利用matlab编程实现 y 1 s i n ( t ) , y 2 c o s ( t ) , y 3 s i …...

Selenium自动化测试框架常见异常分析及解决方法

01 pycharm中导入selenium报错 现象: pycharm中输入from selenium import webdriver, selenium标红 原因1: pycharm使用的虚拟环境中没有安装selenium, 解决方法: 在pycharm中通过设置或terminal面板重新安装selenium 原因2: 当前项目下有selenium.py,和系统包名冲突导致, …...

[TI] [Textual Inversion] An image is worth an word

自己的理解: 根据几个图像,找出来一个关键字可以代表它们,然后我们可以再用这个关键字去生成新的东西。 提出关键字 1 Introduction word->token->embedding Textual Inversion过程 需要: ① a fixed, pre-trained text…...

remote: The project you were looking for could not be found

git拉取公司项目时报错: remote: The project you were looking for could not be found 发生这个问题的原因,在于git账号可能并未真正登录。 我们可以通过打开电脑的凭据管理器,查看git当前的登录是否正常。 参考链接:参考...

https跳过SSL认证时是不是就是不加密的,相当于http?

https跳过SSL认证时是不是就是不加密的,相当于http?,其实不是,HTTPS跳过SSL认证并不相当于HTTP,也不意味着没有加密。请注意以下几点: HTTPS(Hypertext Transfer Protocol Secure)本质上是在HTTP的基础上…...

linux下链接

linux下链接用法 ln链接格式与介绍 linux下链接用法一、链接的使用格式二、链接的介绍 一、链接的使用格式 链接: 格式: ln 源文件 链接文件 硬链接 ln -s 源文件 链接文件 软连接 硬链接文件占磁盘空间 但是删除源文件不会影响硬链接文件 软链接文件不…...

OpenCV项目开发实战--主成分分析(PCA)的特征脸应用(附C++/Python实现源码)

什么是主成分分析? 这是理解这篇文章的先决条件。 图 1:使用蓝线和绿线显示 2D 数据的主要组成部分(红点)。 快速回顾一下,我们了解到第一个主成分是数据中最大方差的方向。第二主成分是空间中与第一主成分垂直(正交)的最大方差方向,依此类推。第一和第二主成分红点(2…...

多层感知机——MLP

源代码在此处:https://github.com/wepe/MachineLearning/tree/master/DeepLearning Tutorials/mlp 一、多层感知机(MLP)原理简介 多层感知机(MLP,Multilayer Perceptron)也叫人工神经网络(ANN&…...

HttpClientr入门

HttpClientr入门 介绍 HttpClient是Apache Jakarta Common下的子项目&#xff0c;可以用来提供高效的&#xff0c;最新的、功能丰富的支持HTTP协议的客户端编程工具包&#xff0c;并且它支持HTTP协议的版本和建议。 依赖导入 <dependency><groupId>org.apache.…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

spring Security对RBAC及其ABAC的支持使用

RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型&#xff0c;它将权限分配给角色&#xff0c;再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...