硬汉嵌入式论坛

 找回密码
 立即注册
查看: 7060|回复: 10
收起左侧

[有问必答] stm32在keil软件上如何用外部sram进行程序仿真

[复制链接]

10

主题

39

回帖

69

积分

初级会员

积分
69
发表于 2016-1-18 20:03:30 | 显示全部楼层 |阅读模式
stm32在keil上仿真时,一般用内部flash,但是由于经常使用,我们可以改内部ram仿真,这个都可以使用。但是当程序大点的时候,内部ram不能够满足要求时,是否可以使用外部sram进行仿真呢。不知道有没有人实现过,该怎样设置?
回复

使用道具 举报

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
发表于 2016-1-18 21:49:30 | 显示全部楼层
当然可以,使用一个ini文件在外部初始化sram外设后就可以了

我在amo上发lpc1788的sdram调试程序的方法,sram基本思路一样
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116767
QQ
发表于 2016-1-19 00:32:57 | 显示全部楼层
参考论坛早期V2和V3板子配套的程序,有配套外部SRAM的运行方式,写个脚本文件即可,缺点就是速度极其慢。
回复

使用道具 举报

10

主题

39

回帖

69

积分

初级会员

积分
69
 楼主| 发表于 2016-1-20 22:26:24 | 显示全部楼层
ini文件弄好后,运行调试时,会把原flash中保留的参数删掉了(好像被擦除了),这个是什么回事。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116767
QQ
发表于 2016-1-21 09:10:30 | 显示全部楼层

回 365497604 的帖子

365497604:ini文件弄好后,运行调试时,会把原flash中保留的参数删掉了(好像被擦除了),这个是什么回事。 (2016-01-20 22:26) 
不会的,MDK是不是设置更新flash了,查看下。
回复

使用道具 举报

10

主题

39

回帖

69

积分

初级会员

积分
69
 楼主| 发表于 2016-1-21 11:00:25 | 显示全部楼层
哪个地方是设置更新flash的,是这个吗
QQ图片20160121110206.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116767
QQ
发表于 2016-1-21 11:15:32 | 显示全部楼层

回 365497604 的帖子

365497604:
哪个地方是设置更新flash的,是这个吗




.......
这个会更新,不过你没有选,应该没事的
1.png

你再查查是不是哪里设置的问题。
回复

使用道具 举报

10

主题

39

回帖

69

积分

初级会员

积分
69
 楼主| 发表于 2016-1-21 11:37:15 | 显示全部楼层
这个是设置有没有哪有错
1.png
2.png
3.png
4.png

这个是ram.ini文件
FUNC void Setup (void)
{   
  
    _WDWORD(0x40023800+0x30,0x00100078);    //GPIOD E F G时钟使能
   
    _WDWORD(0x40021400+0x20,0x00CCCCCC);    //初始化GPIOF
    _WDWORD(0x40021400+0x24,0xCCCC0000);   
    _WDWORD(0x40021400,0xAA000AAA);
    _WDWORD(0x40021400+0x08,0xAA000AAA);
    _WDWORD(0x40021400+0x04,0x0000);
    _WDWORD(0x40021400+0x0C,0x0000);

    _WDWORD(0x40021800+0x20,0x00CCCCCC);    //初始化GPIOG
    _WDWORD(0x40021800+0x24,0x00000CC0);   
    _WDWORD(0x40021800,0x00280AAA);
    _WDWORD(0x40021800+0x08,0xAA000AAA);
    _WDWORD(0x40021800+0x04,0x0000);
    _WDWORD(0x40021800+0x0C,0x0000);
   
    _WDWORD(0x40020C00+0x20,0x00CC00CC);    //初始化GPIOD
    _WDWORD(0x40020C00+0x24,0xCCCCCCCC);   
    _WDWORD(0x40020C00,0xAAAA0A0A);
    _WDWORD(0x40020C00+0x08,0xAAAA0A0A);
    _WDWORD(0x40020C00+0x04,0x0000);
    _WDWORD(0x40020C00+0x0C,0x0000);

    _WDWORD(0x40021000+0x20,0xC000C0CC);    //初始化GPIOE
    _WDWORD(0x40021000+0x24,0xCCCCCCCC);   
    _WDWORD(0x40021000,0xAAAA808A);
    _WDWORD(0x40021000+0x08,0xAAAA808A);
    _WDWORD(0x40021000+0x04,0x0000);
    _WDWORD(0x40021000+0x0C,0x0000);
   
    _WDWORD(0x40023800+0x38,0x00000001);    //FSMC时钟使能
        
    _WDWORD(0xA0000000+0x08,0x1010);
    _WDWORD(0xA0000000+0x0C,0x00100A10);
    _WDWORD(0xA0000104+0x08,0x0fffffff);
    _WDWORD(0xA0000000+0x08,0x1011);

    SP = _RDWORD(0x64100000);              //SP
    PC = _RDWORD(0x64100004);              // PC  
  
    _WDWORD(0xE000ED08, 0x64100000);       //中断向量偏移地址
}   

LOAD .\\Objects\\test.axf INCREMENTAL              

Setup();                                    

g, main                                    


这个是down.ini文件
_WDWORD(0x40023800+0x30,0x00100078);    //GPIOD E F G时钟使能
   
    _WDWORD(0x40021400+0x20,0x00CCCCCC);    //初始化GPIOF
    _WDWORD(0x40021400+0x24,0xCCCC0000);   
    _WDWORD(0x40021400,0xAA000AAA);
    _WDWORD(0x40021400+0x08,0xAA000AAA);
    _WDWORD(0x40021400+0x04,0x0000);
    _WDWORD(0x40021400+0x0C,0x0000);

    _WDWORD(0x40021800+0x20,0x00CCCCCC);    //初始化GPIOG
    _WDWORD(0x40021800+0x24,0x00000CC0);   
    _WDWORD(0x40021800,0x00280AAA);
    _WDWORD(0x40021800+0x08,0xAA000AAA);
    _WDWORD(0x40021800+0x04,0x0000);
    _WDWORD(0x40021800+0x0C,0x0000);
   
    _WDWORD(0x40020C00+0x20,0x00CC00CC);    //初始化GPIOD
    _WDWORD(0x40020C00+0x24,0xCCCCCCCC);   
    _WDWORD(0x40020C00,0xAAAA0A0A);
    _WDWORD(0x40020C00+0x08,0xAAAA0A0A);
    _WDWORD(0x40020C00+0x04,0x0000);
    _WDWORD(0x40020C00+0x0C,0x0000);

    _WDWORD(0x40021000+0x20,0xC000C0CC);    //初始化GPIOE
    _WDWORD(0x40021000+0x24,0xCCCCCCCC);   
    _WDWORD(0x40021000,0xAAAA808A);
    _WDWORD(0x40021000+0x08,0xAAAA808A);
    _WDWORD(0x40021000+0x04,0x0000);
    _WDWORD(0x40021000+0x0C,0x0000);
   
    _WDWORD(0x40023800+0x38,0x00000001);    //FSMC时钟使能
        
    _WDWORD(0xA0000000+0x08,0x1010);
    _WDWORD(0xA0000000+0x0C,0x00100A10);
    _WDWORD(0xA0000104+0x08,0x0fffffff);
    _WDWORD(0xA0000000+0x08,0x1011);
回复

使用道具 举报

10

主题

39

回帖

69

积分

初级会员

积分
69
 楼主| 发表于 2016-1-21 13:07:05 | 显示全部楼层
能不能帮忙看下我的设置哪里有问题,谢啦
回复

使用道具 举报

10

主题

39

回帖

69

积分

初级会员

积分
69
 楼主| 发表于 2016-1-23 11:52:03 | 显示全部楼层
问题找到,是我程序中定义的数据地址在内部flash上,造成擦除的情况,谢谢管主的帮忙。前面贴出来的设置都是正确的,有需要的可以参考。仿真时数据定义不能定到flash上,如果定义到flash上,会擦除相应地址区。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116767
QQ
发表于 2016-1-23 17:27:39 | 显示全部楼层

回 365497604 的帖子

365497604:问题找到,是我程序中定义的数据地址在内部flash上,造成擦除的情况,谢谢管主的帮忙。前面贴出来的设置都是正确的,有需要的可以参考。仿真时数据定义不能定到flash上,如果定义到flash上,会擦除相应地址区。 (2016-01-23 11:52) 
感谢告知结果。[s:151]
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-7-5 19:12 , Processed in 0.290492 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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