当前位置:首页 > 单片机 > 单片机
[导读]IAP下载流程一。APP程序的生成步骤APP程序生成一个bin文件,BootLoader程序通过某一种方式进行接收,然后把bin文件放置在Flash应用程序的存储区域中。Flash并不是全部放APP程序,而是Flash空间一部分放置BootLoader程

IAP下载流程



一。APP程序的生成步骤


APP程序生成一个bin文件,BootLoader程序通过某一种方式进行接收,然后把bin文件放置在Flash应用程序的存储区域中。

Flash并不是全部放APP程序,而是Flash空间一部分放置BootLoader程序,另一部分放置APP,所以对APP要设置起始地址和空间大小。在MDK中配置。

新的APP中有一个新的中断向量表,只不过比原来的中断向量表有一个偏移。


二。BootLoader程序讲解

BootLoader程序的作用:

1. 通过某种方式接受APP的bin文件。本实验通过串口接收,串口中断程序接收到数据后存储到一个缓存中

2. 把数据写到Flash的某个区域。

void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 applen);//在指定地址appxaddr开始,写入bin

3. 实现跳转。

void iap_load_app(u32 appxaddr);//执行flash里面以appxaddr为起始地址的的app程序

(1)串口接收数据程序(串口中断)

//串口1中断服务程序
//注意,读取USARTx->SR能避免莫名其妙的错误
u8 USART_RX_BUF[USART_REC_LEN] __attribute__ ((at(0X20001000)));//接收缓冲,最大USART_REC_LEN个字节,起始地址为SRAM中的0X20001000.注意:不能随意写,要给BootLoader程序和APP留有足够的空间。
//接收状态
//bit15,接收完成标志
//bit14,接收到0x0d
//bit13~0,接收到的有效字节数目
u16 USART_RX_STA=0;//接收状态标记
u16 USART_RX_CNT=0;//接收的字节数
void USART1_IRQHandler(void)
{
u8 res;
#ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//接收到数据
{
res=USART_ReceiveData(USART1);
if(USART_RX_CNT
{
USART_RX_BUF[USART_RX_CNT]=res;
USART_RX_CNT++;
}
}
#ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
OSIntExit();
#endif
}

数据接收在USART_RX_BUF中,长度为:

#define USART_REC_LEN55*1024 //定义最大接收字节数 55K

因此要求APP程序不能超过55k!

(2)把接收到的数据写到Flash的某个区域

由于需要进行Flash的操作,所以要引入stm32f10x_flash.c

iap.h

#ifndef __IAP_H__
#define __IAP_H__
#include "sys.h"

typedefvoid (*iapfun)(void);//定义一个函数类型的参数.

#define FLASH_APP1_ADDR0x08010000//第一个应用程序起始地址(存放在FLASH)
//保留0X08000000~0X0800FFFF的空间为IAP使用

注:0x8010000不能随意定义,与BootLoader程序的大小有关。

void iap_load_app(u32 appxaddr);//执行flash里面以appxaddr为起始地址的的app程序
void iap_load_appsram(u32 appxaddr);//执行sram里面的app程序
void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 applen);//在指定地址appxaddr开始,写入bin
#endif

注:0x8010000不能随意定义,与BootLoader程序的大小有关。



编译BootLoader程序后,可以看到BootLoader程序占用了多少Flash空间:Code + RO-data,约36k

这里偏移0x10000,为64k的空间。

APP存放在Flash中的地址不能与BootLoader程序存储的空间有冲突,会出现死机的情况。

(3)主程序

通过串口接收数据,接收完成后显示“用户程序接收完成!”

扫描按键

KEY_UP:更新固件,执行

iap_write_appbin(FLASH_APP1_ADDR,USART_RX_BUF,applenth);//更新FLASH代码

KEY_DOWN:清除固件,设置固件长度为0

KEY_LEFT:执行Flash中的APP代码

三。配置APP程序

1. APP所占空间的大小:BootLoader程序为64k空间,对于战舰版剩余512k-64k=448k,为0x70000,因为0x80000的数据为512k,0x80000-0x10000=0x70000

2. 偏移量:正常情况下程序从0x80000开始,APP在Flash中起始地址为0x08010000

以RTC实验为例进行配置:

如果用ICP下载,这个程序会下载到起始地址为0x08000000的Flash空间中并执行

现在用IAP下载,把这个程序下载到起始地址为0x08010000的Flash空间中,然后BootLoader跳转到这个程序执行

(1)配置APP的起始地址和空间大小



Start为起始地址0x8010000,Size为程序大小0x70000

点击“OK”完成

(2)配置中断向量表的偏移

在程序的起始的地方设置


int main(void)
{
u8 t=0;

//SCB->VTOR = 0x08000000 | 0x10000;

SCB->VTOR = FLASH_BASE | 0x10000;

delay_init();//延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600);//串口初始化为9600
LED_Init();//LED端口初始化
LCD_Init();
usmart_dev.init(SystemCoreClock/1000000);//初始化USMART
RTC_Init();//RTC初始化


FLASH_BASE是系统中已经定义了的起始地址,也就是0x08000000


(3)执行fromelf.exe,生成bin文件

点击魔术棒



点击文件夹,找到fromelf.exe文件



找到一个模板,然后把这里的内容复制到一个新建的txt文件中





把刚才自己找到的fromelf.exe文件路径替换记事本中.exe文件的路径

然后再改后面两个地方: RTC.bin 和RTC.axf

查看自己的程序中执行什么程序



在记事本中改好后,复制回来放在user下面:


重新编译。



如果没有提示错误,表示已经生成了bin文件,如果有错误可能是刚才fromelf.exe的路径配置错了。

在实验程序的obj文件夹下找到bin文件



(4)先把BootLoader程序用ICP下载到Flash中

下载完成后



通过串口把bin文件写到Flash中

打开串口调试助手

先要设置好波特率,跟BootLoader程序中的波特率一致,为115200。

选择打开文件,选择刚才生成好的bin文件,然后点击发送文件



发送完毕后,表示数据已经保存到了数据缓存中。

按KEY_UP,把数据保存到Flash中

然后按KEY2运行保存的RTC程序

在系统中BootLoader程序一般都不大,接收文件,写到Flash的某个区域,然后再跳转。真正的功能都在APP程序中实现。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

交换机是计算机网络中的核心设备之一,用于连接多台计算机并在它们之间传输数据。交换机的性能和功能配置直接影响网络的性能和可用性。其中,交换机的端口是至关重要的组成部分,它们负责接收、转发和管理网络数据。本文将深入探讨交换机...

关键字: 交换机 计算机 配置

要说当下暑期档最火的电影是哪一部,如果随机问一百个路人的话,或许九十九个会首选《我不是药神》。诚然,无大牌明星,无豪华特效,仅仅凭借出色的题材剧情,上映仅8天,票房就已突破20亿!纵观整部电影,除了诸多让人潸然泪下的感人...

关键字: 传祺GS4 荣威RX3 配置

10月21日,行程逾4000公里的“海马S5 IN迹之旅”在束河古镇圆满画上句号。不过,对于即将上市的2018款海马S5来说,这只是一个新的开始。经过了高原、山地、冰雪、荒漠、戈壁、草甸、泥泞等复杂路况验证的海马S5,接...

关键字: 海马S5 配置 动力

全车标配超越传统豪华SUV级别的安全配置,将全系安全标准提高到一个全新的高度。全系标配自适应巡航(ACC),在0-150Km/h速度范围内能够识别有效车距;高强度扭转和弯曲刚度车架,能支持强劲的越野性能和整车刚性,并带来...

关键字: SUV 自适应巡航 配置

在城市里谋生,汽车早已是年轻人生活中不可或缺的一部分,有调查显示80%的90后会选择先买车再买房。因为有了车之后,生活质量、工作效率明显可以得到改善,可以节省出很多时间去提升自己、去享受生活。

关键字: 绅宝X35 北汽 配置

随着消费者需求的提升,现有的微客从外型、配置、价格都已不能让经常在外奔波的小生意人中意,随着价格不断的下探,商用MPV车型凭颜值高、配置更优更舒适、价格与微客相近但档次更高而备受到小生意人的热捧,众多媒体更是直言未来的五...

关键字: 消费者 MPV 配置

万物美好,你在中央。馥郁的百花园中,沁人心脾的芬芳令人迷醉,驾驶着比亚迪元飞驰在这如画的风景中,春天的阳光温暖而充满活力,唤醒内心的激情,如果时间允许的话,真想一直这样开下去。

关键字: 比亚迪 小型SUV 配置

摘要:模块化UPS电源是重要的电气设备,为高效发挥其功能,从模块化UPS电源设备的主要组成部分—主机柜、强电柜、蓄电池、电池开关柜、电池架、连接线缆等方面,分析了合理配置模块化UPS电源的方法,为我国碳达峰和碳中和目标的...

关键字: 电池 线缆 配置

如何设置虚拟主机_虚拟主机的配置步骤

关键字: 主机 配置

请问solidworks对电脑配置有哪些要求?

关键字: solidworks 配置 学习
关闭
关闭