STM32学习记录18 IAP(1)
时间:11-13
来源:互联网
点击:
项目需要,需要开发一款手持设备,对产品进行软件升级。现在的产品都是使用STM32,所以可以很方便的应用STM32的 IAP功能对软件进行在线升级。
二、APP程序区。
总体需求就是,主机Master通过CAN接口,发送数据给从机Slave。从机在接收到应用程序APP后,把接收的数据覆盖掉原来的应用程序区。从而实现Master对Slave的在线升级。
这里先介绍IAP,对IAP的整体实现有个了解,方便后续开发。参考了原子STM32开发板,对IAP功能的介绍。
要实现IAP,需要有两个项目代码。第一个称之为Bootloader程序,第二个称之为APP程序。Bootloader负责引导APP程序启动,以及需要在线更新APP时,接收主机发送的APP文件,将接收的APP覆盖掉原来的APP。
关于IAP的具体内容,可以参考原子STM32开发板的开发指南的五十三章。
下面是自己对IAP有大概了解之后,进行的实验。1,编写bootloader程序测试程序,用来引导指定位置的APP。2,修改原来的一个应用程序,使之可以用该bootloader引导。3,通过jlink下载器,分别下载bootloader和APP。
一,bootloader程序。
主要代码如下,流水灯之后,执行跳转到APP区域的命令
[cpp]view plaincopy
- intmain(void)
- {
- delay_init();
- LED_Init();
- LED1=0;
- delay_ms(200);//延时
- LED2=0;
- delay_ms(200);//延时
- LED3=0;
- delay_ms(200);//延时
- LED4=0;
- delay_ms(200);//延时
- LED1=1;
- delay_ms(200);//延时
- LED2=1;
- delay_ms(200);//延时
- LED3=1;
- delay_ms(200);//延时
- LED4=1;
- delay_ms(200);//延时
- iap_load_app(FLASH_APP1_ADDR);//执行FLASHAPP代码
- }
[cpp]view plaincopy
- #defineFLASH_APP1_ADDR0x08003C00//第一个应用程序起始地址(存放在FLASH)
- //保留前15K的空间做为bootloader区
二、APP程序区。
完成中断向量表的重定位。工程配置下载位置
[cpp]view plaincopy
- intmain(void)
- {
- SCB->VTOR=FLASH_BASE|0x3C00;
- /*Infiniteloop*/
- while(1)
- {
- OSInit();
- OSTaskCreate(Start_Task,
- (void*)0,
- &Start_Task_Stk[START_TASK_STK_SIZE-1],
- START_TASK_PRIO);
- OSStart();
- return0;
- }
- }
jlink下载的地址配置成起始地址是0x0800 3C00。 这样下载的时候不会把bootloader区域擦除。
最后在keil下, 分别下载bootloader , APP两个工程, 可以看到bootloader流水灯最后,APP程序被启动。
STM32学习记录IA 相关文章:
- STM32学习记录18 IAP(2)(11-13)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)