STM32F4的BootLoader和AP​​P程序如何使用

通常在用户需要实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信管道(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。2、怎么得到升级软件数据并写入flash2、怎么得到升级软件数据并写入flash2、接收编译好的app的bin文件,写入flash...

一。概念素养

1.内购

IAP 是 In 的缩写。IAP是用户自己的程序,在运行过程中对部分User Flash进行编程。目的是在产品发布后,通过预留的通讯端口方便地更新产品中的固件程序。更新和升级。

通常,当用户需要实现IAP功能,即用户程序进行自己的更新操作时,需要在设计固件程序时编写两个工程代码。第一个项目程序不执行正常的功能操作草丛笔刷,而只是通过某种通信管道(例如USB、USART)接收程序或数据并对第二部分代码进行更新;第二项代码是真正的功能代码。

2.

在上述IAP概念中,它是它的第一个项目程序。主要功能有:从串口、USB等媒体接收数据;存储和传输数据;程序跳转等功能。

3.应用

IAP 概念中第二项代码的术语

编写Stm32和App的注意事项

1、如何分配和app地址空间

2、如何获取升级软件数据并写入闪存

3、如何从一个应用跳转到另一个应用

4、如何设置app的中断向量

5、如何在App中生成bin文件

6、程序执行流程

1、如何分配和app地址空间

天正建筑软件32位下载_creo软件32位下载_下载stm32程序的软件

图1 STM32 Flash分区情况

(1)分配地址

我正在使用,它的flash大小是512K,所以我把它拆分成这样:

--- 分配使用,大小为 64k

---- 分配给第一个APP使用,大小为124k

---- 分配给其他标志并被其他标志使用

(2)在keil中设置ROM的大小

A. 中 ROM 大小的设置

天正建筑软件32位下载_下载stm32程序的软件_creo软件32位下载

B.在App中设置ROM的大小

2、如何获取升级软件数据并写入闪存

在我的程序中Photoflare(开源图像处理工具),它通过串口接收数据,然后调用(u32,u8*,u32)将接收到的APP程序存储在FLASH中,也就是应用程序的起始地址,也就是应用程序CODE,即应用程序的大小(字节),代码如下:

#define FLASH_APP1_ADDR		0x08010000  	//第一个应用程序起始地址

if(applenth)//串口接收数据长度
			{
				printf("开始更新固件...\r\n");	
				LCD_ShowString(30,210,200,16,16,"Copying APP2FLASH...");
 				if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX.
				{	 
					iap_write_appbin(FLASH_APP1_ADDR,USART_RX_BUF,applenth);//更新FLASH代码   
					LCD_ShowString(30,210,200,16,16,"Copy APP Successed!!");
					printf("固件更新完成!\r\n");	
				}else 
				{
					LCD_ShowString(30,210,200,16,16,"Illegal FLASH APP!  ");	   
					printf("非FLASH应用程序!\r\n");
				}
 			}else 
			{
				printf("没有可以更新的固件!\r\n");
				LCD_ShowString(30,210,200,16,16,"No APP!");
			}
			clearflag=7;//标志更新了显示,并且设置7*300ms后清除显示	

void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)
{
	u32 t;
	u16 i=0;
	u32 temp;
	u32 fwaddr=appxaddr;//当前写入的地址
	u8 *dfu=appbuf;
	for(t=0;t

天正建筑软件32位下载_creo软件32位下载_下载stm32程序的软件

3、如何从一个应用跳转到另一个应用

//跳转到应用程序段
//appxaddr:用户代码起始地址.
void iap_load_app(u32 appxaddr)
{
	if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)	//检查栈顶地址是否合法.
	{ 
		jump2app=(iapfun)*(vu32*)(appxaddr+4);		//用户代码区第二个字为程序开始地址(复位地址)		
		MSR_MSP(*(vu32*)appxaddr);					//初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
		jump2app();									//跳转到APP.
	}
}		

4、如何设置app的中断向量

SCB->VTOR = | ;/*中断向量表位于()+*/

因为APP的起始地址是()+

5、如何在App中生成bin文件

我们点击 MDK 中的 User 选项卡下载stm32程序的软件,在 After Build/ 列中下载stm32程序的软件,选中 Run #1,然后写入:D:\tools\mdk5.14\ARM\ARMCC\bin\.exe -- bin -o ..\OBJ\RTC.bin..\OBJ\RTC.axf迅捷Gif制作工具,如图:

6、程序执行流程

下载stm32程序的软件_天正建筑软件32位下载_creo软件32位下载

总结:

里面主要是

1、设置和应用空间

2、接收编译好的app的bin文件写入flash

3、实现跳转

该应用程序的主要变化是:

1、 ROM 起始地址和分配的空间大小

2、 重定向中断向量

3、 生成bin文件

相关文章

发表评论

本站涵盖的内容、图片、视频等数据。若涉及版权问题,请联系我们-#97510453#-进行删除!

Copyright 2020-2022.All Rights Reserved 版权所有 苏州助华帮软件有限公司  | 网站备案号:苏ICP备2020061154号-1 |