打印
[STM32F1]

STM32F103VC在RAM中调试方法

[复制链接]
716|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
最近开始学习STM32,芯片STMF103VCT6 编译工具 keil 4.14(评估板)。起初是改写买板子送的例程,下载程序到FLASH,看看现象。虽说FLASH可以下载万次,但看到人家说这样容易损伤FLASH。datasheet中说到STM32有三种启动方式,可以在芯片上的SRAM中调试程序。但搞来搞去始终不能明白。
  今天我终于搞成了,我以GPIO跑马灯的程序来测试的。首先把程序下载到FLASH,然后改变启动方式。把原来的GPIO跑马灯程序少做修改,在SRAM中调试。最后又把启动方式改回到从FLASH启动,看到板子上的现象和原来下载到FLASH的一样。说明我在SRAM中调试成功了。
  下面来说说我是怎么配置的,当然这其中也参考了网上搜集的很多内容,在这感谢互联网。
  STMF103VCT6有内部48K 的SRAM。SRAM的起始地址为0x20000000 到 0x2000c000 。在keil工程选项中设置如下图:
                                    
在上面这个图片中注意 IROM1 和 IRAM1 后面的地址就按图中的填写就行,这里我把SRAM均分两份,一份为虚拟FLASH,一份为SRAM。同时别忘了,前面的复选框打勾。

沙发
643757107|  楼主 | 2017-2-25 18:22 | 只看该作者
对于输出的list 和obj 文件放在哪里,相信很多人都会,在就不浪费大家的时间了。接着在debug中做如下设置如图。
                                             
仿真器就选择你自己的就行了,下面有两个复选框一定要选上,Load Application at Startup 和 Run to main()。另外下面还要添加一个文件RAM.ini 在这我给出源码:
  SP = _RDWORD(0x20000000);          // Setup Stack Pointer
  PC = _RDWORD(0x20000004);          // Setup Program Counter
  _WDWORD(0xE000ED08, 0x20000000);   // Setup Vector Table Offset Register
把这个文件添加到你工程的根目录下,以方便查找。

使用特权

评论回复
板凳
643757107|  楼主 | 2017-2-25 18:23 | 只看该作者
接着在Utilities中Setting选项中选择你的芯片,并更改RAM 和 FLASH 的地址。
      
  再者就是编写你的主程序,编译 调试了。但是记住一点,一定不要点FLASH下的Download 。
  最后别忘了,改变启动方式。
      到此为止,设置已经完成。
把程序的CODE 区定义到0x20000000 为起始,大小为 0xa000,也就是40K 了,然后RAM 区则定义到0x2000a000为起始,大小为0x2000,即8K
STM32f103VC的RAM起始地址为0x20000000,48k,flash的起始地址为0x4002 2000,256k


使用特权

评论回复
地板
updownq| | 2017-2-25 22:29 | 只看该作者
是不是需要修改BootLoader?

使用特权

评论回复
5
updownq| | 2017-2-25 22:32 | 只看该作者
Ti的产品修改cmd可以直接运行在ram里面。

使用特权

评论回复
6
643757107|  楼主 | 2017-2-27 19:19 | 只看该作者
楼上没看清楚,这个是STM32,不是TI。

使用特权

评论回复
7
whtwhtw| | 2017-2-27 19:42 | 只看该作者
不是FLASH下的下载是哪里的下载?

使用特权

评论回复
8
643757107|  楼主 | 2017-2-27 19:51 | 只看该作者
whtwhtw 发表于 2017-2-27 19:42
不是FLASH下的下载是哪里的下载?

可以通过配置将代码下载到指定的地址段。如果设置成这个单片机的RAM地址,那就是下载到RAM。

使用特权

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

本版积分规则

213

主题

3783

帖子

11

粉丝