IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User 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官方例程。下面对两个工程进行大略的解释
IAP工程:
(1)须要在target选项卡里设置我们IAP程序的起始地址与大小,如:
这里我们的IAP程序起始地址设为0x08000000,大小设为0x3000,即IAP所能用的FLASH空间为12KB。个中IAP所能占的占空间的大小可根据IAP的实际大小进行修正。
(2)须要修处死式中我们须要跳转到的运用程序的地址(即IAP程序的结束地址):
LED工程:
(1)须要在target选项卡里设置我们LED程序的起始地址与大小,如:
这里我们的LED程序起地址设为0x08003000,大小设为0x10000,即LED所能用的FLASH空间为64KB。个中结束地址可根据LED运用程序的实际大小进行修正。
(2)天生对应的.bin文件。这须要在User选项卡里添加如下命令(即编译后实行的命令):
个中,fromelf.exe是我们keil安装目录下的一个可实行程序,可以把.axf文件转换成.bin文件。要在keil中直接调用fromelf命令,必须要把fromelf.exe所在目录添加到环境变量中。添加环境变量的方法如下(该方法来自于《【野火】零去世角玩转STM32—F429寻衅者V2.pdf》):
本文以 Win7 系统为例添加工具链的路径到 PATH 环境变量,其它系统是类似的。
(1) 右键电脑系统的打算机图标,在弹出的菜单中选择属性 ,如图:
(2) 在弹出的属性页面依次点击高等系统设置 ->环境变量,在用户变量一栏中找到名为PATH的变量,若没有该变量,则新建一个。编辑PATH变量,在它的变量值中输入工具链的路径,如本机的是;D:\work\keil5\ARM\ARMCC\bin,把稳要利用分号;让它与其它路径分别隔,输入完毕后依次点确定,如图:
(3) 打开 Windows 的命令行,点击系统的开始菜单,在搜索框输入cmd,在搜索结果中点击cmd.exe即可打开命令行, 如图:
(4) 在弹出的命令行窗口中输入fromelf回车,若窗口打印出 formelf 的帮助解释,那么路径正常,就可以开始后面的事情了;若提示不是内部名外部命令,也不是可运行的程序…信息,解释路径不对,请重新配置环境变量,并确认该事情目录下有编译工具链。
这个过程实质便是让命令行通过“PATH”路径找到fromelf.exe程序运行 。
学会配置fromelf.exe,也就学会配置了MinGW。MinGW是一个工具集,包含编译C与C++的gcc、g++,利用它就可以在Windows命令行下编译C程序。干系条记:
3、IAP源码解释
(1)主函数:
可见,我们按下复位的同时按下PE2对应的按键即可触发运用程序更新操作,否则跳转到运用程序的起始地址实行运用程序(断点重启也是默认实行运用程序),这里的ApplicationAddress便是我们上面设置的0x08003000。
(2)主菜单函数Main_Menu
这个函数里便是该IAP程序的功能,根据个中的打印信息:
可以知道,该IAP有三个功能(分别输入键盘上的数字1、2、3进行选择):一是下载程序(电脑->STM32);二是上传程序(STM32->电脑);三是实行新程序(即刚下载完成的程序)。
(3)下载程序功能函数SerialDownload
首先,上位机利用Ymodem协议进行数据下发,STM32根据协议解析数据,拿到有用的数据,并把这些数据写入FLASH对应的地址中,即ApplicationAddress。关于Ymodem协议及SerialDownload函数这里不展开谈论。
4、下载验证
(1)下载IAP程序
可以利用J-link等调试器进行下载,也可用串口ISP进行下载,我们选用的是串口ISP进行下载,借用的工具是FlyMcu:
这里下载的是.hex文件,如果下载.bin文件,则会提示如下缺点:
程序文件不是0x8000000和0x20000000区域的
利用ISP办法下载须要进行的硬件操作是:BOOT0引脚拉高,BOOT1引脚接地。即系统存储器当选为启动区域:
在点击开始编程按钮后,须要按下板子上的复位键,即可下载程序。
(2)通过IAP程序勾引下载LED程序
上面提到下载程序利用的是Ymodem协议,以是得选用带有Ymodem协议传输办法的上位机软件来把运用程序下载到板子里。可以选用SecureCRT,也可以选用超级终端。这里选用的是超级终端:
首先按下数字键1触发下载程序操作,此时会不断打印CCCCC...。然后点传送->发送文件,选择要下载的.bin文件及Ymodem协议。下载完成后按下数字3即可实行新下载得运用程序:
终于,LED闪烁起来了,点灯项目成功~。断电重启之后默认实行的是这个点灯程序,要想下载新的程序,按下复位的同时按下PE2所对应的按键(须要一定的手速,哈哈)即可触发更新程序操作。










