历史上的今天
返回首页

历史上的今天

今天是:2024年08月22日(星期四)

正在发生

2018年08月22日 | STM32 boot之APP的Jump_Address()分析

2018-08-22 来源:eefocus

1,函数原型:

void Jump_Address(void)

{

if (((*(volatile u32*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)

{

test = (*(volatile u32*)ApplicationAddress);

JumpAddress = *(volatile u32*) (ApplicationAddress + 4);

Jump_To_Application = (pFunction) JumpAddress;

__set_MSP(*(volatile u32*) ApplicationAddress);

Jump_To_Application();

}

}

2,if (((*(volatile u32*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)分析

ApplicationAddress存放的是用户程序Flash的首地址,(*(volatile u32*)ApplicationAddress)的意思是取用户程序首地址里面的数据,这个数据就是用户代码的堆栈地址,堆栈地址指向RAM,而RAM的起始地址是0x20000000,因此上面的判断语句执行:判断用户代码的堆栈地址是否落在:0x20000000~0x2001ffff区间中,这个区间的大小为128K,笔者查阅STM32各型号的RAM大小,目前RAM最大的容量可以做到192K+4K,时钟频率为168MHZ。一般情况下,我们使用的芯片较多的落在<128K RAM的区间,因此上面的判断语句是没有太大问题的。

3,

经过2的分析,test保存的就是堆栈地址(并且是应用程序堆栈的栈顶地址),查看STM32的向量表,可以知道:栈顶地址的地址 + 4 存放的是复位地址,因此JumpAddress存放的是复位地址。

4,

调用__set_MSP函数后,将把用户代码的栈顶地址设为栈顶指针

5,

Jump_To_Application();的意思就是设置PC指针为复位地址。

CORTEX-M3上电后后检测BOOT引脚的电平来决定PC的位置。例:BOOT设置为FLASH启动,启动后CPU会先取两个地址:一个是栈顶地址,另一个是复位地址。因此才有了第4、第5点的写法。


推荐阅读

史海拾趣

First Silicon Co., Ltd公司的发展小趣事

随着全球电子市场的不断扩张,First Silicon公司意识到单一市场已无法满足其长远发展需求。于是,公司制定了全球化战略,通过设立海外研发中心、生产基地和销售网络,实现了从研发、生产到销售的全球化布局。这一战略不仅有效降低了公司的运营成本,还极大地提升了其品牌影响力和市场份额。在全球化进程中,First Silicon还积极与当地企业开展合作,共同推动电子技术的进步和应用。

苏州锋驰(Feng)公司的发展小趣事
通过调整电阻来实现稳流控制,适用于较小的电流范围。其优点是电路简单、噪声低,但效率相对较低,特别是在输入输出电压差较大的情况下。
General Semiconductor ( Vishay )公司的发展小趣事

面对电子行业的高度周期性和市场波动,Vishay凭借其强大的技术实力、丰富的产品线和灵活的市场策略,始终保持在行业内的领先地位。公司通过持续的技术创新、成本优化和“一站式”服务,赢得了广大客户的信赖和支持。即使在行业低迷时期,Vishay也能保持稳定的增长和发展。如今,Vishay已成为全球最大的分立半导体和被动元件制造商之一,其产品和服务广泛应用于工业、计算机、汽车、消费品、电信、军事、航空和医药等多个领域。

Design Gateway公司的发展小趣事

1985年,泰德·维特(Ted Waitt)和Mike Hammond两位年轻人决定辍学创业。他们利用维特祖母的15,000美元存款作为担保,从银行获得了10,000美元贷款,租用了一台计算机,并准备了一份三页的经营计划。在维特父亲位于爱荷华州苏城的牧场里,他们创办了TIPC Network公司(Gateway的前身)。公司起步时,主要向得克萨斯电脑器械公司销售零配件,并开展计算机邮购业务。得益于直销商业模式,Gateway在短短四个月内就实现了10万美元的销售额。

CalRamic Technologies Llc公司的发展小趣事

在巩固了国内市场地位后,CalRamic Technologies开始将目光投向国际市场。公司积极参加各类国际电子元器件展览会,与多家国际知名企业建立了合作关系。通过与国际大厂的深入交流,公司不仅拓宽了销售渠道,还引进了国际先进的生产技术和管理经验,进一步提升了自身的竞争力。

Apex [Apex Microtechnology]公司的发展小趣事

在作为Cirrus Logic分公司运营了五年后,Apex Microtechnology于2012年重新回归独立私营状态。这次变革使得Apex Microtechnology能够更加灵活地应对市场变化,加速产品创新和研发。同时,公司也扩大了其业务范围,进一步巩固了在电子行业的地位。

问答坊 | AI 解惑

开关电源指标的定义

本帖最后由 paulhyde 于 2014-9-15 04:13 编辑 一.描述输入电压影响输出电压的几个指标形式。 1.绝对稳压系数。 A.绝对稳压系数:表示负载不变时,稳压电源输出直流变化量△U0与输入电网变化量△Ui之比。既: K=△U0/△Ui。 B. 相对稳压系 ...…

查看全部问答>

故障问题

[原创]一个查找电路和器件故障机理的好仪器好方法 最近帮助一些客户做电路故障的分析,在了解情况过程中,问起哪里坏了,大都能告诉我“某某器件坏了”,但再问“哪个管脚坏了”“可能是什么原因造成的”“坏到了啥程度”,往往就没人接茬了,即 ...…

查看全部问答>

请教关于电池的问题

大家有知道一次性电池中寿命最长的是那种吗?使用寿命。最大能做到多少mAH呢? 先谢谢了 补充:不知道一次性电池的寿命是不是也是用mAh来衡量呢,如果不是,要怎么判断呢? [ 本帖最后由 silencepiece 于 2010-6-4 16:52 编辑 ]…

查看全部问答>

在驱动程序中操作文件

谁有内核模式下读写文件的源代吗,我想在驱动中写入调试信息到Log文件。…

查看全部问答>

DS1302 GCC程序怎么结果又错

#include #include //寄存器宏定义 #define WRITE_SECOND              0x80 #define WRITE_MINUTE        0x82 #define WRITE_HOUR     &n ...…

查看全部问答>

AT89C2051芯片控制发光二极管

问下各位,一个AT89C2051芯片最多能够驱动多少个发光二极管? 对电压有怎样的要求,用5V的电压可以吗?…

查看全部问答>

求win ce 5.0下能用的usb接口蓝牙模块

如题 最好能详细介绍一下 谢谢…

查看全部问答>

如何使用OSAL的事件?

以前的帖子,重新整理到这个版面。   OSAL通过一个16位宽度的数组来管理事件,意味着OSAL最多可以支持16个事件,其中最高位(0x08000,SYS_EVENT_MSG)系统保留,用户可以使用的事件有15个。事件的使用很简单:1)需要找个地方定义事件的ID ...…

查看全部问答>

电压反馈型运放和电流反馈型运放的电流噪声的区别

求助各位高手: CFB的电流噪声分为同相端的和反相端的,VFB只给出一种电流噪声。那么在VFB噪声计算中,电流噪声只在同相端或反相端添加还是两端都添加,只不过值是相同的?十分感谢! [ 本帖最后由 mazzz 于 2011-11-17 23:36 编辑 ]…

查看全部问答>