概述
工具:IAR + STM32CubeMx
MCU:STM32F103
功能:实现Boot + APP
概述:原来程序需要做在线升级,我的方案是找一片区域存放新的程序(新APP),运行中可以进行升级(旧APP),接收完毕后重新启动,由Boot进行升级,升级完成后,跳转到APP区域执行。
详细过程:
1、APP程序改写要点:
(1)IAR的设置:程序存放、中断向量表起始位置需要更改,我预留Boot大小为0x3000,因此程序空间和中断向量起始更改为0x08003000
(2)代码中:中断向量表偏移需要更改为0x3000,我使用的是CubeMX生成的代码,文件是system_stm32f1xx.c,修改其中的#define VECT_TAB_OFFSET 为0x3000
#define VECT_TAB_OFFSET 为0x3000
(3)代码中:主程序一开始应该打开总中断
__enable_irq();
2、Boot编写要点:
(1)IAR设置:无
(2)代码:正常进行初始化,然后进行程序检查,是否有新程序下载完毕,有新程序就进行升级,无新程序就跳转到APP中。
(3)代码:跳转的过程
//跳转到APP
void IAP_JumpToAPP(unsigned long app_addr)
{
//关中断,逆初始化外设
HAL_DeInit();
__disable_irq();
HAL_RCC_DeInit();
HAL_NVIC_DisableIRQ(RCC_IRQn);
//堆栈设置
__set_MSP(*(unsigned long *)(app_addr));
//跳转
pFunction J2APP = (pFunction)*(unsigned long *)(app_addr+4);
J2APP();
}
主要有两个过程,第一是关中断,恢复外设到原来的样子(这一点很重要,你用到的外设最好都恢复成默认的样子!);第二是设置堆栈并跳转,我们知道芯片复位后,是设置SP和PC,这里就是模拟这个过程。
另外注意写的代码不要超过预留的数值大小就OK了。
最后
以上就是大气朋友为你收集整理的IAR下STM32F103 Boot + APP的编程的全部内容,希望文章能够帮你解决IAR下STM32F103 Boot + APP的编程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复