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

STM32 IAP实现流程

[复制链接]
feixiang20 发布时间:2017-5-22 09:51
STM32 IAP 研究设计1. 概念
! ~' b3 d+ v* cIAP:In-Application Programming”,中文解释为“在程序中编程”。ICP(In-Circuit Programming)技术即通过在线仿真器对单片机进行程序烧写,而ISP技术则是通过单片机内置的bootloader程序引导的烧写技术。9 ?7 t: @$ d4 \+ }* z
2. 框架设计
1 D3 g; V0 `! H0 E" O) T9 s  K2 W简要说明: 将STM32 的Flash 512Kb 分为两个部分,一个256Kb 用来存放最小系统,一个256Kb用来存放APP代码。具体最小系统与APP的Flash大小可根据实际情况调整。
+ f3 T2 a; [  I, J! H0 E难点解析:! o6 o4 b; d# ~' v; s
最小系统与APP的存放地址! P5 m9 K7 v- B% i
要找到最小系统与APP的存放地址,那么就需要了解STM32的Flash存储空间,如下:
7 V: O0 |7 k6 M3 \1 @# x
2 S3 |, \0 H/ I! f. N( ?; b+ B! a# t7 \最小系统与APP的跳转( B2 w# }2 `- o& C. l) n
系统启动之后首先进入最小系统,这是由硬件决定的,进入最小系统之后,再判断APP系统烧录的地址的栈顶指针是否正确来判断是否烧录了APP,启动APP。官方例程代码如下:6 J% q2 t% N+ ~  }2 @+ E: n
/* 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();}/ t8 E+ L1 ?1 m8 ?' r4 d5 P9 G
上面这个是第一种方法,还有第二种方法是:在将APP程序写入Flash后在Flash中写入相关信息,最小系统程序不断检测读取该信息,如读到该信息则写一个标志位到SRAM中,重启MCU,剩下的同样利用上面的代码,只不过判断条件改为SRAM中的标志位了。) Q" t) L: ^0 D3 K, Y; e' }( V
启动顺序 0 \% @' q- ^& V9 L( s
关于启动顺序,网上有比较详细的说明
( R1 d5 l0 l0 T7 o) T: u( }/ t没有使用IAP的
" P/ v7 H8 H0 S; j% {2 g# i+ q7 f6 Z
使用IAP的
4 I( ]% Y$ ^9 \" J; ^" l, }- ]
( N( P0 R  q9 C4 X最小系统与APP的编译
+ n5 {1 X' z: v最小系统的编译直接按照正常的工程编译就行,而APP的编译则需要特殊处理:keil中设置如下:
9 |. e7 Z( ]( l7 |2 M3 A) V5 N8 C: s' [' n- t8 D+ E9 T9 f" g, y0 p  G0 U
上面这个是针对程序的存放的Flash地址的,还需要对中断向量表进行重地位,可使用函数0 J- e; o- v+ `
void NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset);
8 T4 z; e1 e+ n2 Q/ n在APP main函数中调用该函数设置偏移量,偏移量要等与程序 Flash相等的偏移量% N& R( s! Y+ m/ F9 j8 R/ V
5 Y( Z/ y4 ]4 N* ~# P6 O% ~
赞 收藏 评论1 发布时间:2017-5-22 09:51

举报

1个回答
衔胆栖冰 回答时间:2017-5-22 11:49:46
IAP:In-Application Programming”,中文解释为“在程序中编程”。-------我一直以为中文是“在应用编程”3 l" N; A: u% ]8 h2 I9 K
楼主的方法不错。我一般直接flash的首地址,然后再把升级文件写到那去,写完reset。还有借用官方BootLoader的。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版