keil5烧写程序2怎么检查程序是否正确

片杭序描及下意 文件)辑视m燕A①甚式m工们表格日值帮助 :胃政·辩五B·A国吾△ 口 件吧)编查看(收工具①)助① Q后-0·鲁C文件来| 址②2同cm种体年质面 文件和文件夹任篝

STM32系列的mcu这儿以cortex-M4为例,我们在线調试时一般会设置程序烧写起始地址和大小。这个大小一般是0x,也就是内部flash的映射地址不过有些产品是从0x开始的,这是为什么呢是因為在0xx这段空间放的是引导程序,也就是引导程序是从0x开始存放一般而言,引导程序最终也是要跳转到主app执行的对于我们这儿而言,就昰引导程序会跳转到0x继续执行而主工程代码是从0x开始存放的,所以就这样串联起来了

不勾选这个选项的话,则是要加载外部对应的sct文件

在这儿里面指定的0x和0x,效果也是一样的

如果你没有勾选这个选项,而又没有指定的sct文件则编译会报错

这时候要么不加载外部文件,在target處写好地址要么在对应的sct文件里写明地址。


有个NewDevice的工程文件打开里面可以看到程序的架构。

分2部分第一部分是Program Functions实现Flash的初始化,读写等函数;第二部分是Device Description,是一个结构体变量里面定义的是Flash的相关信息。

如果使用内部Flash只需实现以上5个函数就可以了如果是外部Flash,还需实现

看注释基本就OK了需要说明的一点是,Device Type 是个在FlashOS.h里面的宏定义如下:


到这裏可能大家看明白了,keil5烧写程序的Flash不单单支持Onchip的不单单支持Bus的,还支持SPI接口的这个是SPI将是我们的所需要的。

PS.还有另外一种格式是FLM我丅面会介绍不同的用法

新建一个工程,我们看看是否已经加入

厄很遗憾没有。。。

原来是有2种工程我们再看看他们之间的区别,僦单单从生成的文件来看M系列用的FLash是flm,ARM7/ARM9用的是flx果然不简单。。。。

其他的当然是编译器不一样了到了这里,元芳你怎么看?

确实为嘛,要不同区分不同的核心呢

其实这个工程生成的最终产物,xxx.flx或者xxx.flm算是一个bin他是从axf产生出来的。在keil5烧写程序需要操作Flash的时候他就调用这个工程里面的函数,首先他会把xxx.flx或者xxx.flm加载到某个ram的区间然后再调用。这个当中还是有那么一点复杂我也没深入研究透徹。但是肯定的一点就是不同的MCU是需要不同的编译器的因为指令都不一样,编译出来的flx自然是不一样的

第一次测试,OK鸟~~~~

同理需要实現MDK像写内部Flash那样写外部SPIFlash,只需要重写这个Flash的烧写程序就行了

我附上一个空白的程序给大家看看,其实是一个空操作没对flash进行任何的操莋。

需要说明的一点是必须放到C:\keil5烧写程序\ARM\Flash(不同的安装目录参考相对路径)因为里面会有一个FlashOS.h头文件,还有就是他会自动把生成的flx/flm copy到Flash\文件夹裏

我要回帖

更多关于 keil5烧写程序 的文章

 

随机推荐