近期使用工程代码进行烧录的时候出现program algorithm问题,
Cannot Load Flash Programming Algorithm
针对此问题的解决方案做个记录。
情景复现:
这里报错我们看到是No Algorithm found for:08000000H - 08006647H
尝试解决:
这里初始烧录算法是没有的,需要我们进行手动添加,我使用的板子是F4系列的,所有这里我选择对应的算法。
如果没有对应的算法需要去下载,
下载地址:http://www2.keil.com/mdk5/legacy
这里根据自己使用的STM32芯片型号进行选择。我这个是Cortex-M系列,所以选择左边的,下载后双击打开,一路next即可。
下载完成后进入debug的setting
这里有很多,主要是对应的FlashSize,我们烧录一般都是烧录到Flash中,Flash的大小可以参考芯片手册的Memory mapping
原理图。这里有各个分区的起始地址。这里算一下大小080F FFFF-0800 0000=000F FFFF
,拿得到的结果除以1024为1023,也就是说Flash大小为1Mbyte
所以这里设置为1M,我们看这里的Address Range也符合我们原理图中的标识。因此这里设置应该是正确的。编译后烧录成功。
配置新工程烧录地址相关
上面是我遇到问题的情况的解决方法配置,现在阐述一下对于一个新的工程新的型号板子怎么配置烧录。
1.配置ROM与RAM
这边正常情况来说Flash就是ROM,SRAM就是RAM
ROM掉电不丢失,RAM掉电丢失,我们烧程序是烧到Flash中去的,开机后单片机从RAM中取数据,大致的流程就是ROM->RAM->CPU
我们通过看原理图知道了ROM和RAM地址范围,那么在配置的地方就可以根据原理图来进行设置。
这里IROM1即Flash地址,0x0 0000~0xF FFFF的范围即0x10 0000的大小,因为从0开始。后面RAM1与RAM2的size大小分别为1C000和4000都是一个道理。
这里设置不好,后面对应烧写的时候就会报错。
这里是调试的配置,这里RAM for Algorithm 地址是SRAM的起始地址
后面的size设置需要看具体情况,一般设置默认值即可。一般设置为0x1000
。
上面是编译成功后出现的Program Size,各个含义如下。
Code : 是程序中代码所占字节大小
RO-data :程序中所定义的指令和常量大小 (Read Only)
RW-data :程序中已初始化的变量大小 (Read/Write)
ZI-Data :程序中未初始化的变量大小 (Zero Initialize)
我们可以通过这个来计算我们需要分配的size大小,不过一般我们debug
的setting
中使用默认值就好了。文章来源:https://uudwc.com/A/3wj6b
关于烧录的地址设置大体就是这样,毕竟刚入门,能力有限,这里仅记录自己遇到的问题以及解决方案。还有通用的配置情况。文章来源地址https://uudwc.com/A/3wj6b