本帖最后由 yklstudent 于 2016-2-9 00:27 编辑
新年没有回家,所以终于有空静下心来写篇SM32系列MCU的基于串口的IAP和APP整合范例;
1、MCU型号为STM32F072RB;
2、MCU开发平台为KEIL ARM5.14;
3、IAP升级部分为官网的串口IAP升级代码;
4、APP实现简单的RC5、RC6、RC8和RC9等控制LED等闪烁;
5、IAP和APP整合的关键部分在于设置工程范例的SCT分散加载文件;
具体设置如下所示:
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x08000000 0x00003000 { ; load region size_region
ER_IROM1 0x08000000 0x00003000 { ; load address = execution address
*.o (RESET, +First)
startup_stm32f072.o (+RO)
system_stm32f0xx.o (+RO)
stm32f0xx_rcc.o (+RO)
stm32f0xx_flash.o (+RO)
stm32f0xx_usart.o (+RO)
stm32f0xx_gpio.o (+RO)
Common.o (+RO)
Menu.o (+RO)
Ymodem.o (+RO)
Lib_Flash.o (+RO)
Lib_IAP.o (+RO)
aeabi_sdiv.o (+RO)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00003000 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM2 0x20003000 0x00001000 {
startup_stm32f072.o (+RW +ZI)
system_stm32f0xx.o (+RW +ZI)
stm32f0xx_rcc.o (+RW +ZI)
;stm32f0xx_usart.o (+RW +ZI)
;stm32f0xx_gpio.o (+RW +ZI)
;stm32f0xx_flash.o (+RW +ZI)
;Common.o (+RW +ZI)
Menu.o (+RW +ZI)
;Ymodem.o (+RW +ZI)
;Lib_Flash.o (+RW +ZI)
;Lib_IAP.o (+RW +ZI)
}
}
LR_IROM2 0x08003000 0x0001C000 {
ER_IROM2 0x08003000 0x0001C000 {
*(InRoot$$Sections)
.ANY (+RO)
}
}
6、原理简单描述如下所示
整合FLASH控制分成ER_IROM1和ER_IROM2两部分;ER_IROM1存放IAP,ER_IROM2存放APP;
7、工程范例如下所示8、测试工程描述如下所示:
1)、上位机工具选择XP系统下的超级终端;
2)、波特率设置115200bps,N,8,1,NO;
3)、硬件测试平台复位检测RC13引脚为低电平则进入IAP升级程序;高电平则跳转到APP用户程序;
4)、进入IAP升级程序,则选择YMODEM,选择升级ER_IROM2程序<APP用户程序>;
5)、升级成功后复位;
|