
IAP是什么?
IAP是应用程序设计中的缩写。IAP是用户自己的程序在运行过程中编写的用户Flash的一部分,目的是在产品发布后,通过预留的通信端口方便地更新升级产品中的固件程序。在重新编程过程中,可以使用任何类型的通信协议,如UART、I2S、SPI等。本笔记使用UART模式共享IAP。
串口的IAP实验
先说流程(本实验以STM32F103ZET6为例)1、实验表明我们需要准备两个keil项目来做这个实验,一个项目用来写IAP程序,另一个项目用来写我们的应用程序(实现某些功能的程序)。这里我们以一个照明程序为例。最后,两个项目编译的可执行文件需要烧录到芯片的FLASH中。只需要烧到不同的地址。简单原理图如下:这里使用的STM32型号为STM32F103ZET6,其FLASH大小为512KB,0x08000000是其FLASH映射的地址,这是程序烧录的地址。这里,我们的IAP程序就写到这个地址。根据IAP程序的大小,我们可以在keil中设置合适的IAP结束地址。
注意:在没有IAP程序的情况下,地址0x08000000是应用程序烧录的地址。
2、工程描述本次实验使用的两个项目可以通过文末的方式获取,其中IAP项目移植到ST官方套路。下面简单介绍两个项目:(1)我们需要在target选项卡中设置我们IAP程序的起始地址和大小。比如我们IAP程序的起始地址设置为0x08000000,大小设置为0x3000,即IAP可用的FLASH空间为12KB。IAP占用的空间可以根据IAP的实际大小进行修改。(2)我们需要修改我们需要跳转到的应用程序的地址(也就是IAP程序的结束地址):LED项目:(1)我们需要在target页签中设置我们LED程序的起始地址和大小,比如我们LED程序的起始地址设置为0x08003000,大小设置为0x10000,也就是LED可以使用的FLASH空间是64KB。可以根据LED应用的实际大小来修改结束地址。生成相应的。bin文件。这就需要在用户选项卡中添加以下命令(即编译后执行的命令):fromelf.exe是我们keil安装目录中的可执行程序,可以转换。axf文件放入。bin文件。要在keil中直接调用fromelf命令,必须将fromelf.exe所在的目录添加到环境变量中。添加环境变量的方法如下(此方法来自《【野火】零死角玩转STM32—F429挑战者V2.pdf》):本文以Win7系统为例,将工具链的路径添加到PATH环境变量中,其他系统类似。(1)右键单击计算机系统的计算机图标,在弹出菜单中选择属性,如下图所示。(2)在弹出的属性页中点击高级系统设置-环境变量,在用户变量列中找到一个名为PATH的变量。如果没有这样的变量,创建一个新的。编辑PATH变量,在其变量值中输入刀具链的路径,例如,它是;D:workkeil5ARMARMCCin,注意用分号;与其他路径分开,输入后依次点击确定,如图:(3)打开Windows的命令行,点击系统的开始菜单,在搜索框中输入cmd,在搜索结果中点击cmd.exe打开命令行,如图:(4)在弹出的命令行窗口中输入fromelf enter,如果窗口中打印出formelf的帮助描述,则路径正常,可以开始后续工作;如果提示不是内部名称,不是外部命令,不是可运行程序…信息,说明路径错误,请重新配置环境变量,确认工作目录下有编译工具链。这个过程的本质是让命令行通过“路径”路径找到fromelf.exe程序运行。学会配置fromelf.exe,学会配置MinGW。MinGW是一个工具集,包括用于编译C和C的gcc和G,有了它,可以在Windows命令行下编译C程序。相关注意事项:使用记事本开发C程序3、IAP源码描述(1)主要功能:
int main(void){ FLASH _ Unlock();KEY _ Init();IAP _ Init();*按键进入主菜单启动更新程序(注:同时按reset键触发程序更新)*/if(GPIO _ readinputdatabit(gpioe,GPIO _ Pin _ 2)==0x 00){ serial putstring('===================================================================================================);SerialPutString('=(C)版权所有2010意法半导体=');serial putstring('==');SerialPutString('=应用程序内编程应用程序(3.3.0版)=);serial putstring('==');serial putstring('=By MCD Application Team=');SerialPutString('===================================================');SerialPutString(“”);Main_Menu()。}else {if ((* (_ _ iount32 _ t *)应用程序地址)开始编程。0x2FFE0000 )==0x20000000) { Jump address=*(_ _ IO uint 32 _ t *)(application address 4);jump _ To _ Application=(p function)jump address;_ _ set _ MSP(*(_ _ IO uint 32 _ t *)application address);跳转到应用程序();} } while (1){}返回0;}可以看到,我们可以在复位的同时按下PE2对应的键来触发应用程序更新操作,或者跳转到应用程序的起始地址来执行应用程序(断点重启也是默认的应用程序执行),这里的ApplicationAddress就是上面设置的0x08003000。(2)主菜单功能Main_Menu是IAP程序的功能。根据打印的信息可以得知,IAP有三个功能(在键盘上输入数字1、2、3进行选择):一是下载程序(computer-STM 32);二是上传程序(STM32-电脑);三是执行新程序(即刚下载的程序)。(3)下载程序函数SerialDownload首先,主机使用Ymodem协议发送数据,STM32根据协议解析数据得到有用的数据,并将这些数据写入FLASH对应的地址,即ApplicationAddress。这里不讨论Ymodem协议和SerialDownload函数。4、下载验证(1)下载IAP程序可以使用J-link或串口ISP等调试器下载。我们选择一个串口ISP下载,借用的工具是FlyMcu: the。十六进制文件在这里下载。如果。bin文件下载,会提示以下错误:程序文件不是0x8000000和0x20000000区域的ISP模式。即选择系统内存作为启动区:点击开始编程按钮后,需要按下板上的复位按钮来下载程序。(2)通过IAP程序下载LED程序。上面说的下载程序使用的是Ymodem协议,所以你得选择Ymodem协议传输方式的上位机软件将应用程序下载到板卡上。您可以选择SecureCRT或超级终端。这里选择超级终端:首先按数字键1触发下载操作,此时会连续打印CCCCC。然后单击传输-发送文件,并选择。bin文件和Ymodem协议下载。下载完成后,按数字3执行新下载的应用程序:最后,LED闪烁,灯光工程成功。该照明程序在断电和重启后默认执行。如果要下载新程序,在复位的同时(需要一定的手速)按下PE2对应的按钮,触发更新程序操作。审计彭静









