钟爱STM32的理由:强大的片上内存调试功能,不改写芯片内原有程序

STM32一般认为使用诸如一键下载功能来下载程序到片上FLASH很方便,其实我个人认为也不是很方便。
尤其是对于一个程序需要很多小的修补,而改写一行甚至几个字节的情况下。
重复的一键下载不仅损伤了MCU的片上FLASH寿命,而且也只能看到修改的结果,无法对程序内的各种设置监控。


为什么钟爱STM32,就是因为STM32对比其它单片机(如51和AVR之类),有JLINK何STLINK这种强大的调试器。
而且在KEIL横行的时代,对JLINK和STLINK的完美支持,更体现了STM32内存调试的优越性。


以前调试51程序,都是需要先下载到芯片中,然后查看结果。如果不满意,继续修改源程序,编译,下载到片内。重复再重复。
对于AVR,JTAG调试很方便,但也需要下载到芯片中,然后进行JTAG调试。而且AVR的JTAG仅限于部分型号,不是每种都有的。
为何STM32可以内存调试,就是因为STM32的片上内存空间比较充足。相比51和AVR的最大4-8K,最小128字节的片上内存。
STM32的片上内存容量已经甩开51和AVR好大一段了,对于STM32F103xE系列大容量高密度来说,片上内存空间更大,达到了64K。
即使是C8T6这种白菜芯片,片上内存也有20K了。


正是因为这个原因,片上内存调试的功能可以实现了。通过利用JLINK和STLINK调试器,设置好内存空间和变量及堆栈空间,就可以片上内存调试了。
片上内存调试非常好用,下载程序到内存空间中运行,不会改变芯片中的原有程序空间,退出内存调试后,芯片中的程序没有改变,复位后可以原样执行。


如下将用实例图片说明内存调试的设置和使用方法:


在CPU内存中用JLINK或者STLINK调试程序的代码和设置。 这样就不需要下载到CPU的FLASH中执行了,大大节省CPU的FLASH寿命。你只需要一个JLINK或者STLINK就行了。

内存地址范围可以修改,内存基地址为0X20000000。
前部分是划出多大内存给程序空间,后部分是划出多大内存作为程序运行变量所需的内存。
我用的是STM32高密度的VET6,内存为64K,内存总空间为0X10000,大家可以随意发挥。

注意:内存调试时,Use MicroLIB选项必须勾上。在调试正点原子的例程时,需要注释掉USMART组件,不然运行不正常。


钟爱STM32的理由:强大的片上内存调试功能,不改写芯片内原有程序!

钟爱STM32的理由:强大的片上内存调试功能,不改写芯片内原有程序!

钟爱STM32的理由:强大的片上内存调试功能,不改写芯片内原有程序!

钟爱STM32的理由:强大的片上内存调试功能,不改写芯片内原有程序!


图中的 CPURam.ini 文件放在工程文件目录中。
附上CPURam.ini的代码(源引自安富莱开发板例程):
/****************************************************************************
Copyright (C), 2010 安富莱电子 www.armfly.com
【本例程在安富莱 STM32F103ZE-EK 开发板上调试通过 】
【QQ: 1295744630, 旺旺:armfly, Email: armfly@qq.com 】

文件名: CpuRAM.ini

这是 CPU 内部 RAM 调试脚本。开始 Load 程序时,由 IDE 控制仿真器执行这段脚本程序。
本脚本完成的功能是
(1) 装载目标程序到 CPU 内部 RAM
(2) 设置堆栈指针 SP
(3) 修改 PC 指针
脚本的语法:
参加 MDK 的 HELP, 搜索关键字 “uv3 Library Routines” 可以看到 uv3 支持的脚本命令
*/

FUNC void Setup (void) 
{
SP = _RDWORD(0x20000000) + 4; // 设置堆栈指针
PC = _RDWORD(0x20000004); // 设置 PC 指针
}

LOAD ..\OBJ\test.axf INCREMENTAL // 先装载代码到 CPU 内部 RAM
Setup(); // 再调用 Setup 函数修改堆栈和 PC 指针
g, main // 运行到 main()函数
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值