ST MCU 提供了一个IAP功能,即STM32 in-application programming (IAP),这个程序通过ST 原始方式(比如常见的拉BOOT管脚进BOOT,然后进行升级)烧录至用户代码起始位置(0x8000000),作为第一级用户软件,有了这个第一级用户软件后,可以支持烧录用户第二级用户软件(App)、读取用户第二级软件、跳转执行第二级用户软件,其中烧录用户软件使用的协议是YModem协议。
这样开发者开发基于STM32的用户软件时可以将软件分成Boot+App两个部分,Boot 就是前面的第一级用户程序,App是第二级程序,也是用户真正做业务功能的程序,这样的好处是只需要通过手动拉管脚使MCU 进下载模式后烧录一次Boot软件后,后续再也不用手动拉管脚进行下载了,因为用户功能主要在APP中,更新APP 软件通过Boot这个第一级软件就行了,除非要更新Boot,其他则不需要。这种应用场景常常是这样的:一个最终的嵌入式产品是有外壳的,一般会将Debug 串口预留出来用于下载版本、抓日志、调试等,不会把ST原始下载进入下载模式需要短接的B00T Pin和3.3v Pin也外接,所以想要进行原始拉BOOT 进下载模式就会很麻烦,或成本很高,需要拆掉外壳漏出PCB板,这在实际发货后的产品中常常是不好操作的,所以Boot+App的模式就显得很重要了,这样在工厂生产时第一次升级时使用一次原始升级方式将Boot+App的全版本升级进行去,后续在更新版本只需要通过串口线升级即可;
如笔者开发的基于STM32F3/F4 的物联网设备,车载tBox、共享充电桩,智能锁等智能终端中就采用该方法,设备出厂时已经烧录了Boot和APP,后需要维护升级时只需要通过预留的串口线通过上位机进行App更新即可。
欢迎各位朋友讨论交流!