OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2268|回复: 5

STM32将程序搬到RAM中运行,有大侠搞过吗,求指导

[复制链接]

8

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2015-12-23
在线时间
63 小时
发表于 2020-1-2 11:17:15 | 显示全部楼层 |阅读模式
44金钱
本帖最后由 江苏大学 于 2020-1-3 10:02 编辑


IAP升级过程中能发生中断吗

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2016-10-19
在线时间
77 小时
发表于 2020-1-2 11:45:59 | 显示全部楼层
首先要了解自己使用的单片机型号的FLASH和RAM的大小,以mini板LCD显示实验为例,用的是STM32F103RCT6  FLASH 256K  SRAM 48K
一般情况下存储地址 FLASH 是从0x0800 0000 开始,如果是256k,则size为256*1024 = 0x40000   。RAM的存储地址为0x2000  0000 如果是48k 则size为48*1024 = 0xC000
建立好工程后,最好先编译一下,或者自己大体知道程序占FLASH 大约多少RAM大约多少,如果不知道的话可以看一下编译后大小,如下图所示

好像是左边这两个加起来是FLASH占用大小,右边两个加起来是RAM
知道了这些后就可以把48k的SRAM进行分配了。首先FLASH 24458+6474=30932 然后除以1024得30k   ,RAM 16+1848=1864 约1.8k多。分配的时候就可以分FLASH占用31k(可以再多点),剩下的分给RAM 17k。
开始设置,点击魔术棒工具打开option对话框,点击target选项卡,显示如下图
左边是FLASH 的起始地址和尺寸,右边是RAM的起始地址和尺寸,把FLASH的起始地址改成RAM的总起始地址0x2000 0000 尺寸改为31k 0x7C00 ,右边的RAM起始地址改为0x20007C00,尺寸改为17k 0x4400.
选择debug选项卡,如下图 ,首先选择使用STLINK,然后把下面的两个√打上,然后选择初始化文件RAM.ini,文件内容如下,自己建一个文本,把下面的内容复制进去,然后把文件名改成RAM.ini,建成后最好把文件放在工程的根目录下。



RAM.ini中内容:
/*****************************************************************************/
/* RAM.INI: RAM Initialization File */
/******************************************************************************/
// <<< Use Configuration Wizard in Context Menu >>> //
/******************************************************************************/
/* This file is part of the uVision/ARM development tools. */
/* Copyright (c) 2005-2007 Keil Software. All rights reserved. */
/* This software may only be used under the terms of a valid, current, */
/* end user licence from KEIL for a compatible version of KEIL software */
/* development tools. Nothing else gives you the right to use this software. */
/******************************************************************************/
FUNC void Setup (void) {
SP = _RDWORD(0x20000000); // Setup Stack Pointer
PC = _RDWORD(0x20000004); // Setup Program Counter
// _WDWORD(0xE000ED08, 0x20000000); // Setup Vector Table Offset Register
}
LOAD RAM\Blinky.axf INCREMENTAL // Download
Setup(); // Setup for Running
g, main
/*****************************************************************************/
最后点击设置,进入设置界面

一般选择SW模式,然后点击flash download选项卡

第一步按图设置  2.填写刚才的RAM起始地址和尺寸   3.填写刚才的FLASH 地址和尺寸,确定后编译代码。
编译后把BOOT0和BOOT1改成高电平,也就是从SRAM中启动,然后不能点 ,因为这样程序不会运行,还不知道原因。点解仿真按钮 ,程序会被下载到RAM中。可以继续仿真,也可以退出仿真,程序都会一直工作,直至复位或断电。
必须用仿真工具下载才能实现,串口只能下载到FLASH中。
回复

使用道具 举报

8

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2015-12-23
在线时间
63 小时
 楼主| 发表于 2020-1-2 13:07:21 | 显示全部楼层
feitianszb 发表于 2020-1-2 11:45
首先要了解自己使用的单片机型号的FLASH和RAM的大小,以mini板LCD显示实验为例,用的是STM32F103RCT6  FLAS ...

谢谢回答,你这个好像是在RAM中调试吧,我是要上电把程序从FLASH搬到RAM中运行,不一样的
回复

使用道具 举报

8

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2015-12-23
在线时间
63 小时
 楼主| 发表于 2020-1-2 13:34:44 | 显示全部楼层
有搞过的大虾指导一下,谢谢!
回复

使用道具 举报

3

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2016-10-19
在线时间
77 小时
发表于 2020-1-3 21:01:29 | 显示全部楼层
江苏大学 发表于 2020-1-2 13:07
谢谢回答,你这个好像是在RAM中调试吧,我是要上电把程序从FLASH搬到RAM中运行,不一样的

在DSP的单片机中见过这样的操作,但是STM32没见过
回复

使用道具 举报

8

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2015-12-23
在线时间
63 小时
 楼主| 发表于 2020-1-8 10:54:04 | 显示全部楼层
feitianszb 发表于 2020-1-3 21:01
在DSP的单片机中见过这样的操作,但是STM32没见过

了解,谢谢
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-20 03:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表