STM32F0 IAP
对于STM32F0 这里没办法设置中断向量表的偏移,但是,可以将中断向量表映射到RAM中
参考:
https://blog.csdn.net/findaway123/article/details/41602931?utm_source=blogxgwz5
https://blog.csdn.net/feifeiyunyun8/article/details/77705260


直接上代码
使用方法:
mid_iap_load_app( 0x8002800 );
原型:
1 /******************************************************************************* 2 * Function Name : mid_iap_load_app 3 * Description : 跳转到应用程序 若不存在APP,则执行下面的代码 4 * 根据平台进行重写 5 * Input : appxaddr 跳转地址 6 * Output : None 7 * Return : None 8 *******************************************************************************/ 9 void mid_iap_load_app( uint32_t appxaddr ) 10 { 11 mid_iap_func_t jump2app; 12 if (((*(uint32_t *)(appxaddr+4)) & 0xFF000000) == 0x08000000) /* 判断是否存在app程序 */ 13 { 14 if (((*(uint32_t *)(appxaddr)) & 0x2FFE0000) == 0x20000000) /* 检查栈顶是否合法 */ 15 { 16 17 mid_tool_memcpy((void*)0x20000000, (void*)appxaddr, 0xB4); /* vector 一共 b4字节 这里其实可以设置长一点 例如0x100 多余的可以用于boot和app传递数据 不会被初始化 ,但掉电失去 */ 18 SYSCFG->CFGR1 |= 0x03; /* 设置向量表在RAM中 */ 19 20 jump2app = (mid_iap_func_t)*(uint32_t*)(appxaddr+4); /* 用户代码第二个字为程序开始地址(复位地址)*/ 21 mid_iap_MSR_MSP (*(uint32_t*)appxaddr); /* 初始化APP堆栈地址 */ 22 jump2app( ); /* 跳转到app */ 23 } 24 } 25 } 26 27 /********************************************************************************/
工程配置
bootloader
不需要改
APP 我这里设置 2800 10K的地方 长度对应减一下 然后RAM 偏移B4 因为中断向量刚好B4字节,这里要和代码跳转那里设置相同
其实这里可以定义长一点,这样可以用来boot 和 app传递数据,这样设置了之后,在app初始化阶段不会初始化这段ram 不过掉电会失,若要APP传boot,还是别跳,直接存flash复位8

out put 这里可以改一下,设置一下生成bin文件

这里的 地址为你工程的主目录 对应着改吧
D:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin -o .\Progect.bin .\Progect.axf

浙公网安备 33010602011771号