文章
博客 网店

 STM32F1 Bootloader(IAP)功能实现


1.BOOT程序放在flash开始处


   如下图,实现Bootloader的程序(BOOT)放到Flash开始地址(物理)处0x8000000.
  

2.主要功能程序



从UART读取数据后写入flash这里不说明,可使用ST库函数轻松实现,以下为如何实现向用户程序的跳转:

#define MAIN_USER_FLASH_BEGIN 0x8003000 //用户程序存储地址

  typedef void (*RESET_FUNCTION )(void); //复位函数模型
  
  //从BOOT程序跳转到用户程序
  void ExecApp(void)
  {
   uint32_t jump_addr=*((__IO uint32_t *)(MAIN_USER_FLASH_BEGIN+4));
    RESET_FUNCTION Reset=(RESET_FUNCTION)jump_addr;

   // ....

   __set_MSP(*(__IO uint32_t*)MAIN_USER_FLASH_BEGIN); 
   Reset();
}


3.用户程序


  如下图,用户程序的应定位到boot程序指定的用户程序开始地址处(示例中为0x8003000)
  

  用户程序首先需要做的就是将中断向量 重新映射到用户程序的开始处,这样产生中断时程序不会跳到BOOT程序的中断。代码如下:

int main(void)
{
  //重新映射中断向量,(STM32F1支持中断向量在flash中的重新映射)
  NVIC_SetVectorTable(0x08000000,0x00003000); 

 //...
}



示例代码请从到CAS-BOOT项目 下载!


芯艺工作室    蒙ICP备06005492号
Copyright© 2004-2023 ChipArt Studio All Rights Reserved