stm32-SRAM启动

文章目录


最近将两年前买的STM32F103最小系统板拿出来准备学习,安装完MDK5后写了一个点亮LED程序,发现无法下载。查了下购买评论,原来这种板子发货时已经锁定了flash。鼓捣了2、3天,最后采取的办法是通过sram启动方式,来运行一个flash解锁程序,程序运行后就可以将板子恢复。在此将该过程记录下来。

一、系统板外形是这种。
在这里插入图片描述

二、硬件跳线

将两个黄色跳线帽全部插在1端,即BOOT0、BOO1全部接1。

三、MDK5设置

3-1、新建一个工程,取名Flash_Unlock。设置Run-time,选择CMSIS->CORE、Device->Startup、Device->StdPeriph Device->Framework、Device->StdPeriph Device->Flash,新建并添加main.c文件;

3-2、添加代码:

1 #include “stm32f10x.h”
2 #include “stm32f10x_flash.h”
3
4 int main(void)
5 {
6 NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
7 FLASH_Unlock();//解锁flash
8 FLASH_ReadOutProtection(DISABLE);//解除读保护
9 return 0;
10 }
3-3、设置Option参数

3-3-1、在Device选项卡中选择STM32F103C8型号;

3-3-2、在Target选项卡中设置8MHz,选择Use MicroLIB,sram的起始地址为0x2000 0000,此型号芯片ram大小为20KB,即0x5000。因此将ROM划分16KB,填入0x4000,RAM划分为4KB,起始地址为0x2000 4000,大小为0x1000;
在这里插入图片描述

3-3-3、在Output选项卡中选中“Create HEX File”;

3-3-4、在C/C++选项卡中Define栏中填入:VECT_TAB_SRAM;

在这里插入图片描述

3-3-5、在Linker选项卡总先取消选择Use Memory Layout from Target Independent,更改R/O Base为0x20000000,更改R/I BASE为0x20004000,在选择Use Memory Layout from Target Independent;

在这里插入图片描述

3-3-6、在Debug选项卡中根据实际情况选择调试器,这里选择ST-LINK,取消选择Load Application at Startup,在工程文件夹中新建一个txt文件,改名为RAM2.ini,打开并复制如下代码,并在Initialization File一栏中加载此文件;

/******************************************************************************/
/* RAM.INI: RAM Initialization File                                           */
/******************************************************************************/
// <<< Use Configuration Wizard in Context Menu >>>                           // 
/******************************************************************************/
/* This file is part of the uVision/ARM development tools.                    */
/* Copyright (c) 2005-2007 Keil Software. All rights reserved.                */
/* This software may only be used under the terms of a valid, current,        */
/* end user licence from KEIL for a compatible version of KEIL software       */
/* development tools. Nothing else gives you the right to use this software.  */
/******************************************************************************/

FUNC void Setup (void) {
  SP = _RDWORD(0x20000000);          // Setup Stack Pointer
  PC = _RDWORD(0x20000004);          // Setup Program Counter
 _WDWORD(0xE000ED08, 0x20000000);   // Setup Vector Table 
}

LOAD ARM\Blinky.axf INCREMENTAL      // Download

Setup();                             // Setup for Running
g, main

3-3-7、在Utilities选项卡中Init File一栏加载RAM.ini文件,取消选择Update Target before Debugging;

在这里插入图片描述

3-3-8、在Utilities选项卡中点击Setting,在弹出的窗口中选择Do not Erase,并设置RAM和ROM地址;

在这里插入图片描述

3-3-9、点击调试按钮,进入调试窗口后按F5,flash即可解锁,将芯片断电,跳线帽恢复至0、0,可以正常下载程序。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值