完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
芯片STM32F103RBT6,APP起始地址:0x8005000
IAP程序擦除了 0x800500以后的Flash区域,擦除正常,烧写正常 APP,keil设置,Flash起始地址设了 0x8005000,选择了生产 Bin文件 APP的main函数一开始就设置了 SCB->VTOR = FLASH_BASE | 0x5000; 然后IAP程序中到了这个函数,直接走的是else.... //执行用户程序 void ExecuteUserPro(void) { //判断用户是否已经下载程序,因为正常情况下此地址是栈地址。 if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000) //若没有这一句的话,即使没有下载程序也会进入而导致跑飞。 { debugOUT("Execute user Program !"); //跳转至用户代码 JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4); Jump_To_Application = (pFunction) JumpAddress; //初始化用户程序的堆栈指针 __set_MSP(*(__IO uint32_t*) ApplicationAddress); Jump_To_Application(); } else { debugOUT("no user Program.."); debugOUT("Restart the device and"); BSP_TimClose(TIM_3);//停止闪烁 IO_RESET(eLED_1);//常亮LED while(1) { } } } 何故?求解! ==================================================================================================== 谢谢大家 原因找到了,就是APP烧录的时候,出错了,无意偏移了64字节,导致比对失败,本想开源的,但是诸多问题在里边,项目紧,放弃了自动更新的功能,以后做好了在拿出来~ |
|
相关推荐
10个回答
|
|
这个真心不会
|
|
|
|
|
|
|
|
if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000) //若没有这一句的话,即使没有下载程序也会进入而导致跑飞。
这个判断的是再RAM区,你不是要在FLASH里运行么? |
|
|
|
|
|
看一下官方iap例程
|
|
|
|
接收的程序对么?
|
|
|
|
谢谢各位的参考和建议,我晚上回去逐一检查,其它的还有什么地方不完善,请大家帮我指出来,谢谢
|
|
|
|
|
|
|
|
|
|
支持,顶,没遇到过但是支持
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1168 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1105 浏览 2 评论
2203 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1297 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1718 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 19:15 , Processed in 0.755330 second(s), Total 59, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号