原创 STM32的IAP应用

2010-11-10 14:57 8265 12 23 分类: MCU/ 嵌入式

STM32支持在应用中编程,也就是所谓的IAP,这对产品的在线升级带来了很大方便。


在线升级的原理简介如下:


在单片机的FLASH中有两段代码,一段是IAP代码,另一段就是用户的应用程序即APP代码,IAP代码放在单片机复位时的起始地址,而APP代码则放在IAP后面的地址,上电时CPU首先执行IAP代码,再通过IAP代码跳转到APP代码开始执行。


在IAP代码执行期间,通过检测某一个事件(如IO电平)来判断是否对APP代码进行更新,如果该事件无效,则不更新,直接跳转到APP代码执行;如果该事件有效,则更新APP代码,而更新的文件则从外部磁盘通过串口或USB写入FALSH应用程序空间。


流程图如下:


d9d64f2c-ff00-4564-8eac-43ee637d2f95.JPG



当然,这只是一种最简单的方式,它还可以是当APP代码在执行时,将PC指针跳转到IAP来更新自已。


实现的大致原理都是一致的,只是方式不同罢了。


值得注意的是:


IAP跳转的地址必须APP的起始地址一致,相应的中断向量表也要修改,否则APP将不能正确的运行。


在附件我整理的代码中,串口方式的IAP跳转的地址为0x8002000,因此应用程序的起始地址也应为0x8002000,在KEIL设置下如下图:



5070379d-ba8f-4a27-82e1-7f970f93a6a9.JPG


还有中断向量表的起始地址也应改为0x8002000:


/* Set the Vector Table base address at 0x08002000 */


NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);  // NVIC_VectTab_FLASH=0x08000000


只有以上两处设置正确才能确保APP能正确的运行。


USB方式的IAP跳转的地址为0x8004000,设置方法同上。


升级文件传输方式


串口方式的IAP在超级终端下用Ymode协议,波特率115200;文件为.BIN格式。


USB方式的IAP用DfuSe USB Device Firmware Upgrade软件传送,文件为dfu格式。


总的来说,IAP带给我的体验还是非常愉快的!


程序和本文PDF 


PARTNER CONTENT

文章评论11条评论)

登录后参与讨论

用户290296 2014-2-13 16:41

谢谢

用户443512 2013-7-26 23:32

感謝 研究了段時間 希望能有所進展!! 再次感謝!!

用户447518 2013-5-6 09:19

谢谢,非常感谢!

用户377235 2013-4-27 13:10

好样的

用户436301 2012-11-2 13:04

非常感谢

用户1519024 2012-9-16 17:07

真的很不错,看看

用户1444767 2012-7-31 23:24

非常感谢!

用户1278632 2010-11-10 14:57

重新传了一下,可以下载了

用户245415 2010-11-6 10:56

下载不了

用户120009 2010-7-20 23:46

不能下载,我想看一下Keil的设置图片,看不到,郁闷,正需要,被这个问题卡住了几天了,博主能不能把图片发送到邮箱:gfy84117@126.com,感激不尽!
相关推荐阅读
用户1278632 2011-09-15 12:49
解决FPGA配置成功,但不能初始化运行的BUG
摘要:    遇到两次FPGA配置完成,却不能正常运行的问题,一次是ALTERA的A1C3,另一次是XILINX的XC3S700A。两次都是DONE信号的问题。问题虽不大,但却很折腾人,今天在这里作下...
用户1278632 2011-09-15 12:41
Code Edit的神器UltraEdit
摘要:      我不是一个专职的程序员,但经常会要写一些单片机底层的code和hdl code,起初用UE,是因为查找和批量修改很方便,而且不会额外的生成一些“垃圾”文件;现在用UE三年多了,一直都...
用户1278632 2010-12-29 09:29
ISE与EDK联合设计报错 ERROR:NgdBuild:604 logical block
做一个很简单的测试在ISE的SCH里调用EDK的symbol,EDK的功能也很简单,就是CPU通过串品打印一串字符首先,我建一个ISE工程再建一source  sch类型,并设置为顶层,取名为top....
用户1278632 2010-12-22 14:49
EDK12.2中 mch_emc IP的时序问题
mch_emc IP可以将PLB总线时序转为inter 8080时序 下面是我用chipscope抓到的波形Mem_DQ_O_In :  数据输入 Mem_OEN:      读信号  Mem_A: ...
用户1278632 2010-12-22 14:29
xilinx FPGA的配制与应用程序引导-范例
两个Xilinx FPGA应用程序引导的范例1、run_in_flash是直接在NOR FLASH里运行程序2、spi_flash_boot是将BIT和bootloader和APP全部固化到SPI F...
用户1278632 2010-12-19 13:48
EDK下sram IP的使用
EDK软件的memory and memory controller中有一个xps multi-channel external memory controller(sram/flash)的IP,用来...
EE直播间
更多
我要评论
11
12
关闭 站长推荐上一条 /3 下一条