需求
需要在 STM32 芯片上,使用 uart 接口,通过 ymodem 协议,进行 IAP 升级。
解决
想用 IAP 升级,芯片上的程序需要分为两个部分,bootloader 和 app. 上位机需要一个软件通过接口,把新版本的软件发送给芯片。
bootloader
bootloader 可以参考 STM32 提供的 IAP demo 进行修改。其中写 flash 的地方需要注意,不同芯片支持的写 flash 不一样,主要是支持的单次写入长度不一样,那么相关的写入次数等等都要跟着修改。
app
app 部分需要改动的比较少,主要是两个地方:
- link: 这里需要修改 flash 起始地址,需要和 bootloader 中最后跳转的地址一致。gcc 编译器在 ld 文件中修改。
- 中断向量:
VECT_TAB_OFFSET
也需要修改为新地址对应的偏移。
上位机
上位机软件最简单的就是使用 windows 自带的超级终端 hypertrm
. 当然也可以自己写一个支持 YMODEM
协议的软件。
参考
- 串口YMODEM实现IAP程序升级(附完整工程)
- STM32 + IAP + Ymodem完美结合
- YMODEM协议简介
- {Windows} 网工必备:超级终端中文版及3CDaemon汉化版
- STM32 IAP升级固件 + 上位机 例程
- STM32中断向量表的偏移量设置方法
- STM32单片机实现Bootloader跳转的关键步骤
- 【STM32+cubemx】0024 HAL库开发:IAP(在应用编程)的实现
- STM32 用cubemx移植IAP功能,实现串口升级
- STM32CubeIDE IAP原理讲解,及UART双APP交替升级IAP实现
- 【经验分享】STM32_IAP详解(有代码,有上位机)
- STM32 之八 在线升级(IAP)超详细图解 及 需要注意的问题解决