OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 12103|回复: 24

STM32F130ZET6执行Nor Flash程序的方法

[复制链接]

7

主题

188

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2280
金钱
2280
注册时间
2013-12-16
在线时间
448 小时
发表于 2015-4-20 23:33:51 | 显示全部楼层 |阅读模式



STM32F130ZET6执行Nor Flash程序的方法

网上查了很多资料,但都很零碎不是很完整,这里我系统总结一下从0开始建立一个使用外部NOR Flash的程序的方法。

Nor Flash是通过FSMC总线可以直接读写的Flash存储器,掉电不丢失,相比NandFlash成本高,容量小,但可以作为程序存储器使用,即可以直接在NorFlash上执行代码,NandFlash虽然也可以执行代码,在至少在STM32中是不支持的,可能ARM7都是不支持的。

STM32本身Flash容量较小,不能建立大型项目,或者在代码中有大量数据时就不够用了,至少在我一直STemWin时就不能全开所有的Demo程序,很不爽。当然你将数据存储在SD卡或Flash中在通过修改代码实现数据的读取,但中会有直接读取数组方便吗?而且读取数据也不能一次全部读出来,不然RAM又不够用了,得分多次读,不然就得在外扩RAM,怎么都没有以代码形式读取NorFlash方便。

所有就有了这篇文章。

如果要在NorFlash中执行代码或放置数据要分下面几个步骤:

1.生成可以通过JTAG烧写代码到NorFlash的算法。

2.配置MDK环境,设置外部ROM地址,长度,并添加第一步生成的Flash算法。

3.配置需要放置在NorFlash中的代码选项。

下面再详细解说一下这些步骤的实现。

这里以SST39VF160为例。

1. 生成可以通过JTAG烧写代码到NorFlash的算法

1)      新建一个工作目录,如:SST39VF160

2)      x:\Keil_v5\ARM\Flash\STM32F10x\下的所有文件拷贝到SST39VF160目录下。

x是你的MDK安装的盘符,Keil_v5是你MDK安装的目录,老版本是Keil


     3)      x:\Keil_v5\ARM\Flash\SST39x160x\下的FlashPrg.c文件拷贝到SST39VF160目录下,覆盖同名文件。

4)      x:\ Keil_v5\ARM\Flash\下的FlashOS.h文件拷贝到SST39VF160目录下。

5)      打开STM32Fx.uvprojx项目

6)      打开文件FlashDev.cFlashPrg.c#include "..\FlashOS.H"改为#include "FlashOS.H"


7)      打开x:\Keil_v5\ARM\Flash\SST39x160x目录下的FlashDev.c文件,其他型号Flash要打开对于型号的目录。MDK型号很全,应该都能找到。

8)      复制下面代码到FlashDev.c文件,复制在#include "FlashOS.H"一行后面。


然后修改如下



其中主要注意两点,一是增加宏定义SST39x160x,这个随你喜好起名,只要后面用到时跟这个一致就行。二是将基地址由0x000000改为0x64000000,这个是STM32连接NorFlash的地址,如果你的不是就按照你的实际情况修改。

另外还要修改FlashPrg.c文件,其中Nor Flash16位还是8位模式,一定要搞清楚,尤其是在发送命令和写数据时。

Nor Flash是挂在FSMC总线上的,该算法要有FSMC总线的初始化,且要写在初始化函数里。即

int Init (unsigned long adr, unsigned long clk, unsigned long fnc)

{

base_adr = adr;

FSMC_NOR_Init();

return (0);

}

FSMC_NOR_Init()要你自己写。

SST39x160x的代码如下:

 

/*

 *  Initialize Flash Programming Functions

 *    Parameter:      adr:  Device Base Address

 *                    clk:  Clock Frequency (Hz)

 *                    fnc:  Function Code (1 - Erase, 2 - Program, 3 - Verify)

 *    Return Value:   0 - OK,  1 - Failed

 */

void FSMC_NOR_Init(void)

{

RCC->AHBENR|=1<<8;       //使能FSMC时钟    

RCC->APB2ENR|=1<<5;      //使能PORTD时钟

RCC->APB2ENR|=1<<6;      //使能PORTE时钟

 RCC->APB2ENR|=1<<7;      //使能PORTF时钟

RCC->APB2ENR|=1<<8;      //使能PORTG时钟   

 

//PORTD复用推挽输出      

GPIOD->CRH&=0X00000000;

GPIOD->CRH|=0XBBBBBBBB; //D8,9,10,11,12,13,14,15

GPIOD->CRL&=0XFF00FF00;

GPIOD->CRL|=0X00BB00BB; //D0,1,4,5          

//PORTE复用推挽输出      

GPIOE->CRH&=0X00000000;

GPIOE->CRH|=0XBBBBBBBB; //E8,9,10,11,12,13,14,15

GPIOE->CRL&=0X00000FFF;

GPIOE->CRL|=0XBBBBB000; //E3,4,5,6,7

//PORTF复用推挽输出

GPIOF->CRH&=0X0000FFFF;

GPIOF->CRH|=0XBBBB0000;  //F12,13,14,15                                                                                         

GPIOF->CRL&=0XFF000000;

GPIOF->CRL|=0X00BBBBBB;  //F0,1,2,3,4,5

 

//PORTG复用推挽输出 PG9->NE2                                                                                    

GPIOG->CRH&=0XFFFFFF0F;

GPIOG->CRH|=0X000000B0; //G9

       GPIOG->CRL&=0XFF000000;

GPIOG->CRL|=0X00BBBBBB;//G0,1,2,3,4,5                               

 

 

FSMC_Bank1->BTCR[2] =0X00001059;

FSMC_Bank1->BTCR[3] =0X10100705;

FSMC_Bank1E->BWTR[2]=0X0FFFFFFF;

}

 

然后,打开项目属性


按照下面的示意图修改

修改ROM1地址


修改输出文件名,当然你不想改也可以,改了只是方便以后查找识别


定义预编译宏定义


完成这些之后进行编译,就会得到SST39x160x.FLM文件,将其复制到x:\Keil_v5\ARM\Flash目录中。

到此我们就有了烧写SST39VF160的算符文件。

以后我们就可以选到SST39VF160芯片,如下图



2. 配置MDK环境,设置外部ROM地址,长度,并添加第一步生成的Flash算法。

新建一个项目或打开你现有的项目,不过你的项目一定要有你的NorFlash的初始化代码,不然放在NorFlash中的代码还是不能执行。

在你的项目中在用的NorFlash的代码前必须完成对NorFlash的初始化。

下面介绍一下MDK环境的设置

1)  打开项目属性,设置ROM1的地址,注意ROM1不要打钩。


2)  选择Norflash芯片





到此MDK环境设置就可以了

3 .配置需要放置在NorFlash中的代码选项。

选中你想要放置在NorFlash中的代码文件,或文件夹,右键,选中属性设置。


Code/Const选则到外部NorFlash上。


这样的这个文件的代码将会下载到NorFlash中。

也可以通过修改分散文件的方式实现



到此,你的程序就可以在内部Flash和外部的NorFlash中运行了。

当然一定要在使用前初始化NorFlash

祝你成功。


STM32F130ZET6执行Nor Flash程序的方法.doc

386.5 KB, 下载次数: 1392

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-4-20 23:56:45 | 显示全部楼层
图片一个都没有。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

188

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2280
金钱
2280
注册时间
2013-12-16
在线时间
448 小时
 楼主| 发表于 2015-4-21 20:31:42 | 显示全部楼层
没人顶呀,都不需要吗?
回复 支持 反对

使用道具 举报

29

主题

244

帖子

0

精华

高级会员

Rank: 4

积分
944
金钱
944
注册时间
2014-10-9
在线时间
93 小时
发表于 2015-4-22 08:45:56 | 显示全部楼层
顶,好东西,虽然现在用不到,以后应该用得到,谢谢楼主啦
淘宝小店,没事可以点一下增加点流量http://shop69767205.taobao.com/
回复 支持 反对

使用道具 举报

3

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
538
金钱
538
注册时间
2012-7-19
在线时间
63 小时
发表于 2015-4-22 10:32:54 | 显示全部楼层
nice,lz不错。。。首先给出了一个生成flash编程算法的教程,建议标题上增加这个内容,内容和标题更加对应

再有,就是你的教程,其实是部分代码在外部norflash运行的问题,并不是全部代码在外部norflash,这个和代码在ram的做法有些类似,也有不同

总体而言,这个教程相当不错,lz幸苦了,建议加精。。。
回复 支持 反对

使用道具 举报

3

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
538
金钱
538
注册时间
2012-7-19
在线时间
63 小时
发表于 2015-4-22 10:35:51 | 显示全部楼层
如果楼主搞出个全部代码在外部norflash运行的方案,那就更厉害了

貌似中断向量映射到外部norflash有点问题
回复 支持 反对

使用道具 举报

13

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2015-1-16
在线时间
11 小时
发表于 2015-10-29 10:42:16 | 显示全部楼层
楼主 ,小弟也在搞这个,一直出错帮帮忙呗
Contents mismatch at: 640001D5H  (Flash=FFH  Required=0BH) !
Contents mismatch at: 640001D6H  (Flash=FFH  Required=8AH) !
Contents mismatch at: 640001D7H  (Flash=FFH  Required=4BH) !
Contents mismatch at: 640001D8H  (Flash=FFH  Required=00H) !
Contents mismatch at: 640001D9H  (Flash=FFH  Required=12H) !
Contents mismatch at: 640001DAH  (Flash=FFH  Required=91H) !
Contents mismatch at: 640001DBH  (Flash=FFH  Required=2EH) !
Contents mismatch at: 640001DCH  (Flash=FFH  Required=00H) !
Contents mismatch at: 640001DDH  (Flash=FFH  Required=16H) !
回复 支持 反对

使用道具 举报

7

主题

35

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
369
金钱
369
注册时间
2014-4-3
在线时间
30 小时
发表于 2015-10-29 16:43:41 | 显示全部楼层
楼主,我的电脑没有x:\Keil_v5\ARM\Flash\SST39x160x\下的FlashPrg.c这个文件呀,能否提供不?
回复 支持 反对

使用道具 举报

7

主题

188

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2280
金钱
2280
注册时间
2013-12-16
在线时间
448 小时
 楼主| 发表于 2015-11-20 08:27:49 | 显示全部楼层
回复【8楼】zwh751279833:
-------------------------
附件中文件里有的
回复 支持 反对

使用道具 举报

15

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
357
金钱
357
注册时间
2013-12-9
在线时间
48 小时
发表于 2016-1-15 16:52:16 | 显示全部楼层
好贴啊,可惜我的是STM32F429,我现在外扩了NandFlash,想直接通过keil把程序(主要是图片资源)下载到NandFlash.....不知道有办法吗
回复 支持 反对

使用道具 举报

9

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2013-4-26
在线时间
19 小时
发表于 2016-8-9 17:03:46 | 显示全部楼层
好贴啊,准备用3210B ,刚开始接触外扩Nor Flash,请问LZ,如果将程序放到外部Nor Flash 中了,STM32内部的FALSH呢??是否没有使用了??
回复 支持 反对

使用道具 举报

9

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2013-4-26
在线时间
19 小时
发表于 2016-8-9 17:11:29 | 显示全部楼层
LZ ,请问“.生成可以通过JTAG烧写代码到NorFlash的算法。”我使用4线的SWD是否也是可以,还是一定是JTAG方式的10pin接口。
回复 支持 反对

使用道具 举报

5

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2016-2-18
在线时间
13 小时
发表于 2016-8-30 11:25:44 | 显示全部楼层
大神啊~我等凡人膜拜……………………学会了不少东西,鸡冻!!!!
回复 支持 反对

使用道具 举报

7

主题

188

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2280
金钱
2280
注册时间
2013-12-16
在线时间
448 小时
 楼主| 发表于 2016-9-2 16:08:11 | 显示全部楼层
追求卓越2013 发表于 2016-8-9 17:11
LZ ,请问“.生成可以通过JTAG烧写代码到NorFlash的算法。”我使用4线的SWD是否也是可以,还是一定是JTAG方 ...

SWD也可以下载,测试过
回复 支持 反对

使用道具 举报

6

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2016-4-9
在线时间
20 小时
发表于 2016-10-7 17:18:06 | 显示全部楼层
顶一个
回复 支持 反对

使用道具 举报

16

主题

146

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7125
金钱
7125
注册时间
2015-1-23
在线时间
104 小时
发表于 2016-12-6 08:53:45 | 显示全部楼层
支持一下
回复 支持 反对

使用道具 举报

2

主题

3

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-10-11
在线时间
7 小时
发表于 2016-12-9 16:50:16 | 显示全部楼层
好东西,绝对要顶。
回复 支持 反对

使用道具 举报

5

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2015-5-13
在线时间
7 小时
发表于 2017-6-16 11:36:32 | 显示全部楼层
谢谢分享,目前正在考虑在Nor里直接运行程序的方案
回复 支持 反对

使用道具 举报

0

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
489
金钱
489
注册时间
2016-12-21
在线时间
76 小时
发表于 2017-11-8 10:49:37 | 显示全部楼层
多谢分享
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2016-10-28
在线时间
20 小时
发表于 2019-8-21 13:56:25 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-5-25
在线时间
7 小时
发表于 2019-10-31 20:51:33 | 显示全部楼层
好贴,顶一个

回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2019-7-13
在线时间
1 小时
发表于 2019-11-6 11:23:01 | 显示全部楼层
请问lz能否发一下生成的flm文件或者编程算法的工程 ,按照lz的步骤始终无法成功
回复 支持 反对

使用道具 举报

7

主题

188

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2280
金钱
2280
注册时间
2013-12-16
在线时间
448 小时
 楼主| 发表于 2019-11-15 08:00:07 | 显示全部楼层
无敌亭 发表于 2019-11-6 11:23
请问lz能否发一下生成的flm文件或者编程算法的工程 ,按照lz的步骤始终无法成功

NorFlash运行程序.rar (6.23 MB, 下载次数: 14)
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2020-4-4
在线时间
17 小时
发表于 2020-6-11 12:55:06 | 显示全部楼层
学习下,准备上stm32h系列用到外挂norflash
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2024-6-12
在线时间
5 小时
发表于 2024-6-12 09:25:16 | 显示全部楼层
楼主你好,有偿做一个stm32f103zet6+sst39vf6401b的jflash配置文件,如有时间加我13332837133.谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 19:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表