工具: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内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复