我是靠谱客的博主 大气朋友,最近开发中收集的这篇文章主要介绍IAR下STM32F103 Boot + APP的编程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

工具: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的编程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部