STM32支持在应用中编程,也就是所谓的IAP,这对产品的在线升级带来了很大方便。
在线升级的原理简介如下:
在单片机的FLASH中有两段代码,一段是IAP代码,另一段就是用户的应用程序即APP代码,IAP代码放在单片机复位时的起始地址,而APP代码则放在IAP后面的地址,上电时CPU首先执行IAP代码,再通过IAP代码跳转到APP代码开始执行。
在IAP代码执行期间,通过检测某一个事件(如IO电平)来判断是否对APP代码进行更新,如果该事件无效,则不更新,直接跳转到APP代码执行;如果该事件有效,则更新APP代码,而更新的文件则从外部磁盘通过串口或USB写入FALSH应用程序空间。
流程图如下:
当然,这只是一种最简单的方式,它还可以是当APP代码在执行时,将PC指针跳转到IAP来更新自已。
实现的大致原理都是一致的,只是方式不同罢了。
值得注意的是:
IAP跳转的地址必须APP的起始地址一致,相应的中断向量表也要修改,否则APP将不能正确的运行。
在附件我整理的代码中,串口方式的IAP跳转的地址为0x8002000,因此应用程序的起始地址也应为0x8002000,在KEIL设置下如下图:
还有中断向量表的起始地址也应改为0x8002000:
/* Set the Vector Table base address at 0x08002000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000); // NVIC_VectTab_FLASH=0x08000000
只有以上两处设置正确才能确保APP能正确的运行。
USB方式的IAP跳转的地址为0x8004000,设置方法同上。
升级文件传输方式
串口方式的IAP在超级终端下用Ymode协议,波特率115200;文件为.BIN格式。
USB方式的IAP用DfuSe USB Device Firmware Upgrade软件传送,文件为dfu格式。
总的来说,IAP带给我的体验还是非常愉快的!
程序和本文PDF
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2005-12-02 求购符合下列要求的多媒体开发套件: