打印

STM32从SRAM启动遇到的问题

[复制链接]
3408|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中的内容全丢了!无法运行!

使用特权

评论回复
5
eastbest|  楼主 | 2009-10-15 09:23 | 只看该作者
本帖最后由 eastbest 于 2009-10-15 09:25 编辑

楼上,复位只是把ARM的寄存器和STM32的外设初始化,对SRAM中的内容没有影响。我写了一个程序验证过这一点。

使用特权

评论回复
6
香水城| | 2009-10-15 10:04 | 只看该作者
不敢肯定是什么问题,但看到2点不合理:
1)为什么没有等待振荡器稳定工作再开启各部分时钟?
2)程序没有结尾,执行完你自己的最后一条指令后会继续执行未知的指令,你又没有设置异常处理,整个系统即使正常开始运行后,也会跑乱。

使用特权

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

本版积分规则

5

主题

176

帖子

0

粉丝