STM32/GD32 BootLoader升级 IAP升级

这篇具有很好参考价值的文章主要介绍了STM32/GD32 BootLoader升级 IAP升级。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

如果我们的App 程序起始地址在0x08006000 ,并且App 的中断向量表在起始地址,那么BootLoader 程序下载App 后,为了App 程序能正确运行,开始App 程序的运行后第一步,就要把中断向量表重定位到0x08006000 那里。

跳转到新程序运行

我们的BootLoader下载App程序后,App程序就需要做同样的事情。主要有三个步骤,其中BootLoader程序需要做的是:

  • 跳转到复位向量

App需要做的是:

  • 重定位中断向量表
  • 设置栈指针

STM32/GD32 BootLoader升级 IAP升级

 文章来源地址https://www.toymoban.com/news/detail-502641.html

根据上图分析加入IAP后的起动和运行过程

  1. STM32复位后,还是从0X08000004地址取出复位中断向量的地址,并跳转到复位中断服务程序,在运行完复位中断服务程序之后跳转到IAP的main函数,如将IAP看作是一个APP的话,那么此部分和正常起动是一样的。(此步=执行复位中断服务程序+跳转main,即将正常运行的①和②合并了)。
  2.  在执行完IAP以后(固件升级或直接跳转),跳转至APP的复位向量表(APP的复位中断向量起始地址为0X08000004+N+M)。
  3.  取出APP的复位中断向量的地址,并跳转执行新程序的复位中断服务程序,随后跳转至APP的main函数(此步=执行复位中断服务程序+跳转main)
  4.  同样main函数为一个超循环,并且注意到此时STM32的FLASH,在不同位置上,共有两个中断向量表。在main函数执行过程中,如果CPU得到一个中断请求,PC指针仍强制跳转到地址0X08000004中断向量表处,而不是APP程序的中断向量表。
  5.  程序再根据我们设置的中断向量表偏移量,跳转到对应中断源的APP的中断服务程序中,
  6. 在执行完中断服务程序后,程序返回main函数继续运行。

gd32的启动文件:

STM32/GD32 BootLoader升级 IAP升级

升级bootloader调试记录

目前boot的实现方式有两种

  1. 一直是boot里面只做文件拷贝、版本对比与跳转。这种方法的好处是不需要在boot中添加通讯协议及相关的通讯功能。但是升级需要外部有一个备份区来进行存储升级数据,占用空间较大,但是升级失败后,依然可以运行之前的app,保证机器能一直有app可以使用。
  2. 另外一种是在boot里面增加通讯功能,让其具备接收数据、并将数据写到指定位置的特性。使用这种方式可以实现不要备份区升级、以此来满足小容量单片机的需求。每次进行升级都会对app区进行擦写。这样就会导致一个问题,当升级失败后,会一直停留在boot等待再一次升级,直到升级成功后,才能去运行app。

升级app调试记录

如果使用了bootloader后需要调试app应用需要做一下操作

1、修改ROM1起始位置及大小

STM32/GD32 BootLoader升级 IAP升级

 

2、修改启动文件(.s)中的NVIC中断向量表的偏移。比如,我的app其中地址的偏移为

#define VECT_TAB_OFFSET (uint32_t)0x1E00 /* vector table base offset */

在SystemInit中会用到

3、修改debug的app堆栈指针的偏移,这里使用外部加载ini文件的方式。

文件内容

SP = _RDWORD(0x08001E00); // Setup Stack Pointer

PC = _RDWORD(0x08001E04); // Setup Program Counter

STM32/GD32 BootLoader升级 IAP升级

 

4、到这里你就可以开心的调试自己的代码了。

STM32/GD32 BootLoader升级 IAP升级

 

到了这里,关于STM32/GD32 BootLoader升级 IAP升级的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32 ——bootloader IAP

    本文使用单片机型号:STM32F104xx IAP(In Application Programming) 是用户自己的程序在运行过程中对 User Flash 的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。为了实现 IAP 功能,系统将分为 bootloader 和 app 两部分。bo

    2023年04月09日
    浏览(24)
  • GD32F4XX IAP升级

    这里使用的是GD32F405RG,flash 为1M(0x08000000 - 0x080FFFFF),具体参考官方手册 因为每个芯片的falsh大小不一样,地址划分根据实际flash大小和自己的设计去分配就好, 自己的址划分如下 : BOOT_ADDRESS:0x08000000 - 0x08003FFF     16k(扇区0) APP_ADDRESS:0x08004000 - 0x0807FFFF     512k-16

    2024年02月12日
    浏览(30)
  • STM32 IAP应用开发——自制BootLoader

    什么是IAP? IAP(In-Application Programming) 指MCU可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。在应用编程(IAP)是用户的应用代码对片内Flash存储器进行擦除/编程的方法。这种方式的典型应用就是用一小段代码来实现程序的下载,实际上单片机的ISP功能就

    2024年02月13日
    浏览(28)
  • stm32 在线升级程序 bost IAP程序 + app程序

    机器内 bootloader程序 启动默认程序 默认程序有 串口判断 是否收到 升级命令 收到升级命令后 接受串口发送过来的 更新程序 接受完成后 跳转到新程序位置开始执行 https://www.zhihu.com/people/lian-zhu-50 首先arm单片机控制程序运行是通过PC指针完成的,PC指到哪里,程序就运行到哪里

    2024年02月10日
    浏览(39)
  • STM32F407串口IAP远程升级程序

    相关代码和工程文件链接:https://pan.baidu.com/s/1wN4THWJwqzjjIe7e2TENBA?pwd=o86o 提取码:o86o         STM32代码烧录主要有三种:ICP、ISP、IAP。         ICP(In Circuit Programing),在电路编程,通过JTAG或者SWD接口进行程序的烧录,就是平时利用ST-Link或者J-Link烧录程序;       

    2024年02月10日
    浏览(89)
  • STM32之Bootloader、USB、IAP/DFU下载

    STM32 IAP应用开发——通过内置DFU实现USB升级(方式2) STM32 IAP应用开发——通过内置DFU实现USB升级(方式1) STM32程序下载4:通过STM32CubePro-USB下载 STM32程序下载3:通过STM32CubePro-UART下载 STM32程序下载2:通过STM32CubePro-ST-Link下载 如何使用串口来给STM32下载程序 通过STM32内置的U

    2024年02月02日
    浏览(33)
  • 国民技术N32G430开发笔记(9)- IAP升级 Bootloader的制作

    1、上节提到Flash的分区,0x8000000-0x8004000为Boot分区,我们的bootloader就烧录到此分区。 Bootloader很简单,新建一个普通的工程, 也不用初始化外部设备,开机后,直接跳转到 App分区所在的地址即可, 当然App的分区程序也要提前烧录进去, 否则也是跳不过去的。 代码 开机延时

    2024年02月02日
    浏览(52)
  • 使用STM32F103的串口实现IAP程序升级功能

    🎬IAP程序烧录全过程演示: ✨这几天折腾IAP升级功能,狂补了很多相关BootLoader相关的知识。本来最想实现IAP升级程序的方式是,基于SPI通讯的SD卡,借助挂载的FatFS文件系统,来实现对目标stm32芯片的自身程序的升级,奈何没有实现,只能求其次,先来通过官方现有的串口实

    2024年02月10日
    浏览(46)
  • 单片机(STM32,GD32,NXP等)中BootLoader的严谨实现详解

    Bootloader( 引导加载程序 )的主要任务是引导加载并运行应用程序,我们的软件升级逻辑也一般在BootLoader中实现。本文将详细介绍BootLoader在单片机中的实现,包括 STM32、GD32、NXP Kinetis 等等的所有单片机,因为无论是什么样的芯片,它实现的逻辑都是一样的。 注意,本篇文章主

    2024年02月02日
    浏览(47)
  • STM32 ICP、ISP、IAP、Bootloader、SWD、JTAG究竟是什么?它们之间有什么关系?

    从代码写入单片机的方式上去区分主要分为3种:ICP、ISP、IAP 一、 ICP(In Circuit Programing) :在电路编程,可通过CPU的Debug Access Port 烧录代码,比如ARM Cortex的Debug Interface主要是SWD(Serial Wire Debug)或JTAG(Joint Test Action Group); ICP 主要通过CPU的DAP(Debug Access Port) 烧录代码,下面以ARM Cor

    2024年02月04日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包