前言

在stm32开发过程中,程序调试是一个比较耗时且又重要的问题,特别是在固件代码达到一定的复杂度后,程序下载过程就一个比较耗时过程,同时STM32芯片有FLASH烧写次数有限,像103系列手册中标的是10000次,但在030系列MCU中才1000次,如果调试时可以将程序直接下载到RAM中并在RAM中运行(前题是有足够大的RAM可用)那么程序下载时间将有明显减少,同时Flash的使用寿命也得以保证,本节将给大家介绍如何在STM32中将程序下在RAM调试。

示例详解

基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。

本示例所用的最小系统板原理图:

  1. 关于CUBEMX工具及KEIL工具的操作将不再细讲,如果还有不熟悉的可以查看之前的教程文档。下面直接介绍工程配置:

    1. 系统时钟树

  1. 定时器配置

  1. 引脚配置

  1. 中断配置(保持默认)

  1. 工程代码
  1. 下图是STM32数据手册中关于BOOT 配置的描述:

本例并不需要更改BOOT设置为Embedded SRAM(保证main flash memory亦可),但需先对工程中进行一些设置,具体实现步骤如下:

在工程的Options for Target ->Target中将IROM1,和IRAM1都修成在RAM区间,注意按芯片RAM大小来设置,并根据程序大小及变量多少来划分,本例MCU为stm32f103c8t6,芯片有20k RAM,将前16k设成IROM1用来放代码,将后4k用来当IRAM1存程序变量,堆和栈。

在工程的Options for Target ->C/C++选项卡中加入VECT_TAB_SRAM宏定义:

在工程的Options for Target ->Linker选项卡中先不勾选USE MEMORY LAYOUT FROM TARGET Dialog,并设置R/O Base 和R/W Base 如下 :

设置完成后再勾选USE MEMORY LAYOUT FROM TARGET Dialog:

新建SRAM.ini文件,内容如下:

在工程的Options for Target ->Debug选项卡中先加入刚新建的SRam.ini文件作为仿真初值化文件:

在工程的Options for Target ->Debug->Settings选项卡中按下图配置烧录规则/算法:

完成上述配置程序编译完对应的地址空间就在SRAM区间,对工程进行仿真调试就可以直接看到效果:

  1. 在main.c中加入如下图所示代码

  1. 编译工程无错误后,仿真调试工程,工程成功运行到MAIN,全速运行工程可以看到工程序正常运行,功能也正常(LED循环亮500ms 灭500ms),最后注意一点是要想看到程序运行效果一定要仿真调试才行,直接烧录后程序是看不到效果的:

OK,本期实验完成!下期见!同时如果大家有什么疑问或是有想了解的其它内容,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,会有不定期技术干货推出!!

文中源码资料下载,在公众号里给十三发消息:

下载|STM32进阶教程 10

关注十三公众号

STM32 进阶教程 10 - RAM中调试程序相关推荐

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

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

  2. STM32 进阶教程 2 - micropython 使用

    前言 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.具有如下特点: 1.易于学习:Python有相 ...

  3. STM32 进阶教程 1 - micropython 移植

    前言 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.具有如下特点: 1.易于学习:Python有相 ...

  4. STM32 进阶教程 19 - IQmath数学库的使用

    前言 STM32 M3 系列是不带浮点运算单元的,小数运算都是采用定点转浮点试式实现的,本节给大家介绍一个很好用的定点转浮点数学运算库,IQmath是德州仪器 (TI) 的一个高度优化的高精度数学函数 ...

  5. STM32 进阶教程 18 – ADC间断模式

    前言 STM32 的ADC拥有连续扫描模式,也有间断模式,间断模式较扫描模式需要更多的触发事件才能完成所有的通道转换操作,在实际工程应用中,可以利用间断模式实现一些特殊应用.关于间断模式,在STM32 ...

  6. STM32 进阶教程 17 - ADC注入通道

    前言 STM32 的ADC的一个强大功能是支持触发注入功能,在103中每个ADC模块支持4个注入通道,每个注入通道具有独立的结果突存器,注入通道具有较规划通道更高的优先级,在实际工程应用中,注入通道更 ...

  7. STM32 进阶教程 16 - ADC1与ADC2同步采样

    前言 STM32中在有2个或以上ADC模块的产品中,可以使用双ADC模式.在双ADC模式里,根据ADC1_CR1寄存器中DUALMOD[2:0]位所选的模式,转换的启动可以是ADC1主和ADC2从的交 ...

  8. STM32 进阶教程 13 – FLASH的读写操作

    前言 在嵌入式应用开发中,经常会遇到掉电后还要保存的信息,这些信息通常只能保存在外部的一些存储芯片中,如外部flash,外部EEPROM, 其实这些信息同样可以保存在STM32自带的内部flash中, ...

  9. STM32 进阶教程 12 - M4的硬件乘法器使用

    前言 Cortex-M4支持硬件浮点运算单元(有些厂商直接说成DSP模块),本节将给大家介绍STM32F407芯片中硬件浮点运算单元中的使用及带来的性能对比. 示例详解 基于硬件平台: 正点源子的st ...

最新文章

  1. 走在网页游戏开发的路上(八)
  2. swift_024(Swift 的构造过程)
  3. PHP array_combine
  4. IDEA连接Mysql报错: 未找到驱动程序类 ‘com.mysql.cj.jdbc.Driver‘.  Change driver class
  5. Twitter开发者帐号申请(还没出结果)
  6. python编程入门到实践笔记习题_Python编程从入门到实践笔记——列表简介
  7. c语言结构-的优先级,c语言运算符号优先级
  8. java基础—文件的切割与合并
  9. 河海大学计算机科学考研真题,河海大学计算机与信息学院845电子技术基础历年考研真题汇编.pdf...
  10. 关于计算机博弈的开源项目
  11. JSP指令标记和动作标记
  12. JAVA过滤机制——过滤器的概念、工作原理、生命周期
  13. html网页设计优秀作品和代码,从优秀的网页设计作品中学排版和配色
  14. linux安装系统前安装驱动(driver)方法
  15. 计算机运行快捷方式,电脑运行快捷键有哪些 电脑运行快捷键介绍
  16. 【论文阅读】ERNIE系列
  17. 手部IK,自制动画,蒙太奇——开门手臂自动弯曲、靠墙手自动扶墙
  18. 最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
  19. World Cup——世界杯的另类读法
  20. midi接口 stm32_ALIENTEK MiniSTM32读取midi文件数据出错

热门文章

  1. java工程师之旅-一个月工作心得
  2. 英语----名词性从句的混合练习(上)
  3. 2017.1.19切题总结
  4. 在ASP.NET中实现Url Rewriting
  5. 代码生成工具的分类及比较
  6. 量子力学 一 基础2 作用量、普朗克常量与物质波
  7. UA SIE545 优化理论基础 用Farkas定理证明Farkas类的结论
  8. Julia程序设计3 数组1 创建、初始化、属性与访问
  9. eclipse基本断点调试
  10. 图解虚拟机中CentOS安装使用和编程