一。概念素养
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地址空间
图1 STM32 Flash分区情况
(1)分配地址
我正在使用,它的flash大小是512K,所以我把它拆分成这样:
--- 分配使用,大小为 64k
---- 分配给第一个APP使用,大小为124k
---- 分配给其他标志并被其他标志使用
(2)在keil中设置ROM的大小
A. 中 ROM 大小的设置
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
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、程序执行流程
总结:
里面主要是
1、设置和应用空间
2、接收编译好的app的bin文件写入flash
3、实现跳转
该应用程序的主要变化是:
1、 ROM 起始地址和分配的空间大小
2、 重定向中断向量
3、 生成bin文件
发表评论