一.硬件资源

  1. STM32F407VET6  flash:512K
  2. SIMCOM7600CE模块(MQTT)

二.软件情况

工程代码分两个来做,一个是BootLoader工程代码,一个是APP应用工程代码。

注意对flash进行分区,这里我分4个区域,bootloader区、APP1区(运行的程序)、APP2区(存储待更新的程序)、FLAG区(标志位+待更新程序字节数)数据。但是注意这4部分数据必须在不同的扇区,不能有两部分数据处于同一扇区,因为写地址如果非 0XFF,那么会先擦除整个扇区且不保存扇区数据。建议使用1024K flash,操作空间更大一点。

STM32F407利用4G模块进行IAP远程升级

 

 

基础知识就不多说了,只提一下思路和关键点:

思路:设备上电复位,运行BootLoader代码,BootLoader代码主要是根据FLAG区判断是否需要远程更新,如果不需要,则跳转至APP1区,运行应用程序代码;如果需要,则读取flash中APP2区域的数据,写进APP1区,然后清空FLAG区,跳转APP1区运行。主程序主要就是接收服务器的更新代码,写进APP2区,置位FLAG,然后重启。

关键点:

1.BootLoader工程代码需要在MDK中设置程序地址,程序是从0X08000000开始运行的,占用了128K,所以设置如下图所示:

STM32F407利用4G模块进行IAP远程升级

2.APP的设置。

APP起始运行地址0X08020000 以及flash大小128K

STM32F407利用4G模块进行IAP远程升级

这里要注意,中断向量表的问题。在主程序初始化的时候,对中断向量表进行偏移:

    //中断向量表偏移
    SCB->VTOR = FLASH_BASE | 0x20000;

3.这里我们远程烧写的是bin文件而不是hex文件,所以还需要设置MDK,生产bin文件。(具体路径根据你的MDK安装路径来写)

STM32F407利用4G模块进行IAP远程升级

STM32F407利用4G模块进行IAP远程升级

还有很多需要优化的地方,比如远程升级的时候传输中断怎么办,如何重回上一个版本,就不多说了。

 

 

相关文章:

  • 2021-12-20
  • 2022-12-23
  • 2021-12-10
  • 2021-12-15
  • 2021-11-11
  • 2022-12-23
  • 2021-04-12
  • 2022-12-23
猜你喜欢
  • 2021-10-15
  • 2022-12-23
  • 2021-11-01
  • 2021-05-29
  • 2021-04-10
  • 2021-04-10
相关资源
相似解决方案