STM32开发板入门教程(十七) - IAP 之串口篇

豆皮

 

- STM32

开发板入门教程(十七)

 

-   

IAP 

之串口篇

 

(原创)

 

 

 

版权所有

 

STMFANS 

原创,转载请保留出处

 

http://www.stmfans.com/bbs/viewthread.php?tid=1446&extra=page%3D1

 

 

关于

 

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

程序大小。

 

 

第四步:修改自己的公司版权信息

 

SerialPutString("\r\n**************************Copyright (c)*******************************"); 

SerialPutString("\r\n* 

   

   

   

   

   

   

 

 

 

 

 

 

 

 

 

   

   

   

   

   

   

    

*"); 

SerialPutString("\r\n* 

   

   

   

   

   

   

   

   

   

stmfans 

论坛

 

   

   

   

   

   

   

   

   

   

   

   

    

*"); 

SerialPutString("\r\n* 

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

*"); 

SerialPutString("\r\n* In-Application Programming Application   

(Version 1

00)   

*"); 

SerialPutString("\r\n* 

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

*"); 

 

SerialPutString("\r\n* 

   

   

   

    

QQ 

: 65081316   

StmFans

思蜕盟

 

1

 

   

   

   

   

*"); 

 

SerialPutString("\r\n* 

   

   

   

    

QQ 

: 68584951   

StmFans

思蜕盟

 

2

 

   

   

   

   

*"); 

SerialPutString("\r\n* 

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

*"); 

 

   

SerialPutString("\r\n* 

   

   

   

   

   

http://www.stmfans.com/bbs/

 

   

   

   

   

   

   

   

   

*"); 

SerialPutString("\r\n* 

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

*"); 

SerialPutString("\r\n************************************************************************"); 

SerialPutString("\r\n\r\n"); 

   

   

   

 

 

第五步:如果你使用仿真器下载程序,那么需要把

 

stm32f10x_config.h 

中的

 

DEBUG 

打开。

 

/* #define DEBUG 1*/ 

#ifndef DEBUG 

#define DEBUG 1 

#endif 

如果你使用

 

ISP 

下载

 

bootload 

程序这一步可以不做。

 

 

第六步:配置生成

   

hex 

文件,如下图所示:

 

 

IAP3.jpg

 

 

 

第七步:编译工程文件:

 

   

 

\IAP_AN\project\EWARMv5\STM3210B-EVAL\Exe 

文件夹下取得

 

STM32F10x_IAP.hex 

文件。

 

 

经过如上七部,我们

 

IAP Bootload 

部分做好了。

 

 

修改应用程序:

 

 

 

IAR 4.22 

打开跑马灯程序,

WORM_LED 

工程。

 

先将

 

stm32f10x_nvic.h 

  

lnkarm_flash.xcl 

的只读属性去掉。

 

 

第一步:将

 

main.c 

中的

   

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

 

   

   

   

修改为

 

   

   

   

   

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x3000);

 

 

第二步:将

 

stm32f10x_nvic.h 

中的

 

#define 

NVIC_VectTab_FLASH 

   

   

    

((u32)0x08000000) 

 

   

   

   

修改为

 

   

   

   

   

   

   

   

   

   

#define 

NVIC_VectTab_FLASH 

   

   

    

((u32)0x08003000)

 

 

第三步:将

 

lnkarm_flash.xcl 

中的

 

-DROMSTART=0x8000000

 

   

   

   

修改为

 

   

   

   

   

   

   

   

   

   

-DROMSTART=0x8003000 

   

   

   

   

 

 

第四步:如图配置出

 

LED.bin 

文件

 

 

IAP1.jpg

 

 

 

第五步:如图配置

 

LIST 

文件

 


你可能感兴趣的:(STM32,IAP,串口,stm32)