STM32从SRAM启动遇到的问题

[复制链接]
4622|5
 楼主| eastbest 发表于 2009-10-10 16:31 | 显示全部楼层 |阅读模式
本帖最后由 eastbest 于 2009-10-10 22:01 编辑

用汇编写了一个小程序,测试STM32从SRAM启动,似乎启动不了,过程是这样的:
1、从flash启动,程序把flash中的一段代码拷贝到SRAM中(该代码是点亮LED的)
2、跳线设置为从SRAM启动,
3、按复位键,这时程序应该在SRAM中执行(LED被点亮),但结果LED灯不亮。

可是从flash中直接跳转到SRAM中执行(即把下面程序的中的注释语句激活),LED灯会亮。
也用Jlink仔细查看过,SRAM中的数据是正确的,复位也不会导致SRAM中的数据发生变化。

程序有什么问题吗?请高手指点一下!

;================================================================
... 地址调整,把SRAM_begin后的代码、文字池拷贝到0x2000 0000开始的SRAM中,代码略...

;    LDR     r0,=0x20000009
;    MOV     PC,r0
; xxx
;    B    xxx

SRAM_begin
     DCD     0x20000200                ;栈顶            
     DCD     0x20000009                ;复位向量

     LDR     r0,=0x40021018               
     LDR     r1,=0x00000080          ;enable GPIO时钟         
     STR     r1,[r0]
     LDR     r4,=0x40011c00               
     LDR     r5,=0x24444444          ;输出设置为推挽
     STR     r5,[r4]                         ;IO的复位值为0,LED亮

;==================================================================
vigia 发表于 2009-10-10 17:27 | 显示全部楼层
实在没看懂。。。。

你在用IO之前要先开时钟吧。。。。
 楼主| eastbest 发表于 2009-10-10 22:03 | 显示全部楼层
可能之前说得不是很清楚,编辑了一下。希望各位汇编高手指点!
zb7401 发表于 2009-10-15 09:16 | 显示全部楼层
按复位键后ram中的内容全丢了!无法运行!
 楼主| eastbest 发表于 2009-10-15 09:23 | 显示全部楼层
本帖最后由 eastbest 于 2009-10-15 09:25 编辑

楼上,复位只是把ARM的寄存器和STM32的外设初始化,对SRAM中的内容没有影响。我写了一个程序验证过这一点。
香水城 发表于 2009-10-15 10:04 | 显示全部楼层
不敢肯定是什么问题,但看到2点不合理:
1)为什么没有等待振荡器稳定工作再开启各部分时钟?
2)程序没有结尾,执行完你自己的最后一条指令后会继续执行未知的指令,你又没有设置异常处理,整个系统即使正常开始运行后,也会跑乱。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

176

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部