STM32

您所在的位置:网站首页 amda46300cpu升级 STM32

STM32

2023-11-14 01:39| 来源: 网络整理| 查看: 265

引言

在我们把产品封装到了机器里面之后,当需要升级代码就变得很麻烦了,就要拆外壳,连接烧写器才能进行代码的升级,比如是买出去的产品,那更新就变得更加麻烦了,所以造成代码升级就变得非常麻烦。所以就有了一种新的更新程序的方法(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闪烁。 参考文档-正点原子视频



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3