# IAP **Repository Path**: OceanDylan/iap ## Basic Information - **Project Name**: IAP - **Description**: 适用于STM32、GD32等ARM Cortex-M 内核 MCU 的IAP升级程序 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2026-05-08 - **Last Updated**: 2026-05-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # IAP 在应用升级 本工程是一个适用于 ARM CortexM3/M4 内核 MCU 的IAP程序;可实现串口升级。 - 支持 Zmodem 协议进行升级。 - 移植裁剪 libzmodem 库的接收部分。 - 支持 Ymodem 协议进行升级。 - 可通过开关`USED_ZMODEM`和`USED_YMODEM`宏,裁剪 Zmodem 和 Ymodem 协议。 - 可以通过开关`SHOW_RDATA`宏,指定是否显示接收到的数据。 - 移植了 RT-Thread 的 shell,实现串口命令行功能。 - 执行 `help` 命令可查看所有支持的命令及其简短描述。 - 如果要实现上面功能,需添加 `FINSH_USING_DESCRIPTION`宏,反之只会列举命令。 - 执行 `cmd` 命令可执行命令cmd。 - 命令行功能可以通过取消`USED_FINSH`宏定义来关闭。 - 使用 rz 命令通过 Zmodem 协议下载程序,使用 rb 命令通过 Ymodem 协议下载程序。 - 在上电或者复位后1秒内,发送空格键,进入bootloader,反之启动APP。 - 进入bootloader后,使用rz/rb命令即可升级程序,需传入烧写地址(CortexM内核烧写地址即为程序入口地址),烧写成功后使用go命令即可跳转执行APP程序。 - 使用rz/rb命令时如果没有传入地址,则默认烧写到默认地址,默认为允许的最小app地址(即存放APP信息所在的FLASH页的下一页FLASH)。 - 上位机使用支持 Zmodem/Ymodem 传输的终端即可,如Xshell、MobaXterm、SecureCRT等。 **使用示意:** 以 Xshell 为例: 1. 配置好串口,并打开串口终端,波特率为 115200。 ![alt text](README_assets/image.png) ![alt text](README_assets/image-3.png) 2. 复位单片机,1秒内在 xshell 中输入空格,成功进入 bootloader 后,会显示如下信息: ![alt text](README_assets/image-4.png) 3. 右键->‘文件传输’->‘使用zmodem发送文件’或者‘使用ymodem发送文件’。还可以输入 rz 或者 rb 命令实现传输。 ![alt text](README_assets/image-5.png) 4. 选择更新的bin文件后确认。 ![alt text](README_assets/image-6.png) 5. 等待文件传输完成,文件传输完后会出现如下信息: ![alt text](README_assets/image-7.png) 如果出现类似`error: image enter point is less than 0x08005000`的错误,说明你指定的下载地址太小,需要大于等于0x08005000。 如果出现类似`error: image exceeds the flash boundary: 0x08010000`的错误,说明你下载的bin文件太大,超出了flash的边界0x08010000。 6. 文件传输完成后,输入 go 命令启动应用程序,或者复位单片机,再一秒内不输入空格,bootloader自动启动应用程序。 ![alt text](README_assets/image-8.png) 7. 上面的实例没有指定下载地址,使用默认的下载地址,我们也可以指定下载地址: ![alt text](README_assets/image-11.png) 使用 rz 会自动弹出文件选择对话框,选择要上传的文件,点击打开即可传输。输出信息如下: ![alt text](README_assets/image-10.png) 使用 rb 不会弹出文件选择对话框,需要右键菜单->‘文件传输’->‘使用ymodem发送文件’,然后选择下载的文件。 MobaXterm 貌似都不会弹出对话框,都需要右键选择文件。 **移植注意:** 1. flash.h中的`FLASH_PAGE_SIZE`为 flash 一页的大小,`FLASH_CAPACITY`保存了 flash 总大小,单位为KB。请根据具体情况修改。 2. 使用 USART1 作为升级串口,没有使用接收或发送中断,如果有需要请自行修改。 3. libzmodem 的 zporting 包含所有移植需要修改的函数。 4. libymodem 的 yporting 包含所有移植需要修改的函数。 > 致敬韦东山老师