STM32自举程序

article/2025/9/15 20:19:01
  1. 空间分布

将flash空间分为自举程序区和应用程序区。

应用程序区存放用户应用程序。

自举程序负责获取用户应用程序数据,并写入应用程序区,实现程序升级。

  1. 程序跳转

自举程序需要可以跳转到应用程序区,当然应用程序也可以根据需要设计成可以跳转到自举程序区。

如果程序不是在默认的起始地址,则需要复制向量,并映射到相应的空间。

#define VECTORNUM      108

__IO uint32_t VectorTable[VECTORNUM] __attribute__((at(0x20000000)));

#define BOOTAREA_ADDRESS                            (uint32_t)0x080FC000

#define APPLICATION_ADDRESS                        (uint32_t)0x08000000

for(i = 0; i < VECTORNUM; i++) 

           VectorTable[i] = *(__IO uint32_t*)(BOOTAREA_ADDRESS + (i<<2)); 

__HAL_RCC_SYSCFG_CLK_ENABLE();                                                                                //      使能 SYSCFG 外设

__HAL_SYSCFG_REMAPMEMORY_SRAM();                                                                    //      将内部sram映射到0X00000000地址

而如果从非默认起始地址的空间跳转到默认起始地址空间的程序,则需要恢复向量表

__HAL_SYSCFG_REMAPMEMORY_FLASH();    //      将0地址重新映射回内部FLASH空间

程序跳转:

if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000) //      语句为判断地址处存放的是否为SP堆栈指针,判断栈顶指针是否合法

{

           JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);

           JumpToApplication = (pFunction) JumpAddress;

           __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);       //      设置堆栈指针SP,指向用户代码首地址

           JumpToApplication();

}

  1. 其他

上面的宏定义VECTORNUM  的值根据不同芯片有所不同,可以查看启动文件或芯片资料。启动文件里的向量表数量+1.

KEIL工程设置

1区是程序空间的起始地址以及空间大小。这里是将自举程序放在0X80FC00起始的0X400(即16K)大小的空间。

2为全局变量分布的起始地址即大小,起始地址以前的用做向量表重映射,需要留足空间,否则编译会出错(提示:Execution region RW_IRAM1 with Execution range [0x20000100,0x20000518) overlaps with Execution region ER$$.ARM.__AT_0x20000000 with Execution range [0x20000000,0x200001b0))。这里是留了256字节给向量重映射。

 


http://chatgpt.dhexx.cn/article/jncoYcSU.shtml

相关文章

自举电路(升压电路)

the boost converter,或者叫step-up converter&#xff0c;是一种开关直流升压电路&#xff0c;它可以是输出电压比输入电压高。基本电路图见图1.假定那个开关(三极管或者mos管)已经断开了很长时间&#xff0c;所有的元件都处于理想状态&#xff0c;电容电压等于输入电压。下面…

Web精美个人网页静态展示

今天和大家分享一个纯用web&#xff08;htmlcssjs&#xff09;实现的一个优美的个人信息菜单资料展示。 项目结构很简单只有一个html文件一个css样式文件以及一个js脚本文件。 项目实现的功能&#xff1a; 1&#xff1a;进入首页是一个天气样式页面&#xff08;显示当前时间…

【测控电路】自举式高输入阻抗放大电路

ref 测控电路第五版 有些传感器输出阻抗很高, 要求其测量放大电路有高输入阻抗. 开环集成运放的输入阻抗通常很高, 反相运放输入阻抗远低于同相运放, 为提高输入阻抗, 可在输入端加接电压跟随器, 但会引入共模误差. 在要求较高的场合下, 可采用高输入阻抗集成运放/采用通用运放…

自举电路工作原理分析

OTL功率放大器中要设自举电路,图18-9所示是自举电路。电路中的C1, R1和R2构成自举电路。C1为自举电容&#xff0c;R1O 隔离电阻&#xff0c;R2将自举电压加到 VT2基极。 向左转 | 向右转 VT1集电极信号为正半周期间VT2导通、放大&#xff0c;当输入VT2基极的信号比较大 时&…

STM32自举程序,你了解多少?

置顶/星标公众号&#xff0c;不错过每一条消息 本文主要讲述STM32启动模式中System memory的内容&#xff0c;以及围绕的相关内容。 1写在前面 STM32中内嵌了一段自举程序&#xff0c;可能很多人不知道。 那段自举程序存放在System memory&#xff08;系统存储器&#xff09;中…

静态网站以及动态网站

学习时间&#xff1a;7月7日-8日 学习素材&#xff1a;B站博主 学习的内容&#xff1a;静态网站以及动态网站 静态网站就是没有采用任何程序开发的网站&#xff0c;纯粹采用HTML语言编写&#xff0c;不要求懂太多网站制作知识&#xff0c;使用一般的软件就可以制作网页了。网页…

编译器之自举

**要阅读本文&#xff0c;不需要太高深的编译原理知识&#xff0c;甚至不需要编译相关的知识。但是本文也不是面向对电脑一无所知的读者的&#xff0c;你至少要知道&#xff1a; 不管是exe可执行文件还是Linux下的程序&#xff0c;都是一些二进制代码&#xff0c;我们称之为机器…

DC-DC电路中自举电容和自举电阻是什么?

文章目录 1. 什么是自举电容2. 自举电容的原理3. 自举电容的额定电压如何选择4. 什么是自举电阻1. 什么是自举电容 DCDC BUCK芯片有一个管脚叫BOOT,有的叫BST,如下是一个DCDC芯片对BOOT管脚的解释,在外部电路设计时,BOOT和SW管脚之间,需要加一个电容,一般是0.1uF,连接到…

自举电路原理分析

原文来自公众号&#xff1a;工程师看海 自举电路字面意思是自己把自己抬起来的电路&#xff0c;是利用自举升压电容的升压电路&#xff0c;是电子电路中常见的电路之一。 我们经常在IC外围器件中看到自举电容&#xff0c;比如下图同步降压转换器&#xff08;BUCK&#xff09;电…

自举电路分析

1.什么是自举电路 自举电路也叫升压电路&#xff0c;是利用自举升压二极管&#xff0c;自举升压电容等电子元件&#xff0c;使电容放电电压和电源电压叠加&#xff0c;从而使电压升高&#xff0c;有的电路升高的电压能达到数倍电源电压。 有一个12V的电路&#xff0c;电路中有一…

自举电路学习(一)

1 什么是自举电路&#xff1f; 利用晶体管&#xff0c;电容&#xff0c;电阻等元器件&#xff0c;通过上电时序等控制,使自举电容实现低电位充电&#xff0c;高电位放电,得到所需的高压&#xff08;针对同一参考平面&#xff09;。 自举电路由一个自举二极管&#xff0c;一个自…

【STM32】自举模式 和 程序下载(ST-Link和串口示例)

STM32官方网站STM32中文社区 如果遇到不清楚的概念&#xff0c;可以看之前的文章。 一、自举模式二、程序下载2.1 概述2.2 实操2.21 SWD 方式下载&#xff08;ST-Link&#xff09;2.22 串口下载 一、自举模式 STM32有一个特殊的功能&#xff0c;就是可以通过不同的方式启动程序…

自举电容

自举电容的核心原理是&#xff1a;电容两端电压不能突变。 为什么需要自举电容&#xff1f; DCDC电路中有两个mos开关管&#xff0c;如下图所示。对于低端的管子Q2&#xff0c;由于其源极接地&#xff0c;所以想要Q2导通&#xff0c;只要在Q2的栅极加一定的电压即可&#xff…

自举电路原理

充电储能 在充电过程中&#xff0c;开关闭合(三极管导通)&#xff0c;这时&#xff0c;输入电压流过电感。二极管防止电容对地放电。由于输入是直流电&#xff0c;所以电感上的电流以一定的比率线性增加&#xff0c;这个比率跟电感大小有关。随着电感电流增加&#xff0c;电感…

自举电路、自举电容

自举电路也叫升压电路&#xff0c;是利用自举升压二极管&#xff0c;自举升压电容等电子元件&#xff0c;使电容放电电压和电源电压叠加&#xff0c;从而使电压升高&#xff0e;有的电路升高的电压能达到数倍电源电压。 举个简单的例子&#xff1a;有一个12V的电路&#xff0c…

自举电路工作原理和自举电阻和电容的选取

自举电路的工作原理 如下图自举电路仅仅需要一个15~18V的电源来给逆变器的驱动级提供能量&#xff0c;所有半桥底部IGBT都与这个电源直接相连&#xff0c;半桥上部IGBT的驱动器通过电阻Rboot和二极管VF连接到电源Vb上&#xff0c;每个驱动器都有一个电容Cboot来缓冲电压&#…

自举电路

自举电路 Bootstrap circuit 我们知道Nmos管开启时需要大于阈值电压Vth&#xff0c;但是当MOS做高端驱动时,G极电压一定要高于Vcc电压&#xff08;D极&#xff09;Vth&#xff0c;所以需要一种电路将G极电路举高&#xff0c;这个电路就是自举电路。 如下&#xff1a; P与N m…

C语言中的循环语句(while、dowhile、for)

文章目录 goto语句循环语句的类型while语句死循环语句的嵌套 do..while语句for语句 goto语句 如果我们想要实现从0输出到n&#xff0c;如果要写0~100的话那我们就要写100个printf&#xff0c;这样非常麻烦&#xff0c;也 不现实&#xff0c;在汇编中当程序print完了我们可以用…

【汇编 C】循环语句goto、while、dowhile、for

目录 前言 一、什么是循环语句&#xff1f; 二、goto语句实现循环 goto底层汇编 三、while循环语句 while底层汇编 四、dowhile语句 do while底层汇编 五、for循环 for语句的几种写法 for底层汇编 总结 结语 封面 前言 本教程内容可能会涉及到汇编&#xff0…

【C语言】循环语句(do while循环)

简单不先于复杂&#xff0c;而是在复杂之后。 目录 do while循环 do 语句的用法 执行流程 do语句的特点 go to语句 do while循环 do 语句的用法 while循环和for循环都是入口条件循环&#xff0c;即在循环的每次迭代之前检查测试条件&#xff0c;所以有可能根本不执行循环…