基于STM32的IAP设计.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于STM32的IAP设计

Bootloader+3App TOC \o 1-3 \h \z \u HYPERLINK \l _Toc361670534 1 简介 PAGEREF _Toc361670534 \h 2 HYPERLINK \l _Toc361670535 2 Bootloader实现原理 PAGEREF _Toc361670535 \h 3 HYPERLINK \l _Toc361670536 3 APP实现与配置 PAGEREF _Toc361670536 \h 6 HYPERLINK \l _Toc361670537 3.1 APP1程序起始地址设置方法 PAGEREF _Toc361670537 \h 6 HYPERLINK \l _Toc361670538 3.2 中断向量表的偏移量设置 PAGEREF _Toc361670538 \h 7 HYPERLINK \l _Toc361670539 3.3 *bin文件生成 PAGEREF _Toc361670539 \h 7 HYPERLINK \l _Toc361670540 3.4 步骤总结 PAGEREF _Toc361670540 \h 8 HYPERLINK \l _Toc361670541 4 关键点 PAGEREF _Toc361670541 \h 9 HYPERLINK \l _Toc361670542 附件: PAGEREF _Toc361670542 \h 10 1 简介IAP(In Application Programming)即在应用编程,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。通常实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信方式(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。这两部分项目代码都同时烧录在User Flash中,当芯片上电后,首先是第一个项目代码开始运行,它作如下操作:1)检查是否需要对第二部分代码进行更新2)如果不需要更新则转到4)3)执行更新操作4)跳转到第二部分代码执行第一部分代码必须通过其它手段,如JTAG或ISP烧入;第二部分代码可以使用第一部分代码IAP功能烧入,也可以和第一部分代码一起烧入,以后需要程序更新是再通过第一部分IAP代码更新。 我们将第一个项目代码称之为Bootloader程序,第二个项目代码称之为APP程序,他们存放在STM32 FLASH的不同地址范围,一般从最低地址区开始存放Bootloader,紧跟其后的就是APP程序(注意,如果FLASH容量足够,是可以设计很多APP程序的,本章我们讨论3个APP程序的情况)。这样我们就是要实现4个程序:Bootloader和3个APP。 2 Bootloader实现原理我们先来看看STM32正常的程序运行流程,如图2.1所示:图2.1 STM32正常运行流程图STM32的内部闪存(FLASH)地址起始于0一般情况下,程序文件就从此地址开始写入。此外STM32是基于Cortex-M3内核的微控制器,其内部通过一张“中断向量表”来响应中断,程序启动后,将首先从“中断向量表”取出复位中断向量执行复位中断程序完成启动,而这张“中断向量表”的起始地址是0当中断来临,STM32的内部硬件机制亦会自动将PC指针定位到“中断向量表”处,并根据中断源取出对应的中断向量执行中断服务程序。在图2.1中,STM32在复位后,先从0址取出复位中断向量的地址,并跳转到复位中断服务程序,如图标号①所示;在复位中断服务程序执行完之后,会跳转到我们的main函数,如图标号②所示;而我们的main函数一般都是一个死循环,在main函数执行过程中,如果收到中断请求(发生重中断),此时STM32强制将PC指针指回中断向量表处,如图标号③所示;然后,根据中断源进入相应的中断服务程序,如图标号④所示;在执行完中断服务程序以后,程序再次返回main函数执行,如图标号⑤所示。当加入IAP程序之后,程序运行流程如图2.2所示: 图2.2 加入IAP之后程序运行流程图在图2.2所示流程中,STM32复位后,还是从0址取出复位中断向量的地址,并跳转到复位中断服务程序,在运行完复位中断服务程序之后跳转到IAP的main函数,如图标号①所示,此部分同图2.1一样;在执行完IAP以后(即将新的APP代码写入STM32的FLASH,灰底部分。新程序的复位中断向

文档评论(0)

youshen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档