中级会员
 
- 积分
- 402
- 金钱
- 402
- 注册时间
- 2021-1-9
- 在线时间
- 51 小时
|
本帖最后由 Siryel 于 2021-8-17 09:05 编辑
想要将程序下载到单片机内部的SRAM里运行,查了一些资料又折腾了好多时间才大致整个差不多,在stm32f103c8t6、stm32f103zet6、stm32f401ccu6上都实验过了,都能从SRAM中启动并运行,但是每个型号(可能是板子的问题)又或多或少会出现一些问题,导致下载不进去,或者下载后不运行。我仅以原子的战舰板子为例,说一下简单的下载流程,大家也好少走点弯路。这里说明一下,从SRAM启动下载程序的方式不唯一,可以用串口下载,也可以用ST-LINK下载,或者其他下载器下载。由于我没有JLINK下载器,只能使用串口或者ST-LINK实验,但是在战舰板子上试成功的只有串口(奇怪的是不能用ST-LINK,ST-LINK在其他型号板子上是可以用的),所以我只说用板子自带的串口下载方式。
官方手册上给的从SRAM启动需要将BOOT0和BOOT1都配置为1,这是使用仿真器的配置方式。而用串口下载的原理是:使用单片机内部固化的ISP自举程序,将程序下载到内部SRAM。其实和原子哥讲的“第五十二章 串口IAP实验”道理差不多。由于截图太麻烦,所以只能纯文字描述了。
首先,第一步,硬件配置:BOOT0=1,BOOT1=0。就是配置一下板子上的BOOT跳线帽,见下图。
然后,第二步,就是在keil5里配置了。以下按步骤来说:
1.首先写一个编译通过,并且生成了.hex文件的程序(比如简单的闪灯程序)
2.点击魔术棒(就是Options for Target按钮),再点击Target按钮,然后修改IROM1的Start为0x20000200,Size为0x8800,修改IRAM1的Start为0x20009000,Size为0x5000 。这个是配置虚拟FLASH空间和RAM空间大小,具体你想将这64KB的SRAM怎么分配,数值由你计算好然后填进去。我配置的虚拟FLASH占0x8800(即34KB),RAM占0x5000(即20KB)。注意虚拟FLASH的起始地址是0x20000200(不是0x20000000),RAM起始地址在虚拟FLASH空间之后,两者不能交叉。
3.还是在魔术棒里,点击C/C++按钮,在Preprocessor Symbol的Define里填入“STM32F10X_HD, USE_STDPERIPH_DRIVER,VECT_TAB_SRAM”
4.还是在魔术棒里,点击Linker按钮,先将“Use Memory Layout from Target Dialog”前面的对勾取消掉,然后右边的“R/O Base”和“R/W Base”就会亮起,修改R/O Base为0x20000200,修改R/W Base为0x20009000(就是修改成虚拟FLASH和RAM的起始地址),然后再将“Use Memory Layout from Target Dialog”前面的对勾勾上。
5.还是在魔术棒里,点击Debug按钮,由于使用串口下载,所以将左侧的“Use Simulator”前的圆圈勾选上。最后点击下方的“OK”按钮,结束魔术棒的配置。
6.再点击“Rebuild”按钮,重新全编译一遍程序,生成新的.hex文件。
最后,第三步,就是下载程序到SRAM中了。打开FlyMcu串口下载软件,最下方选择“不使用RTS和DTR”,然后将刚刚生成的.hex文件加载进来。最后用USB线连接板子和电脑,点击“开始编程”按钮下载程序。此时程序就会下载到单片机内部的SRAM中了,而且下载速度还是比较快的。下载完程序就开始在内部SRAM中跑了。但是有个问题上,按了板子上的复位键之后程序会被清除掉(这个情况有点奇怪,因为我在别的板子上按复位键程序不会被清),清除掉后只能再重新下载一遍,也不费劲。
以上的配置操作其实是在修改.sct文件,当配置完生成.hex文件后,可以到工程里查看.sct文件内容,里面关于ROM、RAM地址和大小的信息也都被修改成了我们需要的内容。串口的配置还比较简单,如果用ST-LINK下载,就需要考虑到能不能调试程序,那么配置的步骤就会比串口方式要多一些。至于为什么要把程序下载到SRAM里运行就不用我说了吧,大家在查这方面资料时应该多有所了解。
|
-
|