dvbbs
收藏本页
联系我们
论坛帮助
dvbbs

单片机在线编程网侃单片机-ISPSTM32系列芯片的ISP → ISP经验:stm32F系列芯片BootLoader执行Go命令后堆栈初始化问题


  共有19303人关注过本帖树形打印

主题:ISP经验:stm32F系列芯片BootLoader执行Go命令后堆栈初始化问题

帅哥哟,离线,有人找我吗?
McuIsp
  1楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 贴子:43 积分:626 威望:0 精华:1 注册:2009-05-13 03:09:30
ISP经验:stm32F系列芯片BootLoader执行Go命令后堆栈初始化问题  发贴心情 Post By:2009-05-13 20:47:43

用isp的执行功能从0x8000000执行程序后,提示Ok。
但是为什么没有程序执行的反应呢,郁闷。


答案是:
stm32f的BootLoader程序没有根据你的vector_table初始化MSP,
而是用0x20000000~0x20000200的512字节大的堆栈,如果你使用了

大堆栈,或使用的变量位于0x20000000~0x20000200区间,则整个乱套

解决方法:

1、用嵌入汇编在__low_level_init中初始化MSP。

#pragma language=extended
__interwork int __low_level_init(void);
#pragma location="ICODE"
__interwork int __low_level_init(void)
{
  asm("MOVW R1,#0x0000");//根据vector_table不同,需修改此处地址
  asm("MOVT R1,#0x0800");
  asm("LDR R0,[R1,#0]");
  asm("MSR MSP,R0");
  asm("MSR PSP,R0");
  return 1;
}

2、对于IAR EWARM 442,修改启动文件,在cmain_ctx.s79加入如下代码:
    ldr   r1,=__vector_table
    ldr   r0,[r1,#0]
    msr   msp,r0
   并将cmain_ctx.s79加入工程
   修改好的cmain_ctx.s79见附件。
   此法比较好。
   在IAR EWARM 520,还未找到相应方法。

2008.9.2注:STM32F BootLoaderV2.1已经改正了这个问题,本站作品EISP使用SRAM

小补丁技术,对于BootLoaderV2.0和BootLoaderV2.1均无需按本文作程序改动。

欢迎关注www.mcuisp.com。转载请注明出处。

 

 


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
frange
  2楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 贴子:2 积分:70 威望:0 精华:0 注册:2009-09-14 14:58:24
  发贴心情 Post By:2009-09-14 15:21:35

我顶

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部

返回版面帖子列表

ISP经验:stm32F系列芯片BootLoader执行Go命令后堆栈初始化问题








签名