上一篇文章介绍了如何在KEIL中配置ST-LINK实现一键烧写hex文件,可是,我就是想只用自动生成的KEIL文件和工程选项配置来烧写、调试,如何进行呢?
这难道不是一个多余的问题吗?难道自动生成的KEIL工程不能运行的吗?还真的不能运行(烧写失败!),详情见下:
(这也许是TouchGFX当前版本V4.10.0的小bug,期待将来升级后的版本不再有这个问题。)
TouchGFX自动生成的KEIL工程,编译是没有问题的:
图一上图第七行可以看到,0 Error,生成了hex,没有问题。但,按下 F8 烧写快捷键,提示出错:0x9000 0000 地址开始的代码段没有找到相应的烧写算法。这是什么意思呢?让我们来简单说说MCU烧写flash的细节:
图二不同的MCU,其配置的flash物理特性可能是有区别的,读写flash需要一些跟这个flash有关的参数,比如读写周期、等待间隔、读写总线的定义等等,这些参数就是烧写falsh的“算法”。实际进行烧写操作时是分为2个步骤的:首先需要把这些算法加载(download)到MCU内部的RAM中,然后在MCU内部运行代码来具体执行这些算法、读写flash。这样,就容易理解图一提示的错误了:烧写地址 0x0800 0000 (内部flash) 的那些代码没问题,但对于地址 0x9000 0000 (外部flash),因为没有加载对应算法,不知道该怎么读写flash、无法进行烧写。让我们来看看当前的配置中烧写算法加载的情况:
图三 图四图四显示:默认只加载了F7片内2个地址段的flash算法,需要手动添加片外flash算法:点击 Add 按钮,在弹出的窗口中找到本文使用的F769I-DISCO板子对应的算法、并添加进来:
图五试着按下 F8 再烧写一次,又出现了错误:
图六提示:无法加载烧写算法!这是因为download算法文件是需要占用MCU片内RAM空间的,而这个空间大小是由KEIL默认分配好的,一般是0x1000 。现在需要扩大这个空间到0x2000:
图七再次烧写,出现烧写的进度条,直到烧写完毕:
图八如果多次遇到能正常开始烧写、但中途报错、中断烧写的情况,可以改为在KEIL中使用ST-LINK烧写(至少可以烧写的更快!),见这里。
下一节将介绍:如何在IAR中烧写目标文件。
网友评论