Stm32 IAP程序编写及用户程序编写

Stm32 IAP程序编写及用户程序编写

  (2016-03-02 23:55:09)

标签: 

stm32

 

bootloader

 

iap

 

userapplication

 

固件升级

分类: 技术文档

Stm32f10x系列MCU Bootloader 流程

芯片:stm32f103ze

所需软件:SecureCRT (用于使用Ymode协议发送Application文件),其实应该我们自己写个上位机,这里借助SecureCRT来充当我们自己写的应用程序(用于验证Bootloader是否成功)。

keil版本:μVision V5.11.0.0

用途:使用通信接口用于软件的更新(免去拆机繁琐的流程)。

BootLoader其实看上去挺复杂的样子,但也还好~仔细查找网上的资料都

有很多介绍,以下为自己做bootloader的过程以及应注意的事项,帮助

大家少走弯路~

请先下载我上传的资源: 

http://download.csdn.net/detail/jimoxiaosage/9451290

首先确定自己要做个串口能更新固件的程序出来~,听说名字叫Bootloader,网上也是挺多资料,网上资料找了找,看了看基本了解其流程:

在程序起始位置(0x0800 0000)写Bootloader程序,在另一个偏移位置写应用程序(比如0x0800 3000,那么bootloader 的程序空间就只能被限定为0x3000大小,超出了就不行咯)。在Bootloader程序中通过检测标志位(按键按下,或是Flash中的数据等等)来判断是否进行更新。(此处的更新指的是更新用户应用程序区域,即0x0800 3000 之后的flash 数据)通过串口,使用Ymodem协议将要更新的镜像--xxx.bin烧写入Flash,烧写完成后程序跳转到应用程序(0x0800 3000 ),固件更新完成。

BootLoader工程Stm32官网上有,当然也可以使用我的(有简单修改过):

在这个工程中需要注意的地方:

1.用户程序起始地址:#define ApplicationAddress    0x8003000 。(该地址需要与另一个工程-用户应用程序的起始地址一样,具体看后面)。

2.需要配置烧写时擦除的位置,如图:

Stm32 <wbr>IAP程序编写及用户程序编写
 

3.默认程序地址就是0x8000 0000 ,大小需要修改为0x3000,如下图:

Stm32 <wbr>IAP程序编写及用户程序编写
 

4.注意串口是否可用,该工程串口引脚PA9,PA10,特别注意时钟是否配置正确(主频72M)否则会出现乱码~~~。

5.附带我修改过的程序流程图,按键就是PA0,

Stm32 <wbr>IAP程序编写及用户程序编写
 

//----------------------------------- 以上 BootLoader 做好了-----------------------------------

下面就需要写个应用程序来验证该BootLoader~~

如下是我的工程需要注意的地方:

1.修改keil配置,将起始地址修改为 0x0800 3000,大小根据自己的flash大小来设定,如图:

Stm32 <wbr>IAP程序编写及用户程序编写
 

2.同样要擦除的Flash区域也要勾选下(不然debug时会把本来写进去的Bootloader擦掉了~)如图:

Stm32 <wbr>IAP程序编写及用户程序编写
 

3.由于我们将程序起始地址改成了0x0800 3000,复位时其实仍然是从0x0800 0000开始跑的~所以要在main函数最前面加:NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x3000); 同时,还需要修改如下定义的值:

#define VECT_TAB_OFFSET                  0x3000

改值原本为0,修改为偏移量。

4.使用keil自带的fromelf 来输出***.bin文件~,这部分网上找的挺多都不能用的,可能跟keil软件版本有关吧,详细问题还是查看keil帮助文档会比较清楚,以下贴上我的设置:

Stm32 <wbr>IAP程序编写及用户程序编写
 

fromelf --bin --output=1s.bin ..\OutPut\Stm32f103Templete.axf

,这样编译完成就会出现一个1s.bin的文件咯~

简单看下我的main函数~实际就是个闪灯的程序~(可以把时间修改为500ms,再生成一个500ms.bin文件来验证我们的Bootloader)

//-------------------------------- 以上为用户应用程序部分------------------------------

以上步骤结束后我们会有:

1.Stm3210xIAP   (Bootloader)

2.Stm3210xIapApplication (user application)

3.1s.bin   500ms.bin

4.SecureCRT软件

首先先把1的工程编译,烧到芯片中~,接下来把2的工程编译烧到芯片中~此时如果PA2接个LED灯会看到灯交替闪烁。

接着打开SecureCRT软件,设置好相应波特率,打开串口~,

接着PA0接到地(模拟一个按键按下)再将开发板上电,此时就会进入固件升级,打印相关信息~此时芯片等待Ymodem协议发送文件过来,使用secureCRT软件,send Ymodem,选中我们所需要更新的文件如:1s.bin,烧写完成后会发现LED灯变成每1s交替闪烁了。

可以重复以上过程烧写500ms.bin文件试试~。

以上整个过程结束。

分享:

猜你喜欢

转载自blog.csdn.net/geggegeda/article/details/109173861