历史上的今天
今天是:2024年09月08日(星期日)
2018年09月08日 | STM32 IAP实现流程
2018-09-08 来源:eefocus
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相等的偏移量
史海拾趣
|
单片机测控系统中的抗干扰技术 (转载!) 摘 要:本文针对单片机测控系统中的干扰因素,并结合实际应用系统给出了采取软、硬件两种方法抗干扰的具体措施。 关键词:单片机测控系统抗干扰? 概述 干扰是造成单片机测控系统故障的主要原 ...… 查看全部问答> |
|
STM8S的bootloader,能STM32一样串口ISP? 仔细看了UM0560,UM0462,并试了一下UM0462.zip;还是不知道STM8S能不能像STM32一样,通过串口ISP? UM0560里提到可以通过UART、CAN、SPI等进行bootloader,好像是通过寄存器的值来选择启动方式。 但是,如果我只有一个STM8S板,没有ST-LINK ...… 查看全部问答> |
|
学430 lanchpad板上的TimerA模拟uart通信,总是不成功,下面是TI的演示程序,只做了简单修改,可用串口调试软件观察还是没数据,不知道那个地方有问题 #include <msp430g2231.h> #define RXD BIT2 ...… 查看全部问答> |
|
小弟急用钱购置新的开发板套件所以出一直闲置的TI原厂EK-LM3S811开发板一块有资料,数据线 120元包快递 有需要的联系我QQ452251911 请注明ARM板 ^_^板子九成新,说实话,买来以后只用过不到3次。。 ...… 查看全部问答> |
|
msp430在启动振动器后为啥要清除振荡器失效标志?DCOCTL怎么用? 不使用中断也要清除振荡器失效标志吗????还有DCOCTL怎么用,,能说的具体点吗????~~~~~~~求指教… 查看全部问答> |




