历史上的今天
今天是:2025年03月06日(星期四)
2019年03月06日 | Stm32 IAP程序编写及用户程序编写
2019-03-06 来源:eefocus
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文件试试~。
以上整个过程结束。
史海拾趣
|
文章作者:gaosi 文章来源 移动3G网 www.Goes3G.com/(原文链接地址:http://www.goes3g.com/200510/01080627.html)记者昨天从有关渠道获悉,中国移动将在全网范围开通手机电视业务。但据移动内部人士透露,该业务的具体开通日期是在10 ...… 查看全部问答> |
|
2008波兰国际通讯信息技术和电子博览会 (INFOSYSTEM 2008) 【展会名称】2008波兰国际通讯信息技术和电子博览会 【展会时间】2008年6月9日至11日 【展会地点】波兰波兹南国际展览中心 【展出内容】 1. 电脑周边及软件: 2. 通信网络产品: ...… 查看全部问答> |
|
51AVR单片机学习板EE21可以做以下实验: 1、LED流水灯实验 2、LED渐亮渐灭实验 3、8位数码管静态显示 4、8位数码管动态显示 5、独位按键实验 6、矩阵键盘扫描实验 7、LCD1602字符显示 8 、LCD12864汉显 9、LCD12864显示图片 10 ...… 查看全部问答> |
|
小弟是做嵌入式方向的,由于不是计算机专业,数电模电基础没有。 所以硬件原理图看不懂,这会影响到职业发展,所请问这方面有经验的大侠, 要看懂硬件原理图,进而指导嵌入式方案选型、系统设计和驱动开发,需要哪些方面的知识,有没有哪些书推荐 ...… 查看全部问答> |
|
我自己配置了个OS 在导出了我自己的SDK 然后把我在EVC上写的程序下载进去怎么运行不了啊 说我缺少什么库 怎么回事啊 是不是我在配置的时候哦据没把MFC的支持选择上啊 ? … 查看全部问答> |
|
LM3S811用IIC的API十分方便,但一定注意顺序搞不好是搞不定的 对于IIC的读写一定要注意: 主机往IIC从模块里写或从IIC模块读出时一定要调下设地址函数, I2CMasterSlaveAddveset() 另外,尽量用中断,若不用中 ...… 查看全部问答> |




