STM32 IAP

来源:互联网 发布:广西网络教育 编辑:程序博客网 时间:2024/04/30 03:33

1IAP介绍

IAP即“in applicatin programming”在应用编程的缩写,指MCU可以在系统中获取新代码并对自己重新编程,即改变应用程序。它与我们所熟悉的ISP编程不同,STM32F103ISP编程接口为串口1,如果使用其他的串口或其他总线则不能对其进行编程。而我们这里所说的IAP通过下载一段引导程序Bootloader程序,如果我们想要从串口2或网口更新应用程序,在Bootloader中初始化相应的串口或网口,使其接收应用程序,将接收到的应用程序写入到Flash里面,IAP完成后跳转到应用程序入口执行应用程序。所以现在的IAP程序涉及到两个概念:Bootloader和应用程序。

BootloaderBootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。这里我们所说的Bootloader也是系统开机前的一段小程序,其主要任务是用来初始化串口和IAP端口(网口CAN接口等)的,通过判断状态是否需要从IAP端口进行更新应用程序,若需要更新则从端口接收应用程序,并存放到指定的Flash里面,更新完成后则跳入到指定的Flash里面执行应用程序。

应用程序:即我们需要开发板实现功能的程序,其中应用程序主要分为两种:hex文件和bin文件。在我们经常使用的KEIL中默认编译生成的可执行文件(应用程序)为hex格式的,若需要编译生成bin格式需要做如下修改,加入“D:\Keil\ARM\ARMCC\bin\fromelf.exe --bin --output ./Obj/Can_Updata.bin ./Obj/test.axf”,重新编译生成的Can_Updata.bin文件存放在Obj文件夹下。

 


2bin格式文件与hex格式文件的区别

bin格式文件是纯粹的二进制文件,使用下载其将其下载到开发板时其内容完全不变,所以对于IAP下载使用bin格式文件是比较方便的,如下图是bin文件的内容与写入到开发板后使用仿真器观察到Flash存放的内容(这段程序当然是可以执行的)。

 


 Hex格式文件:Hex全称(Intel HEX)文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。如下图是hex文件的部分数据,其组成由“:CCAAAARR...ZZ ”,CC=10代表长度为16字节,AAAA=0000本条记录中的数据在存储区中的起始地址,RR=00,数据区,ZZ=38为校验,这里就不做仔细说明了。

 

3stm32 IAP原理

stm32有多种启动方式,其中boot0=0boot1=x,是我们最常用的即从系统存储器启动,地址0x800 0000,如下图是stm32正常的启动流程图,stm32上电开机后进入0x800 0000开始执行程序,运行到复位中断0x800 0004后跳转应用程序入口0x800 0004+n后一直循环,当程序发生中断时,STM32的内部硬件机制亦会自动将PC指针定位到中断向量表处,并根据中断源取出对应的中断向量执行中断服务程序。具体启动说明可以参考http://www.amobbs.com/thread-5267466-1-1.html(出处: amoBBS阿莫电子论坛)

 

如下图是下载Bootloader程序后的执行流程,程序复位后进入0x8000004处取出复位中断向量的地址,并跳转执行复位中断服务程序,进入Boot程序段,在Boot程序中通过判断某个标志是否需要进行升级应用程序,若标志位置位则进行更新,在我们之后使用的标志中利用stm32的后备寄存器来判断是否进行更新,若更新完成或不需要更新则直接跳转到新的中断向量表的起始地址开始执行应用程序。当程序产生中断时,PC指针指向0x800 0004,随后跳转到新中断向量表的偏移地址并执行新的中断程序,执行完成后返回到应用程序。

 

 

0 0
原创粉丝点击