打印

谁能详细说一下stm32的iap编程详细过程

[复制链接]
4197|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jackbao|  楼主 | 2008-1-8 15:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
谢谢!
沙发
香水城| | 2008-1-8 15:24 | 只看该作者

IAP编程的过程很简单:1)下载数据到RAM,2)烧写这些数据到Flas

下载数据到RAM有很多种方法,使用USB下载就是DFU,使用UART下载是最常见的方法;ST网站上有一个应用笔记是讲如何使用UART做IAP的,还包括源程序,你可以拿来参考:


AN2557 STM32F10xxx通过USART在程序中编程 (2007年10月)
对于多数基于闪存的系统而言,当固件已装入终端产品后,更新升级固件是一个重要的需求,这是有关在应用中编程(IAP)的能力。本文的目的是提供一个建立具有在应用中编程能力的应用的指导原则。STM3210B-EVAL评估板用于验证IAP驱动。
STM32F10xxx微控制器可以运行用户编写的固件执行对内嵌闪存的IAP。IAP允许使用任何通信协议(如CAN、USART、USB等)进行固件的再编程,本文使用了USART做为例子。

英文应用笔记
MxChip译文参考
程序下载

使用特权

评论回复
板凳
zhiwei| | 2008-1-8 19:29 | 只看该作者

对中断向量表还有疑问

是不是他们就全部重新映射到Application起始地址了。
这是一个CortexM3的问题,还没有仔细看文档,,

使用特权

评论回复
地板
香水城| | 2008-1-8 20:23 | 只看该作者

不明白3楼的问题

Application起始地址是什么意思?

使用特权

评论回复
5
hotpower| | 2008-1-9 01:14 | 只看该作者

NVIC_Configuration()

void NVIC_Configuration(void)
{
#ifdef  VECT_TAB_RAM  
  /* Set the Vector Table base location at 0x20000000 */ 
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 
#else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 */ 
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
#endif
}

使用特权

评论回复
6
zhiwei| | 2008-1-9 12:38 | 只看该作者

STM32

Boot和App应该也需要单独编译吧?
App的XCL文件也需要修改ROMSTART到0x08000000+BOOTSIZE?
App中的向量表设置应该改为:
NVIC_SetVectorTable(NVIC_VectTab_FLASH, BOOTSIZE);

是吗?
习惯了AVR的BootLoader概念了,呵呵。希望高人指点一下他们有什么不同。

使用特权

评论回复
7
香水城| | 2008-1-9 13:45 | 只看该作者

这个问题好像在坛子中有很多讨论

请看以前的一些帖子:

这个帖子中7楼的回答。

这个帖子中2楼的回答。

这个帖子中的所有讨论基本涉及到IAP的各个方面。

这个穿两条裤子的帖子:在EK-STM32F学习套件上实现了USB-DFU设备功能给出了一个使用标准USB-DFU协议进行IAP编程的完整例子。


另外,6楼朋友的理解完全正确。

使用特权

评论回复
8
zhiwei| | 2008-1-9 19:18 | 只看该作者

实际上

CortexM3的中断向量表处理比ARM7方便了很多,它可以设定中断向量表的起始位置,而ARM7如果要实现IAP,则必须用“两级跳”的方式来实现中断处理,即中断到来时先跳到0地址为起始地址的相应中断入口,这个入口实际又是一个跳转,它跳转到RAM中的中断向量表(系统启动后需要注册相关中断向量到此位置),进而进入ISR。所以说CortexM3系统可以有N个中断向量表,只要修改一下起始地址就可以了。

使用特权

评论回复
9
myworkmail| | 2009-2-23 17:22 | 只看该作者

好贴

好贴

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

92

主题

260

帖子

0

粉丝