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.需要配置烧写时擦除的位置,如图:

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

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

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

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

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

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

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

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

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

#define VECT_TAB_OFFSET                  0x3000

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

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

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文件试试~。

以上整个过程结束。

Stm32 IAP程序编写及用户程序编写相关推荐

  1. KEIL设置程序起始地址无效解决方法,STM32 IAP程序起始地址

    关键词: KEIL设置程序起始地址无效解决方法 STM32 IAP设置程序起始地址 KEIL设置程序起始地址 MDK设置程序起始地址 KEIL设置ROM地址无效 碰到的问题:为了实现STM32升级固件 ...

  2. CRC校验原理及STM32 IAP在线升级程序

    CRC校验原理: 什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错功能,对数据 ...

  3. 安装jdk配置环境、cmd命令行测试环境变量配置是否正确及运行java程序、安装IDEA编写代码测试

    文章目录 1.安装jdk配置环境 2.cmd命令行测试环境变量配置是否正确及运行java程序 3.安装IDEA编写代码测试 1.安装jdk配置环境 首先打开官网Oracle https://www.o ...

  4. 程序详细设计之代码编写规范_我在不编写任何代码的情况下建立了一个设计策划网站

    程序详细设计之代码编写规范 It's been just over a month since MakeStuffUp.Info - my first solo project as an indep ...

  5. Java程序开发三步骤:编写、编译、运行

    1.Java语言跨平台原理 1.1Java虚拟机--JVM JVM(Java Virtual Machine ):Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的 运行 ...

  6. 提高python 程序运行速度_3个Python函数帮程序员们避免编写循环,提高运行速度...

    图源:wired 诞生于1991年的Python,这几年突然火了.简历上有了Python,就业竞争力瞬间提升,甚至一些小学教材上都出现了Python内容.这种语言的热度超过了以往任何时候. 作为21世 ...

  7. c语言编写数据存储的游戏,c语言经典小程序和c语言编写的小游戏带注释(自动保存的).doc...

    c语言经典小程序和c语言编写的小游戏带注释(自动保存的) 1.写一个定时?关机的小程?序,可以立即关?闭计算机,也可以一段?时间后关闭?计算机. #inclu?de #inclu?de #inclu? ...

  8. c语言中fact函数怎么调用,C语言程序题: 1、编写一个求n!的函数fact(n),要求fact函数分别用递归和非递归两种方法实现...

    点击查看C语言程序题: 1.编写一个求n!的函数fact(n),要求fact函数分别用递归和非递归两种方法实现具体信息 答:int fac(int n) //非递归{int f=1; for(;n;) ...

  9. 流量累计程序 博途v15编写的西门子流量累计程序

    流量累计程序 博途v15编写的西门子流量累计程序,封装好的FB块直接可以拿来用,并且配有视频解说,轻松学会 YID:3110640343500339

最新文章

  1. rocketmq中的消息拉取及并发消费理解
  2. aspose.cells html excel导出,C#使用Aspose.Cells导出Excel简单实现
  3. android选项菜单源代码,Android应用程序----UI界面控件(菜单menu)
  4. 微信又添新功能!这个微信群可以学英语,而且全程免费
  5. 最大熵图像复原方法原理(附完整代码)
  6. 如何用 Nginx 禁止国外 IP 访问网站?
  7. 深度学习非自回归语音合成与自回归语音合成对比
  8. 每周分享第 26 期
  9. 低代码开发平台的行业前景
  10. java8421码,8421BCD转余3码Verilog HDL的设计(2)
  11. 现在可以把小程序交给第三方开发或管理了
  12. Java中cvc是什么意思_什么叫自然拼读cvc组合- cvc和cvce单词的区别
  13. 精力管理--分享感悟
  14. hihoCoder#1082 : 然而沼跃鱼早就看穿了一切(做题总结)
  15. U盘识别不出来怎么办?
  16. Gartner:超级应用成为战略技术趋势,可以从中学习到什么
  17. 缩放比例 页面缩放 自适应布局(布局不变)vue
  18. 为gvim添加目录树
  19. 项目管理相关认证简要介绍(3)- 信息系统项目管理师
  20. secureCRT安装和使用教程【图文并茂】

热门文章

  1. Linux下一些实用的操作记录
  2. Java 洛谷 P1008 三连击
  3. android网络拦截,拦截所有app的网络请求
  4. itextpdf api帮助文档_我开源了一个小工具,可以帮你轻松生成 SpringBoot API 文档...
  5. android四大组件 简书,android四大组件
  6. java定义一个盒子类box_定义一个Box(盒子)类,在该类定义中包括数据成员: length(长),width(宽)和height(...
  7. php验证器的调用,ThinkPHP5 验证器的具体使用
  8. java 静态内部类 线程安全问题_单例模式的七种写法, 面试题:线程安全的单例模式...
  9. 工程打包是什么意思_承包工程是什么意思
  10. 刷新你的数据中心冷却词汇