15019|18

61

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

stm32f系列芯片BootLoader的一个缺陷,令人郁闷: [复制链接]

用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,还未找到相应方法。
http://www.mcuisp.com/ispiap_note_stm32GoStackIssue.htm


相关链接:https://bbs.eeworld.com.cn/upfiles/img/200710/20071013112735121.rar
此帖出自stm32/stm8论坛

最新回复

                                 不过挺享受那种编出来的程序就基本跑通的感觉。   详情 回复 发表于 2008-9-1 20:12
点赞 关注
 

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

哈哈,这不能算是一个缺陷吧

                                 Bootloader不可能知道你下载的程序是否有vector_table,所以也无法根据你的需要初始化MSP;当然如果手册中能够说明下载进去的程序,需要自己初始化MSP即可。
此帖出自stm32/stm8论坛
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

这个颜色也太刺眼了吧?

                                 建议改成白色;-)
此帖出自stm32/stm8论坛
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 

老徐,公开一下你的HTML着色UltraEdit模板吧

                                 不过,不用UE很久了……
此帖出自stm32/stm8论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

5
 

*美化论坛,发彩色代码的简单方法(完整功能版)*

*美化论坛,发彩色代码的简单方法(完整功能版)*  
呵呵


使用方法:

在下面链接上点右键另存,文件保存成RAR(扩展名),解压到任意目录

然后打开UltraEdit,选择菜单的“宏”--“设置自动加载宏”,加载解压的"ABC语法加亮宏.MAC"文件,运行次数选择0

(以上只需一次)

以后只要按Ctrl+F12键把C语言源程序自动转换21IC上的彩色代码

按Ctrl+F11可以把汇编(ASM)语言源程序自动转换21IC上的彩色代码
 
 

相关链接:https://bbs.eeworld.com.cn/upfiles/img/200710/2007101312582444.rar
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

6
 

呵呵,这个香版就不清楚了。

给BootLoader下达从0x8000000运行程序的Go命令后,BootLoader会到0x8000004取真正的入口地址。
你说“Bootloader知不知道你下载的程序是否有vector_table”?
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

7
 

这个入口地址是由GO命令带进去的参数

这样可以允许下载任何程序,不一定需要有vector_table也可以的。

还可以下载程序到RAM的任何区域不执行。

这个GO命令的目的是实现一些测试(比如在RAM中运行),而不仅仅是烧写完Flash后跳到Flash运行;如果仅仅是跳到Flash运行,这个功能就没有太大意思了。
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

8
 

Go命令带的参数就是vector_table的基址。

                                 这个功能在用ISP调试程序时很方便。不用重新去跳Boot0跳线,和复位。
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

9
 

没有规定GO命令带的参数一定是Vector_table的基址

                                 这个参数可以使任意合法的地址
此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

10
 

呵呵,香版敢下点赌注么。

提示:下面是BootLoader最终开始跳转的语句。R4内容就是Go命令的参数。
  1FFFF57C  6860      LDR          R0, [R4, #4]
  1FFFF57E  4780      BLX          R0


我要N片stm32f芯片,呵呵。
此帖出自stm32/stm8论坛
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(初级)

11
 

谢谢提醒

偶d STM32USBBoot也会越来越完善,现在也可以支持GO命令,ISP更新完,可以直接跳转到Application,对应STM32Boot的-x参数

u32 BL_Address;
......
__MSR_MSP(*(vu32 *)BL_Address);
((void (*)(void))(*(u32 *)(BL_Address + 4)))();

这样就没有问题了吧
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

12
 

太高端了

                                 这个到底影响什么?
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

13
 

呵呵,影响ISP盲调。

即直接用ISP下载程序到目标系统,运行看结果的调试方法。

stm32f ISP盲调,目前最方便的是我的程序,呵呵。
www.mcuisp.com可下载最新版本。

此帖出自stm32/stm8论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

14
 

请教楼主你用的芯片中的Bootloader版本号是多少?

                                 你说的这个问题存在于V2.0中,但已经在V2.1中解决。
此帖出自stm32/stm8论坛
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

15
 

呵呵,是2.0的。

我目前碰到的片子都是2.0的。
包括N块万利板。N片购买的芯片。

芯片上版本号印的是"Z"
STM32F103
VBT6  Z

不过ISP程序要支持所有的版本的BootLoader才对。

能否申请片包含V2.1 BootLoader的样片,VBT6?
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

16
 

最不喜欢看人用ISP盲调了

                                 一下子就显得我这用仿真器的,水平比人家低一大截
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

17
 

呵呵,各有各的好处。

用OTP片盲调,那才真锻炼编程水平。

stm32f有串口,isp盲调还蛮舒服的。
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

18
 

楼主说:最不喜欢看到有人动不动就用仿真器了,一点技术

                                 都没有……
此帖出自stm32/stm8论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

19
 

呵呵,LS,我有仿真器时也优先用呀。

                                 不过挺享受那种编出来的程序就基本跑通的感觉。
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表