您的位置:首页 > 其它

stm32f10x如何设置成SRAM的全过程

2017-07-23 21:37 218 查看
1、设置硬件。让BOOT1与BOOT0引脚都为高电平,即BOOT1和BOOT0都为1。设置STM32程序启动方式为SRAM。

2、新建一个文件夹作为程序编译时的输出。这个是为将SRAM编译输出的文件集中在一起。最好不要使用之前的输出文件夹。

3、新建一个文件。这是SRAM模式的Debug文件。保存着一些调试信息。

文件的内容如下,自己新建的文件,可以直接复制内容过去进行简单修改:

/******************************************************************************/

/* Dbg_SRAM.ini:用于SRAM调试*/

/******************************************************************************/

FUNC void Setup(void)

{

 SP = _RDWORD(0x20000000);               //设置堆栈指针

 PC = _RDWORD(0x20000004);               //设置PC指针

 _WDWORD(0xE000ED08, 0x20000000);        //设置中断向量表地址

}

/*这条语句需要修改为当前axf文件位置,这个axf文件是编译后生成的,可以在初次编译前不设置,到编译后再设置*/

LOAD .\SRAMOutput\Test.axf INCREMENTAL     //装载代码到CPU的SRAM,工程选择就不能再选择Load Application are Startup

Setup();    //调用Setup函数进行设置

g, main                                 //运行到main函数

4、设置target Options...。这里要设置的比较多,直接截图了。

    

4.1、首先是设置Target选项

从上面可以看出,我的芯片是STM32F103C8芯片,因此有关寄存器地址段可以按照自己芯片的相关信息进行设置。

从上面可以看出需要设置代码和数据放在什么地址域里,可以根据自己的代码和数据量适当调整。

4.2、下面设置Output选项,选择输出位置为刚才新建的文件夹,一样需要输出.hex文件,名字随自己改或不改。

4.3、继续设置C/C++选项。主要是在原有基础上添加VECT_TAB_SRAM。这是为了设置SRAM运行的中断向量。在

system_stm32f10x.c文件中有相关VECT_TAB_SRAM的定义。应该去找找如果有,设置这里就这样就可以,如果没有

则需要手动在main函数中设置中断语句。

如果在system_stm32f10x.c中没有如下语句,则需要在main函数中输入如下语句

输入如下语句:

#ifdef  VECT_TAB_RAM  

/* Set the Vector Table base location at 0x20000000 */ 

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 

#else  /* VECT_TAB_FLASH  */ 

/* Set the Vector Table base location at 0x08000000 */ 

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   

#endif

或者直接加

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 

4.4、设置Debug选项。原本的JLink下载选项不变,但原本的Load Application...不在选上。添加刚刚新建的.ini文件到这里。

这里第一项的JLink后面的Setting需要设置

向上面一样,首先能够获取JLink仿真器和设备的信息。然后设置Flash Download。

从上面可以看到有些信息跟刚才设置是一一对应的,所以需要按照你先前设置的来。设置好就可以OK这里了一项了。

4.5、设置Utilities选项,这里的调试器选择跟Debug选项一样,勾选Update...。在设置Setting。

如果刚才的Flash Download设置正确,那么这里的Setting选项也会跟着变化。

这样就完成了基本设置。

5、进行程序调试。

为了判断是否设置正确,首先设置BOOT0为低电平,即为0,下载一个简单的,像闪烁LED,或者流水灯一样的程序到Flash中。这时上电会有一个闪烁的灯,就能知道是从Flash运行的。

下一步将BOOT0再改回高电平,即为1,开始测试SRAM设置。

5.1、编译,下载。有的讲,可以不下载,直接点调试。我测试时是不可以不下载的。

5.2、调试。我已经开始运行了,说明程序运行时可以的。如果不能运行,很有可能没下进去,或没设置对。

调试时现象也正确。

5.3、最后一步,为了证明是在SRAM中,直接给开发板断电重启,发现不执行任何程序,说明SRAM里数据丢失,没有程序了。

然后把BOOT0接低电平,即为0,在重启开发板,LED正常闪烁。

表示,刚刚程序调试时是下载到SRAM中的,Flash没有被擦除,由此保护了Flash。

谢谢各位阅读。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  stm32 SRAM 调试