您的位置:首页 > 其它

STM32 IAP在线升级教学

2016-02-25 21:45 316 查看
该篇文章主要讲解如何使用SMT32进行在线升级的方法和流程,并不会设计过多具体代码,之后会制作专门讲代码的视频。

概述

如何实现在线的固件更新,其实就是在片子中保存一段BootLoader程序和主程序(我叫他APP程序)。正常情况下程序仅仅运行APP程序,当得到命令后,程序将跳转到BootLoader程序进行新的APP程序更新,完成后跳转到APP程序运行。呃,好绕,哎无所谓,将就看吧。

BootLoader程序放置在正常程序的开始位置,没啥讲究,但是APP程序就不一样的,他需要给他规定一个起始位置,所以需要计算好判断程序的大小来进行设置设置。

SMT32的存储结构就变为了 内存 – BootLoader — APP —flash —

BootLoader程序

这个程序主要是用来区分是否需要更新程序,如果是就接收新程序并且写入flash,如果不是就直接跳转至APP程序。我将该程序分为了四个部分

1.判断

该步骤用于判断是否需要更新,我的程序里面使用了0x0800F000这个flash地址作为标志位来判断,地址是随便选的啦,只要不干扰到APP程序就好。该标识如果是0xFFFF则表示需要更新。修改是在APP程序里面(咦!我怎么把它写到那去了,这个应该写在BootLoader里面,在更新结束后更改标志位)具体在APP程序 一栏会讲到。

2.擦除

该步骤用于预先擦除需要写入的flash程序区域,于是就需要上位机发送一个页大小,这里我顶的协议是 FF PAGE AA,PAGE表示页数。为什么要这么做呢,因为擦除操作将会耗费大量的时间,如果边接收数据边擦除写入会影响接收数据量,这点笔者纠结了好久才发现为啥数据量不对 - -||。于是我便先对区域擦除,再边接收数据边写入flash就不会出问题了。页数也方便确认,上位机在读取bin文件的时候便能知道大小,除以也大小就得到页数了。

3.下载

这一步骤就是循环的接收数据写入flash而已,对了,这里要提到的是笔者使用的是c8t6系列,是MD的,如果你使用HD的片子需要修改下写入方式。怎么弄就自己去学SMT32的flash操作啦。

4.执行

这里就不得不提到用户代码去的第二个地址为开始地址这个知识咯,具体可以到手册上去看看,就是说我们需要运行新程序,就得吧指针
4000
指向新程序的开始地址,也叫复位地址。至此,程序就跑去运行app程序咯。

我想大家也是觉得一篇文章全是字难受吧,还是贴几张图吧 - -

这里我选用了封装的IAP类图和主函数图。





APP程序

这个程序也就是我们需要实际执行的程序了。他与我们之前写的程序不同之处就在于:

1.需要偏移向量表

就是在程序开始加上一句 SCB->VTOR = 0x08000000 | 0x2800;来偏移向量表,当然还是的根据你的BootLoader来写,这里的0x2800就是我设置的APP程序rom区域的起始位置

2.需要有软件复位方法

APP程序当然需要一个能够更新程序的方法啦,这里使用软件复位,并且修改标志位来让BootLoader明白这次复位时为了更新程序的。

提供下STM32软件复位的代码 星号((u32 星号)0xE000ED0C) = 0x05fa0004;

3.需要修改ROM范围

由于前面都挤了一坨程序了,所以APP程序的ROM区域也就不一样的。贴张图吧:



这里还需要说下,我们需要的是一个bin文件,不是Hex文件,由于我们是直接指定了地址进行下载的,就不需要下载文件还附带地址了。额不懂可以搜索bin文件和Hex文件的区别,简单讲就是一个带了地址,一个没有。至于如何使用KEIL来生成bin文件了,当然你也可以去搜- -,我贴几个图讲讲吧





其实图片说得很清楚了,额。。这个图是我截取的别人的。就是使用了个keil里面的工具来生成。在Run右边的框里写的东西有点多,我就发个例子吧

C:\Other\keil5\ARM\ARMCC\bin\fromelf.exe –bin -o E:\study\stm32\procedure\IAP_example\APP\RTE\APP.bin E:\study\stm32\procedure\IAP_example\APP\Objects\App1.axf

额。。。真够长的,但这是绝对路径,你也可以写相对路径就没这么长

流程图



测试

1.首先下载BootLoader程序

2.打开串口调试助手,16进制发送FF 02 AA(由于我的APP程序大小小于两页)这是程序会返回please choose file….

3.这里选择bin文件发送过去。 程序将返回Data is written to complete…和loading APP….后执行新程序



我的APP程序就是不断发送。。。

4.对运行中的新程序发送FF AA,这时就会跳转到BootLoader程序。

相关下载

STM32代码下载

额,太穷了,收集点币,之后会提供GitHub连接的

上位机下载程序

这个是百度的连接。。。不要币 - -

视频

还没做,做了会发上来的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: