STM32由boot跳转到应用程序地址

STM32 boot启动程序跳转 小白一枚,有不对的地方欢迎指教。 阅读详情
1、keil c应用程序工程中设置IROM1 的起始地址和程序空间的大小。

2、boot中,定义目标地址及函数指针类型:

#define ApplicationAddress 0x08001000
typedef void (*pFunction)(void);

pFunction Jump_To_Application;
u32 JumpAddress;

3、boot中,完成以下任务:

a)、NVIC_SETFAULTMASK(); //关总中断

b)、 JumpAddress = *(volatile u32*) (ApplicationAddress + 4); // 取中断向量表中的复位中断地址
c)、Jump_To_Application = (pFunction) JumpAddress; // 该地址强置为跳转函数地址
d)、Jump_To_Application();

4、应用程序中:

NVIC_RESETFAULTMASK();//开放总中断



问题:1、为什么要使用 volatile?(经测试可以不用)

2、为什么要+4? (此处保存的是中断向量表的复位中断地址

void NVIC_SetVectorTable(uint32 NVIC_VectTab)
{
SCB->VTOR = NVIC_VectTab;
}

STM32F4 IAP 跳转 APP问题 IAP 的作用,网上其他资料已经有很多介绍了,这里放一个链接,不进行深入的介绍。本文的关注重点是Bootloader在跳转APP程序中出现的问题。 阅读详情

相关推荐

STM32学习笔记】STM32 BOOTLOADER配置以及APP跳转

  大家好,今天给大家介绍的是STM32BootLoader以及它如何跳转运行到APP应用程序的例程。   首先我先给大家科普一下什么是BootLoader。 什么是BootLoader? Bootloader是硬件启动的引导程序,是运行操作系统的前提。对硬件进行相应的初始化设定,最终为操作系统准备好环境。就像我们的电脑一样,在开机的过程中可以通过F1或者其他的按键进入BOOT模式然后修改启动...

Carry_王的博客 5092

函数指针类型数据 void (*pFunction)(void)

关于STM32bootloader,有如下代码,以下做一些理解记录: typedef void (*pFunction)(void); pFunction Jump_To_Application; uint32_t JumpAddress; JumpAddress = *(__IO uint32_t*) (DEF_FLASH_AppStartaddr + ...

soda_123的博客 2675

appbootload自动合并小程序 hex合并工具

十分好用,准确

STM32程序跳转后死机现象解决

正在用STM32单片机,移植了官方IAP,使用没问题,但是每次下载程序都要重启,嫌麻烦后来想发个命令直接跳转到IAP,参考官方IAP的跳转程序,将APPLICATION_ADDRESS改为0x08000000 #define APPLICATION_ADDRESS (uint32_t)0x08000000 typedef void (*pFunction)(void); pFunctio

jiaozhu222的博客 1万+

STC8A引导bootloader

引导代码存放位置:芯片有64KB,最后5KB作为引导代码存放位置以及保存用户数组用。 引导工程地址设置:Project->Options for Target "project"->Tartget->Off-chip Code memory,start地址输入0XEA00,Size可不填,KEIL自动填入。 程序一上电开始检测串口是否有升级流,若没有,超时退出引导,跳转到用户...

chaoge131的博客 3348

执行调写法整指定内存执行程序的C语言,对指定地址进行赋值

方法1: 对函数指针进行理解 u16               JumpAddress; typedef          void (*pFunction)(void); pFunction      Jump_To_Application;  JumpAddress=0x8052; Jump_To_Application = (pFunction) JumpAddress;  Jum...

貌似稿手的博客 892

stm32 boot+app设计(固件升级基础)

boot + app设计,在此基础上可更进一步通过对boot中程序实现片内flash写入固件功能,即可实现固件升级。

weixin_44491256的博客 1897

STM32H7的系统bootloader基础知识

本文介绍了STM32H7内置系统bootloader的基础知识,包括其功能特点、执行流程使用方法。系统bootloader支持多种接口方式(USB/SPI/I2C/CAN/UART)下载应用程序,可通过硬件boot引脚或应用程序跳转两种方式进入。文章详细说明了bootloader的进入退出方法、擦写管理注意事项,特别强调了H7系列灵活的启动地址设置特性。此外,还介绍了使用过程中的关键注意事项,如时钟配置、中断处理等。最后推荐参考ST官方应用笔记AN2606获取更多详细信息。

czhaii的专栏 432

STM32 boot跳转APP的Jump_Address()分析

STM32 boot跳转APP的Jump_Address()分析 (2013-02-26 09:02:56) 转载▼     1、函数原型: void Jump_Address(void) { if (((*(volatile u32*)ApplicationAddress) & 0x2FFE0000 )== 0x20000000) {

zhashuiguangzi的专栏 2159

STM32 自建二次boot,及app注意事项

boot跳转时防止终端生效,一般都会关中断__disable_irq();因为app还会再重新初始化这些设置,此时需要注意,app的flsh偏移地址需要与boot跳转地址一致,有几处需要修改,主要功能就是跳转,其中app的bin文件前4字节为栈顶地址,向后偏移4字节为程序入口地址,以上完成跳转app。这样在boot跳转时就可以找到bin文件的栈顶地址ResetHandler的地址了,第2处,修改启动后的运行向量表偏移量,system_stm32g0xx.c。

fengdaobie的博客 1123

十行代码搞定STM32IAP(不断电调用原厂ISP)

直接上代码 #define IapAdr 0x1FFFF000 typedef void (*pFunction)(void); uint8_t JumpToApp(uint32_t Addr) { if ((((__IO uint32_t)Addr) & 0x2FFE0000 ) == 0x20000000) { __set_MSP((__IO uint32_t) Add...

bg6agf的博客 739

STM32 BOOTAPP程序跳转实现以及注意问题

STM32 BOOTAPP程序跳转实现以及注意问题 文章目录STM32 BOOTAPP程序跳转实现以及注意问题前言BOOT跳转APP的实现APP跳转BOOT实现发现问题分析问题BOOTAPP的公用的内存段互相影响后续 前言    最近使用STM32单片机烧录器的时候需要实现BOOTAPP之间程序跳转,便于通过BOOT更新APP的程序。遇到奇怪的问题,这里记录下问题以及问题原因分析过程,随便把BOOTAPP之间程序跳转的关键点列出来。 BOOT跳转APP的实现    这个BOOTAPP

wlcwjy的博客 2万+

STM32F103的Bootloader开发——Boot跳转APP

Boot很大的一个作用是用来跳转APP,在汽车行业中,控制Boot开发跳转APP之前会检验程序有效性是否存在(一般为固定的4个字节的地址),此外信息安全还会要求安全启动,都是在Boot跳转之前做文章。我们目前使用到的仅仅是Boot在某个状态持续10秒,如果10秒之内没有收到升级内容,就会自动跳转APPAPP会发送一个串口数据给到上位机,来检测是否跳转成功。以上就是今天分享的内容,验证了Boot跳转APP的有效性,这个步骤特别重要,否则Boot就没有什么作用了。有任何问题可以与我随时交流。

weixin_43671989的博客 3392

STM32bootapp

STM32升级

chengfang_12的博客 6063

STM32的启动流程boot跳转

其实向量表的本质就是一个元素大小为4字节的数组,而这个数组里面的元素就是这些中断服务函数的名字(也就是中断服务函数的地址),而这张向量表默认就放在flash起始地址处,注意向量表的第一个存储的是栈顶指针(栈顶的地址),开发板上电复位时由CPU将这个栈顶地址赋给CPU的栈寄存器SP。4.调用__main函数,在__main函数中会把flash中的rw-data给拷贝到sram中,在__main函数的最后会调用C函数,剩下就是我们自己写的代码了。ALIGN=3:表示按2的3次方对齐,所以我们栈是8字节对齐的。

2201_75288841的博客 2103

stm32 应用程序跳转到系统boot

STM32F2STM32F4 的System memory 地址从0x1FFF0000开始的, 我看了最新的HAL库,里面也没有System memory 的地址定义,看来ST官方是不想让我们用系统BOOT中的功能了, 但是鉴于ST系统bootloader的稳定性与可靠性,还有ISP上位机的丰富性、通用性,用起来还是很不错了, 怎么从应用跳转bootloader呢,可以使用下面的函数,Jump_To_APP(0x1FFF0000),就直接进入到系统bootloader中了, void Jump..

明天乌儿会歌唱 3284

STM32 CM3中APPBoot跳转问题分析

本文讲CM4中如何实现程序跳转,对于CM3原理也是一样的(代码也是一样)。我们在CM4中

爱就是是恒久忍耐的专栏 4974
上一篇: /usr/lib/libstdc++.so.6: ve…
下一篇: 红帽子linux 新建nfs服务&nbs…
trtos
博客等级 码龄12年 30粉丝 85原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值