stm32l4 IAP无法跳转问题
最近搞stm32l433ccu6,移植了原子的IAP,但是发现无法大多时候无法跳转到APP(偶尔能跳转到APP),求解啊。//跳转到应用程序段
//appxaddr:用户代码起始地址.
void iap_load_app(u32 appxaddr)
{
INTX_DISABLE();
jump2app=(iapfun)*(vu32*)(appxaddr+4); //用户代码区第二个字为程序开始地址(复位地址)
__set_MSP(*(__IO uint32_t*)appxaddr);
// MSR_MSP(*(vu32*)appxaddr); //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
jump2app(); //跳转到APP
}
跳转前要关全局中断 1.别忘了重定位向量表。
2.参考STM32CUBE示例程序,你相信ST官方还是小作坊? 1、首先要确认是跳转了没成功,还是没跳转?
2、跳转之后要重新设置堆栈
3、跳转之前要关闭中断,同时要检查栈顶地址是否合法 队长shiwo 发表于 2017-8-29 18:02
跳转前要关全局中断
怎么关全局中断?我用的HAL库 moyanming2013 发表于 2017-8-29 20:44
1.别忘了重定位向量表。
2.参考STM32CUBE示例程序,你相信ST官方还是小作坊? ...
我重新设置了中断向量表的SCB->VTOR = FLASH_BASE | 0x10000; freeelectron 发表于 2017-8-30 09:15
1、首先要确认是跳转了没成功,还是没跳转?
2、跳转之后要重新设置堆栈
3、跳转之前要关闭中断,同时要检 ...
跳转了,app没运行 freeelectron 发表于 2017-8-30 09:15
1、首先要确认是跳转了没成功,还是没跳转?
2、跳转之后要重新设置堆栈
3、跳转之前要关闭中断,同时要检 ...
__asm void INTX_DISABLE()
{
CPSID I
BX LR
}
//开启所有中断
__asm void INTX_ENABLE(void)
{
CPSIE I
BX LR
}
这样开关中断对不对? wt13568089592 发表于 2017-8-30 17:01
我重新设置了中断向量表的SCB->VTOR = FLASH_BASE | 0x10000;
编译出的固件(比如bin文件)没下载对。
对于IAP程序是从flash的第0扇区开始的位置,即是FLASH_BASE;对于APP程序,则需要修改为FLASH_BASE+0x10000。
如果使用MDK-ARM的话配置非常简单,每次配置完成后rebuild再下载或调试。或者添加item区分。
IAP项目时,配置start为flash起始地址,大小为合适的大小(我的大小是0x8000):
APP项目时,配置配置start为flash合适的起始地址(我的是0x800C000),大小为合适的大小(我的大小是0xF4000):
moyanming2013 发表于 2017-8-30 17:25
编译出的固件(比如bin文件)没下载对。
对于IAP程序是从flash的第0扇区开始的位置,即是FLASH_BASE;对 ...
我设置好了的
页:
[1]
2