使用keil进行iap的注意事项

以stm32103zet6(flash 起始地址 0x8000000 大小512k)为例。

boot程序
1、option->target->IROM1 Size要改成合适的大小
在这里插入图片描述

2、跳转前要关闭所有外设
3、跳转代码参考

__asm jump_to_app(uint32_t sp_addr)
{
	;//sp_addr(r0)为app程序的起始地址
	mov r1, #0x0
	msr control, r1		
	msr basepri, r1		
	msr faultmask, r1	
	msr primask, r1			;//初始化特殊寄存器
	mov r1, #0x01000000
	msr xpsr, r1			;//写xPSR为0x01000000
	mov lr, #0xffffffff 	;//写lr为 0xffffffff
	ldr r1,[r0]				;//将r0(sp_addr)赋值给r1 (msp指针)
    msr msp, r1				;//将r1的值赋给msp指针(主栈指针)
	ldr r1,[r0,#0X04]		;//将r0(sp_addr)加4地址处的值(pc指针)赋给r1
    mov pc, r1				;//跳转到r1处继续执行 短跳转最大距离32M: bx r1 长跳转 mov pc, r1 
}

app程序
1、option->target->IROM1起始地址以及大小要改
在这里插入图片描述
2、SystemInit()函数中,中断向量表偏移地址要改成程序起始地址
在这里插入图片描述

总结:boot程序的跳转目标地址=app程序中断向量表偏移地址=flash 下载地址=程序起始地址

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值