STM32固件IAP程序实现

1.写在前面

IAP全称是In Application Programming,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。

2.系统BootLoader

对于STM32来说,芯片出厂时已经预置了一段Bootloader,但是启动Bootloader需要设置单片机的BOOT引脚:BOOT1=0,BOOT0=1,并复位后才能进入系统Bootloader。BOOT引脚的设置可通过硬件来实现自动设置和复位,从而利用系统Bootloader实现IAP。电路图如下:

电路比较简单就不详细分析了。程序升级需要配合专用的软件MCUISP。升级时MCUISP软件会控制DTR引脚和RTS引脚将BOOT0引脚拉高,并实现单片机复位,从而进入系统Bootloader。之后可以通过USB转串口对程序进行升级。

3.自己编写BootLoader

系统Bootloader只能通过特定的接口对程序进行升级,且会增加额外的硬件设计,有时候并不适用。这时候就需要自己编写Bootloader程序实现IAP。

实现IAP需要两个程序:Bootloader程序和应用程序。系统启动后首先进入Bootloader程序,判断是否需要升级,如果不需要直接跳转到应用程序运行;如果需要则通过指定的接口和协议接收数据并写入到Flash中,实现应用升级。这种方式灵活很多,接口和协议都可以自定义,实现的关键是协议的设计和对Flash进行读写。这里以STM32F1系列单片机为例,采用串口1和通用的Ymodem协议进行介绍。

YModem协议

YModem协议是一个非常高效的文件传输协议,每包数据可以达到1024字节。YModem协议传输的完整的握手过程如下。这里就不进行详细介绍了,用户也可以采用自定义的协议,协议设计要主要发送、反馈和校验,保证传输数据的正确性。

Bootloader程序

STM32Cube库文件中提供了相关的例程,可以进行参考:

STM32Cube_FW_F1_V1.8.0\Projects\STM3210C_EVAL\Applications\IAP\IAP_Main

可以看到,程序初始化后通过检测按键来判断是否需要升级应用程序。

很多时候,用户的硬件上可能没有按键,则需要通过其它办法来实现判断。比如,需要升级时,应用程序在Flash某个位置写入一个标志,然后复位进入BootLoader程序,BootLoader程序读取该标志来自动判断是否需要升级应用程序。

应用程序

由于BootLoader程序的存在,应用程序在Flash中的存储位置也发生了改变,需要对程序中的中断向量表偏移地址进行修改。首先在Bootloader程序中确定应用程序的起始地址:

在应用程序工程中修改程序编译的地址:

在应用程序中system_stm32f10x.c文件,找到:

修改为:

该地址为偏移地址,不是绝对地址,与上面的地址有区别。

最后,MDK默认只生成HEX文件,要生成bin文件需要添加一条指令。在User选项卡中,勾选 'Run # 1',在后面输入框写入bin文件生成方式:

$K\ARM\ARMCC\bin\fromelf.exe --bin --output=Bin\@L.bin !L

上位机

上位机采用SecureCRT,该软件支持YModem协议。打开软件后,连接串口,使电路板进入Bootloader程序,根据菜单进行操作即可。

采用其它方式和协议进行IAP升级的方法将在以后的文章中继续介绍。

(0)

相关推荐

  •  ISP IAP 详解与ISP IAP的实现

    本帖的大致内容分为三部分 1 STM32 IAP方式与ISP方式选择的具体实现操作步骤 2 ISP方式与实现过程 3 IAP方式与实现过程 ISP:In System Programing       ...

  • 单片机程序烧录的3种方式(ISP、ICP、IAP)是什么

    说起给单片机烧录程序,大家应该都不陌生吧,我最早接触单片机是从51单片机开始的,型号是STC89C52RC,当时烧录程序就是用的下面这种烧录软件--STC-ISP. 这种方式,通过串口连接单片机,选择 ...

  • 重要【STM32学习笔记】STM32 BOOTLOADER配置以及APP跳转

      大家好,今天给大家介绍的是STM32的BootLoader以及它如何跳转运行到APP应用程序的例程.   首先我先给大家科普一下什么是BootLoader. 什么是BootLoader? Boot ...

  • STM32如何IAP升级用户程序

    IAP简介 IAP( In Application Programming)即在应用编程,也就是用户可以使用自己的程序对MCU的中的运行程序进行更新,而无需借助于外部烧写器.ST官网也给出了IAP的示 ...

  • STM32自举程序原理和使用

    很很多单片机都有自举程序,像支持STC单片机使用串口下载,这种其实也是单片机内部集成了一段自举程序. 那你,你了解自举程序吗?下面结合STM32给大家分享一下关于自举程序的知识. 1关于自举程序 ST ...

  • STM32官方IAP例程详细说明,以及Demo演示

    我们常看到ISP.ICP.IAP等英语缩写词组,它们的主要作用就是对程序代码进行下载(编程). 下面将介绍关于编程的基础知识,以及结合STM32官方提供的Demo详细讲述一下其中的内容. 1关于ISP ...

  • STM32串口IAP分享

    什么是IAP? IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通 ...

  • STM32固件、资料版权问题

    现在大家都应该开始重视版权的问题了,相信有不少读者都收到了Altium.Keil等常用工具厂商的**函了. 今天来说说STM32固件版权的问题: 1Q. STM32固件是否包含ST版权资料? 1A. ...

  • 我在高职教STM32(无论怎么封装终究是操作的还是寄存器)06初识STM32固件库

    https://m.toutiao.com/is/J48Arsu/ (无论怎么封装终究是操作的还是寄存器) 大家好,我是老耿,高职青椒一枚,一直从事单片机.嵌入式.物联网等课程的教学.对于高职的学生层 ...

  • Jlink使用技巧之读取STM32内部的程序

    前言 Jlink可以将Hex文件下载到单片机内,也可以将未加密单片机内部的程序文件读出.本篇文章介绍,如何使用JFlash来读取单片机的程序,学习单片机程序文件的读取,不是为了破解别人的程序,而是学习 ...

  • 关于在Ubuntu下开发STM32程序printf函数的重映射问题(SW4STM32)

    最近使用STM32CubeMX加Ubuntu18.0来进行STM32相关程序的开发,在使用串口打印的使用出现了如下问题: printf函数按照Keil中的方式进行映射后,在软件仍然无法正常使用Prin ...