这两天开始捣鼓板载STM32F103ZE的红牛开发板,每次做一点小改动都要重新下载程序到Flash中,很慢不说,还担心这么频繁地刷,Flash啥时候突然就归西了。于是准备每次下载程序的时候写到片载的RAM中。参考了网上的一些文章,发现不同的人说法略有差异。走了很多弯路以后,终于成功地下载到片载RAM中并运行起来。因为是刚刚上手STM32,就按初学的视角总结一下设置的经过,不涉及内部的机制。下面的步骤基本上都是必须的,应该没有迷信的步骤在里面了。

一、先创建一个新项目。

1.菜单Project --> New mVision Project。创建名为RAM的项目,并选择CPU为STM32F103ZE。添加启动代码选“Y”。

2.这时,项目中仅有STM32F10x.s启动代码,要自己创建一个包含main.c的主文件。菜单File --> New,创建一个新文件,填入main()函数,保存为main.c。内容可以简单到极致:

int main() {

while(1);

}

3.右键单击Source Group 1,选“Add File to "Source Group 1"”,添加main.c文件。至此一个新项目已经建立完毕,可以编译并在虚拟器中运行了。

二、新建一个名为SRAM.ini的文件。内容如下:

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.axf INCREMENTAL       // Download,红色代表工程文件名.axf

Setup();                             // Setup for Running

g, main

三、设置项目的参数。在工具条上点击“Options for Target”,弹出项目设置对话框。

四、在对话框的Target标签,修改IROM1地址。Cortex-M3的内部RAM的起始地址是0x20000000,STM32F103ZE的RAM总共有64k。这里把48k分给ROM,16k分给RAM,设置如下图。

注意,IROM原先的地址是0x8000000,后面是6个0,而需要填入的新地址是0x20000000,后面拖的是7个0,千万不要填错。

五、切换到Linker标签,修改基地址。
    一开始,此标签下的R/O Base和R/W Base内容是不允许修改的,如下图

勾销“ Use Memory Layout from Target Dialog”之后才可以编辑。在R/O Base填入0x20000000,在R/W Base填入0x2000C000,然后在勾选 “ Use Memory Layout from Target Dialog”。完成后如下图。

六、接下来是Debug标签设置。

1.首先去掉“Load Application at Startup”核选框,并在下面填入刚才建立的SRAM.ini文件。

2.选择Cortex-M3 J-Link调试器。如下图。

再点击旁边的Setting按钮,设置JLink设备。在弹出对话框中选择“Falsh download”标签。

(1)核选“Do not Erase”,即在下载之前不需要擦除存储器;

(2)在“RAM for Algorithm”区的Start栏填入0x2000C000,与前面的RAM设置保持一致。这里的RAM空间是供烧录时用的,大小用默认的就可以,不用改。

(3)点击对话框最下面的Add按钮,在弹出对话框中选择“STM32F10X High-density Flash”,并点击确定,与STM32F103ZE CPU保持一致。

(4)在“Programming Algorithm”的Start和Size中,一如既往地填入0x20000000和0xC000。指定烧录过程的起始位置和范围。按确定回到“Options for Target”对话框。

七、选择“Utilities”标签栏,在“Use Target Driver for Flash Programming”下面选择“Cortex-M3 J-Link”。旁边的Setting按钮和刚才设置的是同一个对话框。

八、至此,设置全部完成。可以下载到板上运行了。

九、常见错误:

1.最常见的错误是在下载程序到芯片(烧写芯片)时,跳出一个对话框,显示“Flash Timeout. Reset the Target and try it again.”。通常这并不是由超时引起的错误,而是地址设置有误,程序写不进芯片中。有时在步骤六设置的Flash Download地址会丢失,发生这种错误时,先检查各个地址设置是否正确。

2.如果在烧写芯片时弹出对话框显示“Error: Flash Download failed - "Cortex-M3"”,并且在Output Window的Build窗口中显示“No Algorithm found for: 02000000H - 02000233H”,这是步骤四的IROM1里填写的地址有误,0x20000000应该有7个0,少填了个0就报这个错误。这个要特别小心,因为初始值0x8000000后面拖的是6个0

在内嵌RAM中运行程序 No Algorithm found for 错误相关推荐

  1. stm32f4 RAM中运行程序 读保护设置

    主要是为了在RAM中运行程序来解除读保护的.没想到ST-Link Utility 就直接可以. ST-Link Utility:target-->options bytes-->就可以看到 ...

  2. STM32 进阶教程 11 - RAM中运行程序

    前言 上一讲我们讲到stm32可以将代码直接下载到RAM中时行程序调试,同时可以有效避开STM32 Flash 擦写次数有限问题,其实除了仿真调试时将程序设置在RAM中可以解决FLASH擦写次数问题外 ...

  3. TMS320F280049C 学习笔记9 CMD文件 程序从FLASH复制到RAM中运行

    文章目录 动机 CMD文件结构与语法 MEMORY和SECTIONS指令 MEMORY指令 SECTIONS指令 程序与数据段 已初始化段 未初始化段 其他指令 #pragma指令的使用 程序从FLA ...

  4. DSP28377S_程序从FLASH部分复制到RAM中运行详解

    程序从FLASH部分复制到RAM中运行详解 为什么要复制到RAM中运行 CMD文件中对存储空间的分配 CMD文件中对段的定义 CMD文件中FLASH部分复制到RAM中的定义 main中的操作 编译后如 ...

  5. 浅谈嵌入式MCU软件开发之S32K1xx系列MCU启动过程及重映射代码到RAM中运行方法详解

    内容提要 注:本文摘自NXP工程师胡恩伟的微信公众号"汽车电子expert成长之路",大家感兴趣可以关注一下. 引言 1. S32K1xx系列MCU启动过程详解(startup_S ...

  6. 【转载】CodeWarrior IDE使用tips之prm链接文件详解(自定义存储器分区以及自定义RAM数据初始化与在RAM中运行函数)...

    CodeWarrior IDE使用tips之prm链接文件详解(自定义存储器分区以及自定义RAM数据初始化与在RAM中运行函数) 2017-08-19 胡恩伟 汽车电子expert成长之路 内容提要 ...

  7. [第一讲]DSP28335将Flash中的代码拷贝到RAM中运行

    背景: 近期需要使用28335完成一个简单的逆变器设计,由于开关频率为81kHz,每个开关周期只有12.34us,担心在每个开关期间无法完成相应的计算工作,因此想到了将代码烧写时放在Flash中,初始 ...

  8. 将flash中的代码复制到RAM中运行的方法

    在MCU的使用过程中,偶尔会遇到将flash中的代码复制到RAM中运行的情况,下面就来说一下具体的方法,以28335的flash初始化为例: 1,编写函数,该函数处于flash中,就是我们即将要复制的 ...

  9. 把DSP TMS320F28XXX的程序段从flash复制到ram中运行

    翻译自TI应用手册SPRAAU8(http://www.ti.com.cn/cn/lit/an/spraau8/spraau8.pdf) 摘要 这个应用报告和相关的代码提供了一种把编译后的程序段从TM ...

最新文章

  1. 面试官:你能聊聊高并发下的接口幂等性如何实现吗?
  2. 外包网络推广公司探索出高排名网站优化的技巧!
  3. DPDK vhost-user详解(五)
  4. 新华三,定义服务器虚拟化市场新格局
  5. MyLiveSearch:它将会革掉Google的命?
  6. 用JavaScript 控制input的值
  7. 禅道 Rest API 开发
  8. C语言 十进制和十六进制相互转换 - C语言零基础入门教程
  9. 如何保证对象的唯一性
  10. Swing basic
  11. 分区助手找不到盘_C盘的概述与分区
  12. mysql中char存储中文_数据库中的字符类型存储字符和汉字的数量
  13. 微软桌面虚拟化MED-V系列教程
  14. DIAView 嵌入视频监控(海康威视)
  15. python机器学习手写字体识别,机器学习之路: python 支持向量机 LinearSVC 手写字体识别...
  16. python 俩冒号_python中双冒号
  17. 快递面单成信息泄露重灾区,隐私面单成“必选项”
  18. MySQL数据库报错汇总(持续更新中)
  19. mysql添加约束的语句论坛_Mysql通过sql语句添加约束和查看约束
  20. 戴口罩的这一年,AI产业如何“重启、重塑、重构”?

热门文章

  1. python制作英汉词典_Python基于有道实现英汉字典功能
  2. TypeError: unbound method a() must be called with A instance as first argument (got nothing instead)
  3. vue-seamless-scroll组件踩坑指南
  4. #2002 SIGSEGV(SEGV_MAPERR)
  5. xHiveAI-A311D:AI开发套件
  6. 人工智能会成为下一场的科技革命吗?
  7. dpdk pmd驱动初始化
  8. 做前端开发拿 30W 年薪很难吗?
  9. python二进制文件对比_二进制文件 .VS. 文本文件 > python
  10. java实现qq空间模块_最新免费QQ空间模块个性边框代码