Stm32 IAP程序编写及用户程序编写
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程序编写及用户程序编写相关推荐
- KEIL设置程序起始地址无效解决方法,STM32 IAP程序起始地址
关键词: KEIL设置程序起始地址无效解决方法 STM32 IAP设置程序起始地址 KEIL设置程序起始地址 MDK设置程序起始地址 KEIL设置ROM地址无效 碰到的问题:为了实现STM32升级固件 ...
- CRC校验原理及STM32 IAP在线升级程序
CRC校验原理: 什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错功能,对数据 ...
- 安装jdk配置环境、cmd命令行测试环境变量配置是否正确及运行java程序、安装IDEA编写代码测试
文章目录 1.安装jdk配置环境 2.cmd命令行测试环境变量配置是否正确及运行java程序 3.安装IDEA编写代码测试 1.安装jdk配置环境 首先打开官网Oracle https://www.o ...
- 程序详细设计之代码编写规范_我在不编写任何代码的情况下建立了一个设计策划网站
程序详细设计之代码编写规范 It's been just over a month since MakeStuffUp.Info - my first solo project as an indep ...
- Java程序开发三步骤:编写、编译、运行
1.Java语言跨平台原理 1.1Java虚拟机--JVM JVM(Java Virtual Machine ):Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的 运行 ...
- 提高python 程序运行速度_3个Python函数帮程序员们避免编写循环,提高运行速度...
图源:wired 诞生于1991年的Python,这几年突然火了.简历上有了Python,就业竞争力瞬间提升,甚至一些小学教材上都出现了Python内容.这种语言的热度超过了以往任何时候. 作为21世 ...
- c语言编写数据存储的游戏,c语言经典小程序和c语言编写的小游戏带注释(自动保存的).doc...
c语言经典小程序和c语言编写的小游戏带注释(自动保存的) 1.写一个定时?关机的小程?序,可以立即关?闭计算机,也可以一段?时间后关闭?计算机. #inclu?de #inclu?de #inclu? ...
- c语言中fact函数怎么调用,C语言程序题: 1、编写一个求n!的函数fact(n),要求fact函数分别用递归和非递归两种方法实现...
点击查看C语言程序题: 1.编写一个求n!的函数fact(n),要求fact函数分别用递归和非递归两种方法实现具体信息 答:int fac(int n) //非递归{int f=1; for(;n;) ...
- 流量累计程序 博途v15编写的西门子流量累计程序
流量累计程序 博途v15编写的西门子流量累计程序,封装好的FB块直接可以拿来用,并且配有视频解说,轻松学会 YID:3110640343500339
最新文章
- rocketmq中的消息拉取及并发消费理解
- aspose.cells html excel导出,C#使用Aspose.Cells导出Excel简单实现
- android选项菜单源代码,Android应用程序----UI界面控件(菜单menu)
- 微信又添新功能!这个微信群可以学英语,而且全程免费
- 最大熵图像复原方法原理(附完整代码)
- 如何用 Nginx 禁止国外 IP 访问网站?
- 深度学习非自回归语音合成与自回归语音合成对比
- 每周分享第 26 期
- 低代码开发平台的行业前景
- java8421码,8421BCD转余3码Verilog HDL的设计(2)
- 现在可以把小程序交给第三方开发或管理了
- Java中cvc是什么意思_什么叫自然拼读cvc组合- cvc和cvce单词的区别
- 精力管理--分享感悟
- hihoCoder#1082 : 然而沼跃鱼早就看穿了一切(做题总结)
- U盘识别不出来怎么办?
- Gartner:超级应用成为战略技术趋势,可以从中学习到什么
- 缩放比例 页面缩放 自适应布局(布局不变)vue
- 为gvim添加目录树
- 项目管理相关认证简要介绍(3)- 信息系统项目管理师
- secureCRT安装和使用教程【图文并茂】
热门文章
- Linux下一些实用的操作记录
- Java 洛谷 P1008 三连击
- android网络拦截,拦截所有app的网络请求
- itextpdf api帮助文档_我开源了一个小工具,可以帮你轻松生成 SpringBoot API 文档...
- android四大组件 简书,android四大组件
- java定义一个盒子类box_定义一个Box(盒子)类,在该类定义中包括数据成员: length(长),width(宽)和height(...
- php验证器的调用,ThinkPHP5 验证器的具体使用
- java 静态内部类 线程安全问题_单例模式的七种写法, 面试题:线程安全的单例模式...
- 工程打包是什么意思_承包工程是什么意思
- 刷新你的数据中心冷却词汇