首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

关于 STM32 的 IAP 概念和应用笔记

关于 STM32 的 IAP 概念和应用笔记

关于 STM32 的 IAP 概念和应用笔记
STM32的ISP方式和IAP方式下载程序有什么区别

都可以通过串口来下载啊,(也可以通过USB来下载,敬请留意 IAP 之USB篇。)

ISP方式:需要将BOOT管脚配置成上电从System Memory启动,System Memory中有一段BOOTLOADER来接收串口来的数据,把它们烧写到FLASH中。

IAP方式:是用户自己写一段烧写程序,通过ISP或者仿真器事先烧写到用户FLASH中,使用时通过某种方式触发这段程序,再来从串口接收数据,然后烧到相应的FLASH中,不需要改变BOOT管脚配置。

ISP 就是 IAP 的一种特殊的应用。

这里给出两份周立功公司的基于 LPC ARM7 IAP 两份教程作为大家的学习资料参考:

IAP在应用中编程及其应用PPT.rar
(2008-12-11 13:02:18, Size: 307 KB, Downloads: 373)


IAP在应用中编程及其应用.pdf
(2008-12-11 13:02:18, Size: 544 KB, Downloads: 365)


IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。

通常在用户需要实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信管道(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。这两部分项目代码都同时烧录在User Flash中,当芯片上电后,首先是第一个项目代码开始运行,它作如下操作:

1)检查是否需要对第二部分代码进行更新
2)如果不需要更新则转到4)
3)执行更新操作
4)跳转到第二部分代码执行

第一部分代码必须通过其它手段,如JTAG或ISP烧入;第二部分代码可以使用第一部分代码IAP功能烧入,也可以和第一部分代码一道烧入,以后需要程序更新是再通过第一部分IAP代码更新。

对于STM32来说,因为它的中断向量表位于程序存储器的最低地址区,为了使第一部分代码能够正确地响应中断,通常会安排第一部分代码处于Flash的开始区域,而第二部分代码紧随其后。

在第二部分代码开始执行时,首先需要把CPU的中断向量表映像到自己的向量表,然后再执行其他的操作。

如果IAP程序被破坏,产品必须返厂才能重新烧写程序,这是很麻烦并且非常耗费时间和金钱的。针对这样的需求,STM32在对Flash区域实行读保护的同时,自动地对用户Flash区的开始4页设置为写保护,这样可以有效地保证IAP程序(第一部分代码)区域不会被意外地破坏。

ST的网站上有使用USART实现IAP的例子,各位可以参考这个例子和相应的手册。

应用笔记 AN2557 - STM32F10xxx in-application programming using the USART
例程:AN2557 - STM32F10xxx in-application programming using the USART

http://www.stmicroelectronics.com.cn/stonline/mcu/STM32_AN.htm


学习了概念之后,接下来我们需要做一些前期的准备工作,
(1)下载官方的例程:AN2557 - STM32F10xxx in-application programming using the USART
(2)下载豆皮的跑马灯的程序:WORM_LED.rar

      http://www.stmfans.com/bbs/viewthread.php?tid=1031&extra=page%3D1
(3)安装 ISP 程序:STM32ISP.rar
      http://www.stmfans.com/bbs/viewthread.php?tid=1178&extra=page%3D1
(4)安装 IAR5.20 和 IAR4.22 两个版本的软件。

这时我们的准备工作已经差不多了。


修改 Bootload 程序:

由于官方的例子中是基于官方的开发板的,其中使用的触发条件为上电检测一个按键。
用 IAR5.20 打开 AN2557 中的工程。

第一步:因为我们的豆皮上的MCU为STM32F103VBT6,因此选择工程STM3210B-EVAL。

第二步:我们需要把这个触发条件修改为豆皮上面的按键 SW4
             将 platform_config.h 中的       #define GPIO_PIN_KEY_BUTTON             GPIO_Pin_9
               修改为                            #define GPIO_PIN_KEY_BUTTON             GPIO_Pin_15

第三步:将 common.h中的                #define ApplicationAddress 0x8002000
                   修改为                             #define ApplicationAddress 0x8003000
         因为我们修改的程序接近于2000字节,稍微修改一下就可能超过2000,所以修改为3000作为bootload程序大小。
继承事业,薪火相传
返回列表