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

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

[复制链接]
ychf0000 发布时间:2018-3-2 22:47
本帖最后由 ychf0000 于 2018-3-2 22:58 编辑 # L; \) ]6 r* v

0 V' y  F+ l, j* R: H     在之前的学习中,一直用外部SPI Flash存放字库文件,之前的数据下载方法是用SD卡拷贝到SPIFLASH中,一直觉得在开发板上学习还算方便,如果在项目中应用,不是很方便,偶然机会,发现ST官方工具STM32 ST-LINK Utility可对外部SPIFLASH直接进行读写。于是尝试在原子精英板STM32 ST-LINK U上进行实验,并成功将字库文件下载到外部SPIFLASH,现把实现方法分享出来,方便大家共同学习,不完善之处还请多多指教!* d9 h3 C9 v) S! D0 {
) X$ F  r: z" c8 G* J: e2 M' O& n
平台:原子精英开发板(SPIFLASH芯片型号W25Q128),STM32F103,ST-LINK/V23 K0 ~& Y* N6 q: J2 U& L
1 S: s, s! f$ X  y6 Y
准备工作
' [; z! |6 ~$ @1 u' ~! N1. 官网或社区下载软件STM32 ST-LINK Utility v4.2.0 setup.exe,并安装3 |; r6 M& x2 y* W
2. W25Q128_STM32F1_Elite.stldr文件制作
1 |3 Y. K6 z$ c  源码见附件,该文件需要根据自己的硬件平台做出相应的修改# f) s$ [$ V1 }$ U" O4 G
3.将制作好的文件放在 安装目录\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ExternalLoader下
- A, Z6 h9 P2 H
4.添加LOADER文件! D5 P+ {0 N1 h, e' ]" [
5.在ExternalLoader菜单先对外部SPIFLASH进行读、写、擦除等操作。
, d! _8 K  a5 e% j; P
- f% S) V: y* E) l

( Z- E7 W: _* u3 J7 v/ ?

4 \0 Q  ^% R8 U8 U& i
5 ]" ?$ y% B0 z: F; @
8 V# a; n7 O8 H/ _' Z

SPIFLASH程序下载工程源码.zip

下载

1.4 MB, 下载次数: 921

UM0892-User manual.pdf

下载

1021.92 KB, 下载次数: 411

STM32 ST-LINK Utility使用手册

评分

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

查看全部评分

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

举报

41个回答
fxb 回答时间:2019-4-7 17:19:55
正想看看怎么生成自己板子的stldr,很有参考作用,谢谢!!! G" g% X5 ^4 }. }
这些代码应该是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 编辑 1 b) M- T# _, ]

1 [" r( s4 U' b# x4 s7 |第一次发帖,折腾的比较费劲,先将就看吧。# d6 g% d! t% m; T8 |. @! w$ I
正在尝试基于HAL库实现工程编写,进展不是很顺利,实现了再和大家分享吧。。。8 n; W* q( h, ~. X1 H  ?

" M! f' U6 ^: U" D6 j6 s% c2018年3月15日 经测试 基于HAL,对外挂SPIflash的下载速度较慢,时间差一倍以上,就不发源码了,推荐用标准库或直接操作寄存器方式。
$ {: ~# G4 v4 g
7 d& @0 z* u" s5 E2018年3月10日最新进展      在规避全局变量的情况下,基于HAL库已实现对外挂SPIflash的读写擦除等操作。# |" w! J( y( Z. D
  u7 y+ Z$ D0 O7 H, P1 l2 D# u0 a# A
2018年3月8日进展3 B% H2 I, l; }
经过一段时间的排查发现代码中不能有全局变量,不知道什么原因?实在是没头绪了,希望有各位网友给予指点,实在不行就只有规避全局变量了
+ b5 [+ Y0 r2 i, y7 \      为查找原因,编写了测试代码,当在软件ST-LINK Utility开始执行读取外部SPIFLASH时,从Init()函数,为此编写了测试代码,正常情况下,开始读时,开发板先看到红灯闪烁5次,紧接着绿灯闪烁5次,再红绿灯同时闪烁(表示进入read()函数),属正常现象。
# F! ]. {' N3 V% v       当加入全局变量赋值语句tempdata_test=1后,先是红灯闪烁,间隔约6秒后(程序运行不正常),再红灯闪烁5次,绿灯闪烁5次,再红绿灯同时闪烁。7 c4 m2 U) Q% e5 N
(1)测试代码如下:0 g4 h$ }! d6 v5 c9 g5 k. J/ @
  1. static void SetSysClockToHSI64(void);) i5 }" j' E0 o/ u% I. m7 h. H/ G
  2. int tempdata_test=0;, e) j) l( b) Y' s
  3. 9 ?2 D9 H# _3 Y
  4. //初始化测试代码 , 读SPIFLASH前调用; M/ q  X' S& C. W* t0 T7 @( }2 E
  5. int Init (void)
    6 D$ U2 v0 l3 P4 Z. y( w3 S
  6. {     
    + J$ G' I# P3 T
  7.     SystemInit();
    ( b# V1 u7 q: |- L! N$ O
  8.     SetSysClockToHSI64();   //操作寄存器实现时钟配置 4 ^" |% P8 x0 V- m1 z
  9. ' @6 y% k1 u6 S+ L6 n0 W! @8 h
  10.     //测试代码=========================================9 L6 R. N1 |, K' N* {
  11.     GPIO_DS0_DS1_Init();    //初始化LED显示IO口8 i8 Z0 z' V4 v  D+ Q3 T( C, Q: a
  12.     //MX_SPI2_Init();        
    2 z5 D; S' a- G! S+ H# v  e
  13.     LED_TOGGLE0(2);         //红灯闪烁5次        
    2 t* p. l; v6 W, ]3 b* o& P) N
  14.     tempdata_test=1;                //
    0 p+ E4 c; }' r5 |
  15.     LED_TOGGLE1(2);         //绿灯闪烁5次
    9 p9 r' y6 r  M, A7 h! d" W
  16.     //=================================================
    9 M- f) J% I+ n( p9 {1 i
  17.         return 1;6 C- @# |7 ]3 G$ L; m$ X% G/ ^
  18. }
复制代码
(2)Target.lin文件代码% i! z4 p/ ]; U" }* S" k8 G
  1. FLASH_LOADER 0x20000004 PI   ; FlashLoader Functions
    - f8 E. j. e. O# ^9 Z1 t+ @
  2. {! j, F% E" G) f( I8 k2 s
  3.   PrgCode +0           ; Code5 }' @" G) V% {8 `* h
  4.   {
    ) X" E7 R: n" Y" b
  5.     * (+RO)
      V. A8 s! Y' ^' _( d
  6.   }- K, Q' \1 C+ N3 Y$ `; \* o  E% V& x, f
  7.   PrgData +0           ; Data
    / W' J4 }' R0 O; T
  8.   {
    - P- _" q& A7 u' L. R0 T4 L
  9.     * (+RW,+ZI)
    7 U3 N2 V4 J) C2 @5 ?
  10.   }
    ' l) X* P. o  @8 ^. G3 |! x+ T7 u" l
  11. }, [: i% t- E$ X' A
  12. $ P$ f( d3 }3 B# R5 Q
  13. DEVICE_INFO +0               ; Device Info
    ! }  k# E. N4 Z( Z' K
  14. {9 L7 W9 O& U0 J( h
  15.   DevInfo +0           ; Info structure/ Q5 C/ t; `+ v" [
  16.   {
    8 n6 S" ]7 d3 |) a6 X; ~- Z
  17.     dev_inf.o. D" X* j  X5 q4 e2 W& G* t* A1 o
  18.   }
    # h( d% M) {* v# J
  19. }
复制代码

9 @9 S6 e; Y. ]' ~- \4 r/ x" H   
& v, \: t: e8 e
- D% b) \2 ~: U3 _0 h
! Q0 A& i  C( g9 d1 t: D6 m
七哥 回答时间:2018-3-2 23:38:04
不错,解决了问题,来发贴分享,为你点赞
ychf0000 回答时间:2018-3-3 06:30:50
toofree 发表于 2018-3-2 23:38
. G* C: g" j7 c4 X! b不错,解决了问题,来发贴分享,为你点赞

' H! H7 \' p% e+ P* y谢谢大师的热心帮助和鼓励
davidcdw 回答时间:2018-3-4 14:45:56
可以
carlxzl 回答时间:2018-3-4 15:44:17
正在学习
zero99 回答时间:2018-3-9 14:40:42
感谢分享,已汇总到3月技术原创:
+ O. L% x: s. p1 ^https://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:364 e, P' L' ?& @% q( h* W
下载1m数据大于时间是??
) {/ O1 x0 s. @- M
1分钟差不多
ychf0000 回答时间:2018-6-23 07:40:17
guowei680 发表于 2018-5-30 21:19
6 ^1 F2 L: o' f3 s, {: V8 A请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?
8 V" j) k* Q+ e
查查spi接口配置和时钟使能对不对/ b, K2 N  G3 Y2 A9 o$ h9 B
ychf0000 回答时间:2018-6-23 07:42:45
guowei680 发表于 2018-5-30 21:19! I* }/ l" Q4 v, K! E
请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?
: o+ O- b5 W$ N. j" p' r( O
先在你的应用中验证你的spiflash读写正常,再移植过来
123下一页

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版