你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 IAP实现流程

[复制链接]
feixiang20 发布时间:2017-5-22 09:51
STM32 IAP 研究设计1. 概念
IAP:In-Application Programming”,中文解释为“在程序中编程”。ICP(In-Circuit Programming)技术即通过在线仿真器对单片机进行程序烧写,而ISP技术则是通过单片机内置的bootloader程序引导的烧写技术。
2. 框架设计
简要说明: 将STM32 的Flash 512Kb 分为两个部分,一个256Kb 用来存放最小系统,一个256Kb用来存放APP代码。具体最小系统与APP的Flash大小可根据实际情况调整。
难点解析:
最小系统与APP的存放地址
要找到最小系统与APP的存放地址,那么就需要了解STM32的Flash存储空间,如下:

最小系统与APP的跳转
系统启动之后首先进入最小系统,这是由硬件决定的,进入最小系统之后,再判断APP系统烧录的地址的栈顶指针是否正确来判断是否烧录了APP,启动APP。官方例程代码如下:
/* Test if user code is programmed starting from address "ApplicationAddress" */if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000){   /* Jump to user application */  JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);  Jump_To_Application = (pFunction) JumpAddress;  /* Initialize user application's Stack Pointer */  __set_MSP(*(__IO uint32_t*) ApplicationAddress);  Jump_To_Application();}
上面这个是第一种方法,还有第二种方法是:在将APP程序写入Flash后在Flash中写入相关信息,最小系统程序不断检测读取该信息,如读到该信息则写一个标志位到SRAM中,重启MCU,剩下的同样利用上面的代码,只不过判断条件改为SRAM中的标志位了。
启动顺序
关于启动顺序,网上有比较详细的说明
没有使用IAP的

使用IAP的

最小系统与APP的编译
最小系统的编译直接按照正常的工程编译就行,而APP的编译则需要特殊处理:keil中设置如下:

上面这个是针对程序的存放的Flash地址的,还需要对中断向量表进行重地位,可使用函数
void NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset);
在APP main函数中调用该函数设置偏移量,偏移量要等与程序 Flash相等的偏移量

收藏 评论1 发布时间:2017-5-22 09:51

举报

1个回答
衔胆栖冰 回答时间:2017-5-22 11:49:46
IAP:In-Application Programming”,中文解释为“在程序中编程”。-------我一直以为中文是“在应用编程”
楼主的方法不错。我一般直接flash的首地址,然后再把升级文件写到那去,写完reset。还有借用官方BootLoader的。

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版