您的位置:首页 > 编程语言

嵌入式学习--work10 在SARM里面调试代码--使用STVP解锁

2016-11-08 14:59 323 查看
实验室有很多板子都被“不经意”的人为操作而锁住了,下载程序会出现如下图所示的情况,为了“挽救”它们,决定开始学习这一块的知识。学习的过程有参考野火的资料,以下为学习笔记。
在下载程序时出现如下错误:




把代码下载到RAM中调试有如下优点:
1、下载程序非常快
2、不改写内部FLASH的原有程序
3、对于内部FLASH被锁定的芯片,可以把解锁程序下载到
RAM上,进行解锁。
缺点:
1、存储在RAM上的程序掉电后会丢失,不能像FLASH那样保存。
2、若使用STM32的内部SRAM存储程序,程序的执行速度与在FLASH上执行速度无异,但SRAM空间小。
3、如果是外部SRAM,速度要比内部FLASH慢。


一、了解STM32的启动方式:

(1) 从地址 0x00000000 处取出栈指针 MSP 的初始值,该值就是栈顶的地址。

(2) 从地址 0x00000004 处取出程序指针 PC 的初始值,该值指向复位后应执行的第一条指令。



上述过程由内核自动设置运行环境并执行主体程序,因此它被称为自举过程。

虽然内核是固定访问 0x00000000 和 0x00000004 地址的,但实际上这两个地址可以被重映射到其它地址空间。以 STM32F103 为例,根据芯片引出的 BOOT0 及 BOOT1 引脚的电平情况,这两个地址可以被映射到内部 FLASH、内部 SRAM以及系统存储器中,具体见下图:



二、STM32启动方式之内部 SRAM 启动

类似地,当芯片上电后采样到 BOOT0 和 BOOT1 引脚均为高电平时, 0x00000000 和 0x00000004 地址被映射到内部 SRAM 的首地址 0x20000000 和 0x20000004,内核从SRAM 空间获取内容进行自举。

在实际应用中,由启动文件 starttup_stm32f10x.s 决定了 0x00000000 和 0x00000004 地址存储什么内容,链接时,由分散加载文件(sct)决定这些内容的绝对地址,即分配到内部 FLASH 还是内部 SRAM。

/[b]*****************************************************************************[/b]/

下面介绍用ST软件的方法来实现解锁,已经成功实现了。

先要下载软件STVP,安装配置如下:板子用的是STM32F411的,下载器为STLink,所以







主要是将图中的 No protection (Level 0) 修改,锁住了将会达到Level 1甚至更高,选中No protection (Level 0)后,选择下载Programming,图中菜单栏第二行有许多类似于下载的按键,选Programming (Erase选项下面的那个)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐