网站建设过程小结,建立多多少钱,烟台seo做的好的网站,苏华建设集团有限公司网站IAP#xff08;In Application Programming#xff09;简介
Flash够大的情况下#xff0c;上电后的程序通过修改 MSP 的方式#xff0c;可以在一块Flash上存在多个功能差异的程序。
IAP是为了在执行正常功能前#xff0c;为了升级功能#xff0c;提前运行的一段程序。这…IAPIn Application Programming简介
Flash够大的情况下上电后的程序通过修改 MSP 的方式可以在一块Flash上存在多个功能差异的程序。
IAP是为了在执行正常功能前为了升级功能提前运行的一段程序。这个程序不执行正常的功能操作而只是通过某种通信方式(如 USB、USART)接收程序或数据执行对第二部分代码的更新 1检查是否需要对第二部分代码进行更新 2如果不需要更新则转到 4 3执行更新操作 4跳转到第二部分代码执行
第一部分称为bootloader程序第二部分称为APP。可以有多个APPSTM的APP可以运行在Flash或者SRAM中
STM32的启动模式
单片机复位
从0x0000 0000启动
单片机的复位方式有3种上电复位,硬件复位,软件复位。
且离开复位状态后CM4 内核做的第一件事就是读取下列两个 32 位整数的值 1、从地址 0x0000 0000 处取出堆栈指针 MSP 的初始值该值就是栈顶地址。 2、从地址 0x0000 0004 处取出程序计数器指针 PC 的初始值该值指向复位后执行的第一条指令
既然这里说stm32都是从0x0000 0000 开始启动的那为什么我们看到的启动模式是从0x0800 0000,0x2000 0000,0x1FFF F000开始启动呢
将 0x0000 0000 和 0x0000 0004 两个的地址重映射到其他地址空间就是启动模式选择。这样访问0x0000 0000就相当于访问0x0800 0000,0x2000 0000或者0x1FFF F000
重映射也就是启动模式选择
STM32的启动方式(自举模式)有3种内部 FLASH内部 SRAM系统存储器。 注启动引脚的电平0低电平1高电平x:任意电平即高低电平均可
FLASH 启动方式:么内核会从地址 0x0800 0000 处取出堆栈指针 MSP 的初始值从地址 0x0800 0004 处取出程序计数器指针PC 的初始值。CPU 会从 PC 寄存器指向的地址空间取出的第 1 条指令开始执行程序就是开始执行复位中断服务程序 Reset_Handler。也就是开始执行中断向量表。
内部 SRAM 启动方式:地址0x00000000 和 0x00000004 被映射到内部 SRAM 的首地址0x20000000 和 0x20000004内核从SRAM 空间获取内容进行自举。在实际应用中由启动文件 starttup_stm32f407xx.s 决定了0x00000000 和 0x00000004 地址存储什么内容链接时由分散加载文件(sct)决定这些内容的绝对地址即分配到内部 FLASH 还是内部 SRAM。
系统存储器启动方式:内核将从系统存储器的 0x1FFFF000及 0x1FFFF004 获取 MSP 及 PC 值进行自举。系统存储器是一段特殊的空间用户不能访问ST 公司在芯片出厂前就在系统存储器中固化了一段代码。因而使用系统存储器启动方式时内核会执行该代码该代码运行时会为 ISP(In System Program)提供支持在 STM32F4 上最常见的是检测 USART1 传输过来的信息并根据这些信息更新自己内部 FLASH 的内容达到升级产品应用程序的目的因此这种启动方式也称为 ISP 启动方式。
中断向量表 stm32的flash内存起始于0x0800 0000,基于 Cortex-M3/M4 内核的微控制器时其内部通过一张“中断向量表”来响应中断。
中断向量是地址(指向中断服务函数)程序启动后将首先从“中断向量表”取出复位中断向量的地址执行复位中断程序完成启动而这张“中断向量表”的起始地址是 0x0800 0004当运行中中断来临STM32的内部硬件机制亦会自动将 PC 指针定位到“中断向量表”处并根据中断源取出对应的中断向量执行中断服务程序。
加入IAP程序之后程序运行流程 复位后执行Reset_Handler后进入IAP升级程序
加入IAP升级程序之后单片机复位之后还是从 0x08000004 地址取出复位中断向量的地址并跳转到复位中断服务程序Reset_Handler在这个函数中初始化时钟系统等。在运行完复位中断服务程序之后跳转到 IAP 的 main 函数
①复位后从 0x08000004 地址取出复位中断向量的地址并跳转到复位中断服务程序在运行完复位中断服务程序之后跳转到 IAP 的 main 函数。
执行IAP函数
将APP程序写入指定的flash地址。
执行APP程序的Reset_Handler
执行完IAP程序之后进入APP函数的中断向量表。取出新程序的复位中断向量的地址。并跳转执行APP程序的复位中断服务程序随后跳转至APP程序的 main 函数。
此时STM32F407的FLASH在不同位置上共有两个中断向量表。
APP函数执行过程中如果 CPU 得到一个中断请求PC 指针仍然会强制跳转到地址0x08000004 中断向量表处而不是新程序的中断向量表如图标号④
程序再根据我们设置的中断向量表偏移量跳转到对应中断源新的中断服务程序中如图标号⑤。
IAP程序设置条件
新程序必须在 IAP 程序之后的某个偏移量为 x 的地址开始 新程序必须在 IAP 程序之后的某个偏移量为 x 的地址开始