STM32_使用Bootloade升级程序(IAP方式)

引言

在我们把产品封装到了机器里面之后,当需要升级代码就变得很麻烦了,就要拆外壳,连接烧写器才能进行代码的升级,比如是买出去的产品,那更新就变得更加麻烦了,所以造成代码升级就变得非常麻烦。所以就有了一种新的更新程序的方法(IAP)。使用了该方式的单片机产品,只要在最开始预留了“SD卡”或者“串口接口”就能简单的进行程序的升级更新了。这里我们使用对“串口”更新程序的方式进行步骤讲解。

一、思路简介

首先我们理出一条思路,就如手机一样,我们在开机的时候长按某个键就能进行系统的升级一样,这里我们就按着这个思路,做一个单片机进行IAP升级程序的思路:

(1)Bootloader程序

首先我们需要在单片机里面写一个程序,这个程序(Bootloader)的功能是:

没有按下+
被按下
单片机上电+
按键被按下了吗??+++
跳转到程序代码区++
单片机接收电脑的串口数据+++
覆盖旧程序的方式写入单片机Flash里++++
运行功能代码+
(2)更新的程序

然后下面就是我们要更新程序了,这个首先需要单片机直接跳转到“跳转到程序代码区”的Flash进行程序的运行,功能是:

单片机上电+
跳转到程序代码区++
运行功能代码+

二、代码具体实现方法

(1)Bootloader程序具体实现方法
num位为0+
num位为1+
Key被按下++
Key没有按下++
通电+
if判断Key被按下为低电平?+++
while循环+
打开uart2串口接收,使代码更新标志位:num=1++++
if判断num代码更新标志位为0吗?+++
通过iap_load_app函数跳转到程序地址执行++++
电脑通过串口把bin文件发送给单片机+++
if判断Key被按下为低电平??+++
单片机把DATA缓存的串口数据通过iap_write_appbin函数覆盖旧代码的方式写入单片机Flash里+++++++++
返回循环+
运行程序功能代码++

具体代码展示:
在这里插入图片描述

(2)运行的程序具体实现方法

在这里插入图片描述

三、例程的实际操作

文件下载链接: https://download.csdn.net/download/qq_26043945/82885061

(1)操作第一步烧录(旧程序)

为了模拟真实情况,我们先用下载器烧录(旧程序)。打开工程文件 “ LED每1000毫秒闪一次(旧程序) ” ,在烧录前设置IROM1的Start为:0x8020000 ;设置IROM1的Size为:0x20000 ,然后使用烧写器进行代码烧录即可。
在这里插入图片描述

(2)操作第二步烧录(Bootloader程序)

1.Bootloader程序只会在单片机通电的时候运行一次,它的功能为:判断Key是否按下?假如:①Key按下,就打开串口,然后电脑把新程序通过串口发送给单片机,然后再按下Key键,单片机则把接收的数据覆盖掉原来 0x8020000 的(旧程序),最后跳转到Flash的 0x8020000 地址执行覆盖后的新程序。
2.打开工程文件 “ Bootloader程序 ” ,在烧录前设置IROM1的Start为:0x8000000 ;设置IROM1的Size为:0x40000 ,然后使用烧写器进行代码烧录即可。
在这里插入图片描述

(3)操作第三步对“替换程序”生成bin文件

打开工程文件 “ LED每100毫秒闪一次(替换程序) ” ,并且设置IROM1的Start为:0x8020000 ;设置IROM1的Size为:0x20000
在这里插入图片描述

在下面设置:C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin -o D:\xxxx\xxxx\xxxx\LED.bin D:\xxxx\xxxx\xxxx\LED.axf (注意:xxxx\xxxx\xxxx 是按你工程的位置进行填写),然后编译该工程后,就会生成bin文件,在该工程下面找到bin文件。
在这里插入图片描述

(4)第四步单片机进入程序升级界面

单片机在通电前长按Key键(PC15拉低),单片机打开了串口接收等待数据接收,通电几秒后松开Key键,这时把bin文件通过电脑串口把文件发送给单片机。
在这里插入图片描述
电脑发送bin文件后,再次按下Key键,则完成了程序的更新。单片机LED程序:由1000ms闪烁变成每100ms闪烁。
参考文档-正点原子视频

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_755682240

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值