没有合适的资源?快使用搜索试试~ 我知道了~
基于STM32的IAP(InApplicationProgramming)设计
5星 · 超过95%的资源 需积分: 25 26 下载量 94 浏览量
2016-02-26
13:29:34
上传
评论 1
收藏 565KB PDF 举报
温馨提示
试读
12页
IAP即在应用编程,IAP是用户自己的程 序在运行过程中对UserFlash的部分区域进行烧写,目的是为了在产品发布后 可以方便地通过预留的通信口对产品中的固件程序进行更新升级。该文档对基于STM32的IAP设计介绍的非常详细。
资源推荐
资源详情
资源评论
Bootloader+3App
Bootloader+3App
Bootloader+3App
Bootloader+3App
1 简介
......................................................................................................................
2
2 Bootloader 实现原理
............................................................................................
3
3 APP 实现与配置
...................................................................................................
6
3.1 APP1 程序起始地址设置方法
....................................................................
6
3.2 中断向量表的偏移量设置
.........................................................................
7
3.3 *bin 文件生成
...........................................................................................
7
3.4 步骤总结
...................................................................................................
8
4 关键点
..................................................................................................................
9
附件:
...................................................................................................................
10
1
1
1
1 简介
IAP ( In Application Programming )即在应用编程, IAP 是用户自己的程
序在运行过程中对 User Flash 的部分区域进行烧写,目的是为了在产品发布后
可以方便地通过预留的通信口对产品中的固件程序进行更新升级。通常实 现
IAP 功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编
写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通
信方式 ( 如 USB 、 USART) 接收程序或数据,执行对第二部分代码的更新;第二
个项目代码才是真正的功能代码。这两部分项目代码都同时烧录在
User Flas h
中,当芯片上电后,首先是第一个项目代码开始运行,它作如下操作:
1 )检查是否需要对第二部分代码进行更新
2 )如果不需要更新则转到 4 )
3 )执行更新操作
4 )跳转到第二部分代码执行
第一部分代码必须通过其它手段,如 JTAG 或 ISP 烧入;第二部分代码
可以使用第一部分代码 IAP 功能烧入,也可以和第一部分代码一起烧入,以后
需要程序更新是再通过第一部分 IAP 代码更新。
我们将第一个项目代码称之为 Bootloader 程序,第二个项目代码称之 为
APP
程序,他们存放在
STM32 FLASH
的不同地址范围,一般从最低地址区开
始存放 Bootloader ,紧跟其后的就是 APP 程序(注意,如果 FLASH 容量足够,
是可以设计很多 APP 程序的,本章我们讨论 3 个 APP 程序的情况)。这样我们
就是要实现 4 个程序: Bootloader 和 3 个 APP 。
2
2
2
2 Bootloader
Bootloader
Bootloader
Bootloader 实现原理
我们先来看看 STM32 正常的程序运行流程,如图 2 .1 所示:
图 2.1 STM32 正常运行流程图
STM32 的内部闪存( FLASH )地址起始于 0x08000000 ,一般情况下,
程序文件就从此地址开始写入。此外 STM32 是基于 Cortex-M3 内核的微控制
器,其内部通过一张 “ 中断向量表 ” 来响应中断,程序启动后,将首先从 “ 中
断向量表 ” 取出复位中断向量执行复位中断程序完成启动,而这张 “ 中断向量
表 ” 的起始地址是 0x08000004 ,当中断来临, STM32 的内部硬件机制亦会自
动将 PC 指针定位到 “ 中断向量表 ” 处,并根据中断源取出对应的中断向量执
行中断服务程序。
在图 2 .1 中, STM32 在复位后,先从 0X08000004 地址取出复位中断向
量的地址,并跳转到复位中断服务程序,如图标号 ① 所示;在复位中断服务程
序执行完之后,会跳转到我们的 main 函数,如图标号 ② 所示;而我们的 mai
n
闪存物理地址
栈顶地址
复位中断向量
(
中断向量表起始地址
)
Reset
_
Handler
非可屏蔽中断向量
NMIEeception
硬件错误中断向量
HardFaultException
复位中断程序入口
Reset
_
Handler
(
void
)
…
硬件错误中断程序入口
HardFaultException
(
void
)
…
…
…
xxx
中断程序入口
xxx
_
Handler
(
void
)
…
…
main
函数入口
int main
(
void
)
0 X
08000000
0 X
08000004
0 X
08000004
+ n
0 X
08000004
+ N
递 增
①
②
main
函数
死循环
③
④
⑤
中断请求
剩余11页未读,继续阅读
资源评论
- 白话物联网2017-10-09参考一下 谢谢分享
pegasusliuyong
- 粉丝: 4208
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功