2024年5月27日发(作者:)

程序的分层和烧写

系统程序分共为三层,最顶层为APP,固化在Nor-flash里面,地址从0x64000000开

始;中间层为Driver驱动层,存放驱动或对硬件初始化,固化在内flash上,地址从

0x08003000开始,视程序大小而定;最底层为Bootload层,存放DFU程序,用于firmware

update,固化在内flash上,地址从0x08000000开始,视程序大小而定。如图1.1所示

图1.1

在介绍分程编时,介绍一个验证实验,在例程中,先用J-LINK下载BootLoader文件

下的BootLoader程序;

其次,打开STM32_LED文件,编译这个APP工程,生成二进制文件,注意,因为

APP是放在NORFLASH上的,所以on-chip框的IROM1地址是从0x64000000开始;编

译完后,再生成生成DFU文件,方法下面有介绍,并通过DfuSe Demonstration烧写到外

部nor-flash里。

最后,打开STM32_NOR_CodeExecute文件,通过J-LINK下载执行文件,重启后,

程序会跳到外部flash上执行。

STM32的DFU文件生成方详解

最近好象很多人都在问关于DFU文件的使用问题,正好我们刚研究过,给大家讲讲我

们的用法。

第一步,准备好要转换的文件,bmp和wav格式,ST原版的DEMO就是这两种格式,

后缀改为.bin(也可不改,只是选文件类型过滤选ALL Files(*.*)).

MDK直接生成BIN文件设置下文有解释。

第二步,开始->STMicroelectronics->DfuSe,运行DFU File Manager,并且选择第一项,

即(I want to GENERATE a DFU file from S19,HEX,or BIN Files),这个是生成DFU文件,

第二项是解压DFU文件,点OK进入下一步。

图2.1

第三步,左边的三个文本框是产品ID,版本信息,可以不用动它,右边有个Target文本

框,这个是选择生成的DFU文件写到哪个存储器里,这个非常重要,一定要写对,前面问

DFU不成功的都可能是这个问题,ST原版有三个存储器可写,分别是(0,片内Flash),

(1,外部SPI Flash),(2,外部Nor Flash),这里我们选择写到外部Nor Flash里面,所以

改为 2,下面是芯片的名称可以不管,只要上面的数字对了就可以(见图2.2)。点击

进入下一步。

图2.2

第四步,这里是添加你要转换的文件了,首先将地址该为你要存放的位置,如64000000,

这是nor flash 的起始地址,当然根据你的片选分配的不一样这个地址也是不一样的,然后

点右边的...按钮选择一个你要添加的文件点打开,再点Add to list,一个文件就加进来了,下

面显示有这个文件的起始地址和结尾地址,要再添加文件就在前一个文件的结尾地址上加1

设置为下一个文件的起始地址,这样一直把你要添加的文件加完,点OK返回(见图2.3)。

点右下方的按钮选择你要保存DFU文件的目录和输入文件名称再点保存,一个

DFU文件就生成了。

图2.3

这里特别要注意的就是Target目标序号的设置和添加文件时地址的设置要

正确,否则就有问题。

假设工程文件的名字为

STM32-FD-FLASHLED

, 下面将具体说明这个操作步骤:

1、打开

STM32-FD-FLASHLED

文件中的

STM32-FD-FLASHLED

.uv2工程文件;

2、打开Options for Target ‘

STM32-FD-FLASHLED

’对话框,选择User标签页;

3、构选Run User Programs After Build/Rebuild框中的Run #1多选框,在后

边的文本框中输入

C: --bin -o ./Obj/ ./Obj/

命令行;

注意路径,MDK V4 是BIN40

4、重新编译文件,在./output/文件夹下生成了Axf_To_文件。

如果需要在NOR 中直接运行代码。那么编译NOR中运行的程序时,IROM 范围需要指向

NOR的物理地址。

STM32不支持中断向量表定位在外部存储器,因此中断向量表需要复制到CPU内部RAM.

在CPU内部Flash 写一段引导程序, 实现如下功能:

1、配置FSMC 以支持NOR Flash

2、复制NOR 中的中断向量表至CPU内部RAM

3、设置中断向量地址寄存器,指向内部RAM

4、读取NOR 中的堆栈地址,并设置SP

5、设置PC指针,跳转到NOR中执行