您的位置 首页 技术

STM32 IAP 无法运转用户程序的解决方法

IAP程序:主要是设置用户程序的起始地址APPLICATION_ADDRESS,如0x08004000,通过外设把用户代码写入FLASH的用户区。满足条件后,跳转至…

IAP程序:

主要是设置用户程序的开端地址 APPLICATION_ADDRESS,如0x08004000,经过外设把用户代码写入FLASH的用户区。满意条件后,跳转至用户区开端地址。
解释一下跳转部分代码:
/* Test if user code is programmed starting from address “APPLICATION_ADDRESS” */
if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)// 判别栈顶地址是否在0x2000 0000 – 0x2000 2000之间
// 经过判别栈顶地址值是否正确来判别是否现已下载用户应用程序。由于用户程序的发动文件开端会初始化栈空间,假如栈顶地址正确,阐明用户程序现已下载。
{
__set_PRIMASK(1);// 封闭大局中止。留意,在跳转前,有必要先封闭大局中止,进入用户程序后,在中止向量表地址设置完成后再开中止。
printf(“Jump to the new program.\r\n”);
/* Jump to user application */
JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);// 前4字节为中止向量表
Jump_To_Application = (pFunction) JumpAddress;// 指向用户程序复位函数地点的地址
/* Initialize user applications Stack Pointer */
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);// 设置用户程序的栈指针
Jump_To_Application();// 履行用户程序
}
需求留意的是,在IAP程序中,跳转用户程序前,需求先封闭大局中止。
能够看论坛上的评论http://www.amobbs.com/thread-5606964-1-1.html
用户程序:
主要是设置中止向量表的偏移地址和工程选项里的ROM开端地址。需求留意的是在SystemInit()后再设置中止向量表,以及开大局中止。
能够在main的开端设置中止向量表。
工程选项的修正

在main函数开端增加设置中止向量表的部分
// 运用IAP,修正用户程序区基址地址,有必要为0x200的整数倍(stm32f205)
// 留意:工程选项相应修正:IROM1: start: 0x8004000
#ifdef VECT_TAB_RAM
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */ // 修正FLASH向量表,开端地址由0x8004000开端为用户程序区
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NV%&&&&&%_VectTab_FLASH, 0x4000);
__set_PRIMASK(0);// 敞开大局中止
#endif
用户程序需求转成.bin格局,在工程选项中,User->After Build/Rebuild 中增加 fromelf.exe –bin -o “$L@L.bin” “#L”,可实现在输出目录中输出bin文件。
别的能够再增加.bat文件,把.hex和.bin文件复制出来,例如:
copy ..\Objects\output.hex Flash\acq_v2_IAPMain.hex
copy ..\Objects\output.bin Flash\acq_v2_IAPMain.bin
兼并烧写:
在烧写程序时,需求先用烧写器烧写IAP程序,便是BOOTLOADER的部分,然后再经过外设写入用户程序。
但其实,这两步能够兼并为一步烧写。
把IAP的.hex最终一句结束语去掉,即删去 :00000001FF;然后把用户程序的.hex全部内容复制到IAP的.hex后边;最终把整合后的.hex文件烧写到0x0800 0000的开端地址即可。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/252058.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部