本帖最后由 织梦狼 于 2015-5-13 09:05 编辑
目的:
百度上据说STM32 FALSH 只有刷个千来遍,刷坏了需要重新换芯片,以目前咱们调试水平不刷个几万遍布估计很难成为高手。 因此为了在成为高手的路上减少MUC牺牲,减少大家RMB的损失,特记下此过程与大家分享。 试验材料: 开发板: | STM32F072RB-Nucleo 1块 | 杜绑线: | 2根 | 2K电阻: | 1个 | 软件 | Keil5\st-link驱动\stvp\ |
过程:
查阅 《STM32 F0XXXX参考手册》ST文档编号为RM9001,以记录要想从SRAM运行,需要修改BOOT0和BOOT1设置,具体如下表: file:///C:\Users\YAO-XI~1\AppData\Local\Temp\msohtmlclip1\02\clip_image001.png
在STM32F072RB-Nucleo的用户手册上查询电路图,发现BOOT0已被R33拉为0了。因此使用其上拉需要使用2K电阻串入3.3V电压使用引脚置为1。
file:///C:\Users\YAO-XI~1\AppData\Local\Temp\msohtmlclip1\02\clip_image002.png
从开发板用户手册了解了BOOT0脚已引到CN7插座的7脚,旁边VDD为3.3V电压,因此使用杜绑线很容易就可以串入上拉电阻使其变为1。 file:///C:\Users\YAO-XI~1\AppData\Local\Temp\msohtmlclip1\02\clip_image003.png 下图是接线图 file:///C:\Users\YAO-XI~1\AppData\Local\Temp\msohtmlclip1\02\clip_image004.png
完成BOOT0的电路改动后,从RM9001文档中得知F0BOOT1已由原来物理引脚改为在FLAHS 内存中设置了。
file:///C:\Users\YAO-XI~1\AppData\Local\Temp\msohtmlclip1\02\clip_image005.png
ST公司提供了STVP软件用于修改FLASH内容。装好ST-LINK驱动,打开STVP按以下编号进行操作把BOOT1改为1。 file:///C:\Users\YAO-XI~1\AppData\Local\Temp\msohtmlclip1\02\clip_image006.png
以上就完成了BOOT0和BOOT1的设置,这是在SRAM调式程序先决条件。
接下来需要在KEIL的软件项目中进行一些配置才会下载到SRAM中运行。
1、新增项目调试目标 SRAM file:///C:\Users\YAO-XI~1\AppData\Local\Temp\msohtmlclip1\02\clip_image007.png
2、从RM9100 文档 中查得SRAM起始地址 为0x20000000,把MCU的8K SRAM空间分成4K代码空间、4K程序运行空间。 file:///C:\Users\YAO-XI~1\AppData\Local\Temp\msohtmlclip1\02\clip_image008.png
3、钩选两项输出。——具体作用未知,只百度到前人经验,这里原样引用。 file:///C:\Users\YAO-XI~1\AppData\Local\Temp\msohtmlclip1\02\clip_image009.png
4、DEBUG设置如下图所示。 file:///C:\Users\YAO-XI~1\AppData\Local\Temp\msohtmlclip1\02\clip_image010.png
其中百度出SRAM.INI文件内容如下,在KIEL建立。在本实验中证明不需要也可以。yao-xiaorong 于 2015/04/17 16:31 修改 /******************************************************************************/ /* 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. */ /***************************************************myowlQQ:281459298**********/ FUNC void Setup(void){ SP=_RDWORD(0x20000000); //Setup Stack Pointer PC=_RDWORD(0x20000004); //Setup ProgramCounter _WDWORD(0xE000ED08,0x20000000); //Setup Vector TableOffset Register } LOAD STM32F072RB-Nucleo\STM32F072RB-Nucleo.axfINCREMENTAL Setup(); g, main /*****************代码至此结束*************************************/
其中红色路径的AXF为项目构建生成的文件,存在于项目输出的目录当中。 file:///C:\Users\YAO-XI~1\AppData\Local\Temp\msohtmlclip1\02\clip_image011.png
5、修改DEBUG中代码下载的目的地址和RAM地址。 file:///C:\Users\YAO-XI~1\AppData\Local\Temp\msohtmlclip1\02\clip_image012.png
6、确定UTILITIES中的内容与DEBUG设置的一致。 file:///C:\Users\YAO-XI~1\AppData\Local\Temp\msohtmlclip1\02\clip_image013.png
至此在RAM中调试代码已具备软硬条件。
现在我们打开开发板的GPIO例子试试,是否下载到内存中调式 file:///C:\Users\YAO-XI~1\AppData\Local\Temp\msohtmlclip1\02\clip_image014.png
开板买来时已经烧入这段闪灯的代码。现在我们将代码改成长亮然后下载调式是否能够运行,完了将BOOT0的杜绑线拨掉,将程序环境反原为FLASH启动,以验证长亮的代码时是否真的是在RAM中运行的。
如果还原后为闪灯效果则说明我们调试长亮的代码时是在内存中运行的,并没有覆盖FLASH中闪灯代码,实验成功。 闪灯代码: file:///C:\Users\YAO-XI~1\AppData\Local\Temp\msohtmlclip1\02\clip_image015.png
长亮代码: file:///C:\Users\YAO-XI~1\AppData\Local\Temp\msohtmlclip1\02\clip_image016.png
|