您当前的位置: 首页 >  stm32

跋扈洋

暂无认证

  • 5浏览

    0关注

    221博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

基于STM32的IAP升级程序

跋扈洋 发布时间:2022-05-26 17:26:48 ,浏览量:5

基于STM32的IAP升级程序
  • IAP介绍
  • 功能设计
  • 硬件设计
  • 软件设计
    • 软件设计流程如下
    • 完整程序
  • 具体实现
    • 设计功能程序
    • IAP实现程序
    • 主程序
  • 后续

IAP介绍

IAP(In Application Programming)即在应用编程,IAP 是用户自己的程序在运行过程中对User Flash 的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。 通常实现 IAP 功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信方式(如 USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。这两部分项目代码都同时烧录在 User Flash 中,当芯片上电后,首先是第一个项目代码开始运行。 简单来说,就是程序首先运行在boot升级区,检测是否有升级程序,当有升级程序的时候,用户将升级的固件通过某种通信接口(如串口)传输到开发板的某个位置中,之后放在APP的位置。当没有升级程序,直接运行APP中的程序。

功能设计

将最新的产品固件通过串口上传到开发板中,按下按键1,开发板将固件更新到设置的功能程序存放地址,按下按键2,执行功能程序。

Created with Raphaël 2.3.0 开始 是否有升级程序 将升级固件暂存在RAM中 是否按下按键1 将RAM中的固件更新到Flash功能程序位置 是否按下按键2 跳转到执行产品功能程序 yes no yes no yes no
硬件设计

使用的MCU为STM32F103 使用元器件为两个按键和两个LED灯

软件设计 软件设计流程如下
  1. 编写需要升级的产品功能程序
  2. 设置产品功能程序在keil 5中Target的程序的Flash起始地址和大小,并且程序中设置中断向量表的偏移量
  3. 生成产品功能程序的固件bin文件
  4. 设置IAP升级程序存放的起始地址和大小
  5. 串口接收产品功能程序
  6. 将最新的升级程序放入到功能程序的Flash位置
  7. 跳转到功能程序的Flash地址处
完整程序

基于STM32的IAP升级程序(Bootloader)

具体实现 设计功能程序

主要为两处:

  1. 在main()函数中最开始处,添加
SCB->VTOR = FLASH_BASE|0x9C00; 
  1. 在keil 5中Target的程序的Flash起始地址和大小

20220526121427.png

生成bin文件:我们通过在 MDK 点击 Options for Target→User 选项卡,在 After Build/Rebuild 栏, 勾选 Run #1,并写入:D:\32\Keil 5\ARM\ARMCC\bin\fromelf.exe --bin -o …\OBJ\LED.bin …\OBJ\LED.axf

20220526155147.png

编译后,就会生成.bin文件了。

IAP实现程序
  1. IAP写入程序 将暂存在RAM中的程序存放到Flash的对应地址中 appxaddr:应用程序的起始地址 appbuf:应用程序CODE. appsize:应用程序大小(字节).
void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)
{
	u16 t;
	u16 i=0;
	u16 temp;
	u32 fwaddr=appxaddr;//当前写入的地址
	u8 *dfu=appbuf;
	for(t=0;t            
关注
打赏
1663745539
查看更多评论
0.1779s