STM32 IAP实现的流程和原理在这里我就不多说了,懂的小伙伴自然懂,不懂的小伙伴自己百度一下,我就不复制粘贴来充水了,小菜鸟可以先参考一下这篇文章补充一下基础知识:https://blog.csdn.net/elikang/article/details/86082960
不说废话先上链接:https://pan.baidu.com/s/1tftODblFhlKMvoPwCA2y5w 提取码:poxu
CSDN下载地址:https://download.csdn.net/download/winux123/12728808
注意:该例程我是基于STM32F103ZET6芯片,实际使用没有问题,其他芯片设置可能要更改一下。
为什么要分享这个例程呢?可能本人不才,在网上找的很多例程都是开发者自己编写的,质量有好有坏。有些例程就简单的通过串口一次接收BIN,没有数据完整校验,没有断包、丢包相应处理,写入FLASH没有反馈写入成功结果,有些例程就运行效率低下,每次写入半个字,都要开关FLASH锁,甚至有些加延时。
这个例程是我在这位朋友的博客(https://www.cnblogs.com/hiker-blogs/archive/2013/03/17/stm32.html)下载的,做了两处小小改动(改动原因下面一一说明)。希望大家有空先去看一下,写的很详细,很有学习价值。
下面说说这个例程的优点:
1、该例程是基于STM32官方 YModem IAP例程优化的。
2、使用YModem协议,数据完整性有保障,传输效率高。
3、作者对数据接收及写入进行优化,程序运行效率相对高。
4、代码非常简洁规整,非常容易理解,极容易在此基础上做一些功能升级,例如实现SD卡IAP,蓝牙IAP。
下面说一下本人改动的地方:
1、把更新程序前对APP区域刷写的程序,修改到在第一次写入APP程序前执行,原作者是在接受到头文件后进行刷写,不知道为何我用SecureCRT测试的时候,发现明明我只发了一个BIN文件,但是在完整接受到BIN后,又接收到一次头文件数据,导致刚接受完的数据被刷掉。所以修改刷写动作在真实写入数据之前,确保不会因为一个空的头文件导致现有数据被错误刷掉。
2、修改了检测升级按钮时间为3秒,方便调试。