你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

用ST-LINK Utility实现外部spiflash程序下载  

[复制链接]
ychf0000 发布时间:2018-3-2 22:47
本帖最后由 ychf0000 于 2018-3-2 22:58 编辑 $ Y, B' m! H* z/ ^

. {6 ~1 d0 T+ z* Z; p     在之前的学习中,一直用外部SPI Flash存放字库文件,之前的数据下载方法是用SD卡拷贝到SPIFLASH中,一直觉得在开发板上学习还算方便,如果在项目中应用,不是很方便,偶然机会,发现ST官方工具STM32 ST-LINK Utility可对外部SPIFLASH直接进行读写。于是尝试在原子精英板STM32 ST-LINK U上进行实验,并成功将字库文件下载到外部SPIFLASH,现把实现方法分享出来,方便大家共同学习,不完善之处还请多多指教!* S" x$ u* W' C0 k

3 B  n$ [0 r# E2 Z平台:原子精英开发板(SPIFLASH芯片型号W25Q128),STM32F103,ST-LINK/V2% X# ^6 Q( R7 i; t

$ G& B- X6 Y- c" r* B准备工作
  d8 D/ {5 |9 `! z# a1. 官网或社区下载软件STM32 ST-LINK Utility v4.2.0 setup.exe,并安装
* y; ]" S8 e  B1 j* B2. W25Q128_STM32F1_Elite.stldr文件制作& l0 E8 w. K( v# ~1 @, N$ \% P
  源码见附件,该文件需要根据自己的硬件平台做出相应的修改' S7 u- ?$ B/ z+ o9 H
3.将制作好的文件放在 安装目录\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ExternalLoader下

' d* S! ~; y3 n2 M4 ?* g+ h4.添加LOADER文件8 e2 Q- E% p1 c1 W
5.在ExternalLoader菜单先对外部SPIFLASH进行读、写、擦除等操作。
* L- e3 D0 k3 g( l
5 g* P4 Y9 s1 R0 A+ f& {3 b1 R5 Z

8 _; r% X  I- ]  d- t

/ C9 @6 O; N/ P5 I6 N- G( w" t4 C" j1 I. q1 O; p( ]  U1 E5 g
) z* r; O" B: w7 ?0 ~

SPIFLASH程序下载工程源码.zip

下载

1.4 MB, 下载次数: 1024

UM0892-User manual.pdf

下载

1021.92 KB, 下载次数: 466

STM32 ST-LINK Utility使用手册

评分

参与人数 4 ST金币 +30 收起 理由
songshiqun2010 + 4 赞一个!
tiantiandayou + 1 很给力!
wofei1314 + 20 很给力!
toofree + 5 赞一个!(拿自己的金币为你点赞).

查看全部评分

赞 收藏 10 评论42 发布时间:2018-3-2 22:47

举报

42个回答
fxb 回答时间:2019-4-7 17:19:55
正想看看怎么生成自己板子的stldr,很有参考作用,谢谢!!
+ t7 o' Y+ h8 @/ l4 x3 ~这些代码应该是ST-LINK写外部FLASH的时候临时装入CPU运行的,效率最重要,可能直接操作寄存器最快
guowei680 回答时间:2018-5-30 21:19:35
请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?
ychf0000 回答时间:2018-3-2 23:00:20
本帖最后由 ychf0000 于 2018-3-15 23:28 编辑 * {4 d9 k8 G5 G! f0 l# F$ @

4 f8 q  x8 Y6 w& c- n第一次发帖,折腾的比较费劲,先将就看吧。
4 u4 ~& o+ ]" R9 [' p5 u正在尝试基于HAL库实现工程编写,进展不是很顺利,实现了再和大家分享吧。。。
& \8 A" B) r. ]/ ?$ j0 K& s; r7 x" J! K) R( \4 P9 Z; B
2018年3月15日 经测试 基于HAL,对外挂SPIflash的下载速度较慢,时间差一倍以上,就不发源码了,推荐用标准库或直接操作寄存器方式。
2 e9 T1 x" i+ k% h1 B; u$ o* Y. W9 v) P
2018年3月10日最新进展      在规避全局变量的情况下,基于HAL库已实现对外挂SPIflash的读写擦除等操作。
9 |+ f5 S$ V, q% J4 h& M
3 N4 Q% Y: F- H$ h3 \/ S% T/ E6 {2018年3月8日进展
& M* D# S! ]' a: u) }/ S6 T经过一段时间的排查发现代码中不能有全局变量,不知道什么原因?实在是没头绪了,希望有各位网友给予指点,实在不行就只有规避全局变量了0 P; m$ b/ M1 A( @. f; o: v
      为查找原因,编写了测试代码,当在软件ST-LINK Utility开始执行读取外部SPIFLASH时,从Init()函数,为此编写了测试代码,正常情况下,开始读时,开发板先看到红灯闪烁5次,紧接着绿灯闪烁5次,再红绿灯同时闪烁(表示进入read()函数),属正常现象。
2 L% b& a8 h: U, b' V7 e       当加入全局变量赋值语句tempdata_test=1后,先是红灯闪烁,间隔约6秒后(程序运行不正常),再红灯闪烁5次,绿灯闪烁5次,再红绿灯同时闪烁。
$ d% ?) k' B6 [$ f$ F7 ]- {(1)测试代码如下:
$ G* i2 i% u3 P% q8 }
  1. static void SetSysClockToHSI64(void);. G! j# a# S: L$ A
  2. int tempdata_test=0;
    , B% O, r+ A- c1 A  X3 I2 H4 t: z
  3. ) v2 j$ @* E" N! J; p- F3 F
  4. //初始化测试代码 , 读SPIFLASH前调用+ e. Y- O/ r0 c. h% U
  5. int Init (void)
    ) J5 f  C+ b/ f
  6. {     3 }( y3 n0 w/ E  y( I: N" f' V
  7.     SystemInit();3 u+ n: C% I+ T8 i% _( J
  8.     SetSysClockToHSI64();   //操作寄存器实现时钟配置
    & H0 A  G9 n- F# r" R% S. ^
  9. 0 c" Y# f% q4 Q( c& s. I) p6 F
  10.     //测试代码=========================================+ e% U  K1 D' n- \) Y" m0 p
  11.     GPIO_DS0_DS1_Init();    //初始化LED显示IO口8 [1 S$ Z" `8 n+ `4 K+ u% Q' [
  12.     //MX_SPI2_Init();        6 _' u- T, C: d& R* U
  13.     LED_TOGGLE0(2);         //红灯闪烁5次        : m& _; H, `" b, V2 A8 [! Z
  14.     tempdata_test=1;                //: s$ V1 ^4 w5 u4 `; H# F) c; G( `
  15.     LED_TOGGLE1(2);         //绿灯闪烁5次
    $ F8 i( b& }' F4 V; j
  16.     //=================================================
    8 j! H/ M- C1 W/ O# |6 s
  17.         return 1;6 v  }3 F3 Y4 F; [4 i3 r; X
  18. }
复制代码
(2)Target.lin文件代码
8 _; k4 `' Z$ l" ]
  1. FLASH_LOADER 0x20000004 PI   ; FlashLoader Functions
    + J  r) Z9 U) u. e4 b" T
  2. {
    6 g2 k$ H0 g, U, S
  3.   PrgCode +0           ; Code
    # C" m" n+ U9 V
  4.   {
    6 E1 H% B! _$ w6 Y
  5.     * (+RO)7 [7 s, e. Z( R2 X4 a3 y
  6.   }
    4 z3 x, T; Z5 W
  7.   PrgData +0           ; Data
    6 F* s4 M! U1 R1 c/ Z/ Q& B* n7 v
  8.   {% v  f/ ^/ P' D4 k5 G1 o+ U+ o
  9.     * (+RW,+ZI)
    , [5 t1 d" l" m$ y2 \, C
  10.   }
    7 O& n7 J, c. ^- d2 ?6 z
  11. }% }$ ]  M4 `0 L1 J0 Z$ |  K
  12. 6 O' ^3 q. q) J+ s
  13. DEVICE_INFO +0               ; Device Info. V" {% C( N' H7 U; C- c
  14. {
    5 V# x9 K* @; X
  15.   DevInfo +0           ; Info structure" D! `* Y9 D& s* H/ h
  16.   {1 Q" U6 y7 _2 @7 E, m
  17.     dev_inf.o
    8 S1 a5 A. Y4 m1 x
  18.   }
    6 ~9 \; w: y* L4 m7 H4 L; ^
  19. }
复制代码

5 D. N2 S# C3 w7 E% Q$ G   ' a# C( @0 u  N- |# T5 x
; p% ~7 c( p2 d

0 r: h7 a4 i: m  y( [* [
七哥 回答时间:2018-3-2 23:38:04
不错,解决了问题,来发贴分享,为你点赞
ychf0000 回答时间:2018-3-3 06:30:50
toofree 发表于 2018-3-2 23:38
9 D5 l! |" o. d4 J7 D不错,解决了问题,来发贴分享,为你点赞
8 X4 F/ O' s" w, u0 B7 H
谢谢大师的热心帮助和鼓励
davidcdw 回答时间:2018-3-4 14:45:56
可以
carlxzl 回答时间:2018-3-4 15:44:17
正在学习
zero99 回答时间:2018-3-9 14:40:42
感谢分享,已汇总到3月技术原创:
( s6 G4 O$ \5 J/ a4 Qhttps://www.stmcu.org.cn/module/forum/thread-615031-1-1.html
shanji 回答时间:2018-3-9 16:05:11
这个要顶,很实用。
lifengliu1 回答时间:2018-3-10 17:35:43
好东西, 必须顶
臭老九 回答时间:2018-4-17 17:36:00
下载1m数据大于时间是??
臭老九 回答时间:2018-4-17 17:36:53
可以直接将flash芯片连接 bios吗??不通过单片机
ychf0000 回答时间:2018-5-16 06:44:54
臭老九 发表于 2018-4-17 17:36
* A3 n' Y& N3 g3 ?4 P2 ?2 \9 M下载1m数据大于时间是??

, f4 T5 G: s* Y9 W! \1分钟差不多
ychf0000 回答时间:2018-6-23 07:40:17
guowei680 发表于 2018-5-30 21:19
* N$ c: {9 }6 t* u6 P+ A请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?

! }. d- h9 [# c! N7 q6 A( p查查spi接口配置和时钟使能对不对
1 C( ]& V5 e) J! \7 ^# w5 R  j
ychf0000 回答时间:2018-6-23 07:42:45
guowei680 发表于 2018-5-30 21:194 X1 C& U. @( L* ]# m# T) [
请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?
2 g7 _6 c% ^: Z! U1 A: J& C/ o
先在你的应用中验证你的spiflash读写正常,再移植过来
123下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版