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

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

[复制链接]
ychf0000 发布时间:2018-3-2 22:47
本帖最后由 ychf0000 于 2018-3-2 22:58 编辑 2 [" b! N+ X% }

8 d7 j' K: c% _  B$ \5 _     在之前的学习中,一直用外部SPI Flash存放字库文件,之前的数据下载方法是用SD卡拷贝到SPIFLASH中,一直觉得在开发板上学习还算方便,如果在项目中应用,不是很方便,偶然机会,发现ST官方工具STM32 ST-LINK Utility可对外部SPIFLASH直接进行读写。于是尝试在原子精英板STM32 ST-LINK U上进行实验,并成功将字库文件下载到外部SPIFLASH,现把实现方法分享出来,方便大家共同学习,不完善之处还请多多指教!0 z4 ^+ N+ I4 }7 p0 e1 z7 m9 P

% N& k$ o- v$ `) _平台:原子精英开发板(SPIFLASH芯片型号W25Q128),STM32F103,ST-LINK/V2
. D* O; B( _) k4 r3 r: Y! M
; X3 b6 }: y' K$ q准备工作
# k- j& z: a7 Y; o1. 官网或社区下载软件STM32 ST-LINK Utility v4.2.0 setup.exe,并安装
1 B- o/ L1 H, r/ ^. W% h2. W25Q128_STM32F1_Elite.stldr文件制作4 r) E5 G3 O5 U' Q
  源码见附件,该文件需要根据自己的硬件平台做出相应的修改# E" {" K* \2 f9 H& z! j6 S
3.将制作好的文件放在 安装目录\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ExternalLoader下

8 W) n; [+ W) B$ e5 a4.添加LOADER文件3 J7 C; H+ i3 b7 l  C: c+ {  A7 M6 ~
5.在ExternalLoader菜单先对外部SPIFLASH进行读、写、擦除等操作。
3 c4 Z/ x* a% q" ^" b
: g- K8 M0 [  d% m
6 q; ?) p, D$ l  h! o& }: F

; v3 i9 [( ?( I; A# t  _
8 |' E; Z" g6 ]8 L8 Q; @( j* r) H% B

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,很有参考作用,谢谢!!0 j! H6 `5 [7 n% }" s& Z7 `
这些代码应该是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 编辑
' ?, ~- p. S* X2 U, N+ d/ T1 a' ]* c! ^
第一次发帖,折腾的比较费劲,先将就看吧。& a. k+ }' x3 K/ R8 W1 x  r
正在尝试基于HAL库实现工程编写,进展不是很顺利,实现了再和大家分享吧。。。
' t! ?' J8 ?6 W5 {; Z9 k
& ^6 j8 O9 l  w* e: m2 d2018年3月15日 经测试 基于HAL,对外挂SPIflash的下载速度较慢,时间差一倍以上,就不发源码了,推荐用标准库或直接操作寄存器方式。
7 l) J# K1 [7 r1 l' e5 B6 X( {/ F# Q4 `* E) i
2018年3月10日最新进展      在规避全局变量的情况下,基于HAL库已实现对外挂SPIflash的读写擦除等操作。- T$ a, V' i7 Y. G1 ^- r

! F; B0 _$ h* M4 k$ t& Q9 i2018年3月8日进展+ o0 S. s8 n1 e1 i
经过一段时间的排查发现代码中不能有全局变量,不知道什么原因?实在是没头绪了,希望有各位网友给予指点,实在不行就只有规避全局变量了+ ~+ t1 m+ S2 E% Z9 }
      为查找原因,编写了测试代码,当在软件ST-LINK Utility开始执行读取外部SPIFLASH时,从Init()函数,为此编写了测试代码,正常情况下,开始读时,开发板先看到红灯闪烁5次,紧接着绿灯闪烁5次,再红绿灯同时闪烁(表示进入read()函数),属正常现象。) i0 p4 z' y6 x
       当加入全局变量赋值语句tempdata_test=1后,先是红灯闪烁,间隔约6秒后(程序运行不正常),再红灯闪烁5次,绿灯闪烁5次,再红绿灯同时闪烁。$ Q& }8 L, H; `
(1)测试代码如下:
" I# q$ |- A! i  K) G* j/ h
  1. static void SetSysClockToHSI64(void);3 \( D! ^# w% Y; ~9 o( C
  2. int tempdata_test=0;
    ) T3 j4 b- A( o5 w0 B4 {9 Q

  3. ; v2 H3 C" H; v( T1 S* X  t
  4. //初始化测试代码 , 读SPIFLASH前调用
    4 w  E8 `, F, \+ G* K
  5. int Init (void)2 Q0 I+ ^) ^" Z
  6. {       d3 d6 i4 E& r8 {
  7.     SystemInit();' s' k1 T' N9 C* z
  8.     SetSysClockToHSI64();   //操作寄存器实现时钟配置
    ) k! x" Z$ p2 N0 J, j0 o

  9. 9 N. v; ?- r, d
  10.     //测试代码=========================================; j0 T3 C) r7 O. b) D7 z" p5 M2 D! b
  11.     GPIO_DS0_DS1_Init();    //初始化LED显示IO口% Y" ^0 i. @/ F; F
  12.     //MX_SPI2_Init();        + p2 w5 X5 ^$ P4 X2 }
  13.     LED_TOGGLE0(2);         //红灯闪烁5次        9 h/ j' W( D$ f! z
  14.     tempdata_test=1;                //4 K: V- I* u3 ~$ b# `' n* I
  15.     LED_TOGGLE1(2);         //绿灯闪烁5次
    0 i- m7 K" B& |3 ?! \9 Y
  16.     //=================================================
    % O3 C6 [) q1 g/ E6 y4 {
  17.         return 1;
    # e+ J0 R; e7 Z# X3 R5 _
  18. }
复制代码
(2)Target.lin文件代码
% W& b! ~# R- V& P4 Q( V
  1. FLASH_LOADER 0x20000004 PI   ; FlashLoader Functions0 h& l( T7 I- j5 M* e
  2. {
    * c3 m8 G# C  v1 H9 s6 ]  R$ A
  3.   PrgCode +0           ; Code
    / F2 l/ k- `$ U4 m( Z: J5 \* z& W" w
  4.   {
    ) P6 P, ?6 v( v( d9 N
  5.     * (+RO)
    ! V# m1 g2 X6 W: m# P
  6.   }
    0 B: ~7 X) ?4 m$ Q: _/ f2 }
  7.   PrgData +0           ; Data
    - C$ m- }/ \6 I9 F2 p) R" m. q, d. b
  8.   {
    " f! b9 C" F$ B! u; r6 g$ z4 ^  a
  9.     * (+RW,+ZI)
    % n2 n7 `) V5 ~: {& {
  10.   }
    ) y* w' J' n. R0 }+ `+ H
  11. }
    : n6 Y! s# x7 u0 O0 l0 E- l
  12. ) G+ J& W  A8 X5 M
  13. DEVICE_INFO +0               ; Device Info9 j# P$ j, S4 u( O. Y
  14. {, T" A( e3 i4 q* }, ?" r3 l
  15.   DevInfo +0           ; Info structure: o5 p/ j3 B" _- `7 E! v" O
  16.   {* f5 ~, n( i: }/ s9 x' H
  17.     dev_inf.o1 `( N. c+ m; b- t2 }
  18.   }3 `; l: g9 x& ^) W
  19. }
复制代码
4 a1 b2 D3 U1 J
   ) g2 W+ `; T" }) f) {, L1 P: Z, x7 j
) ]9 U; d. s0 s4 t

2 C- e8 r" G4 F: i% \* O
七哥 回答时间:2018-3-2 23:38:04
不错,解决了问题,来发贴分享,为你点赞
ychf0000 回答时间:2018-3-3 06:30:50
toofree 发表于 2018-3-2 23:38
1 _; J* K. j' d, R1 y# F: k不错,解决了问题,来发贴分享,为你点赞

8 c1 H; N# p" N  z  |谢谢大师的热心帮助和鼓励
davidcdw 回答时间:2018-3-4 14:45:56
可以
carlxzl 回答时间:2018-3-4 15:44:17
正在学习
zero99 回答时间:2018-3-9 14:40:42
感谢分享,已汇总到3月技术原创:
! F3 U- P) t- N, q( z. Fhttps://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
& p" G8 o- O; e8 E" _; ~, b下载1m数据大于时间是??

; Q& }4 Y6 Y4 @; ?8 h1分钟差不多
ychf0000 回答时间:2018-6-23 07:40:17
guowei680 发表于 2018-5-30 21:198 V( s1 W. i1 q1 j1 `3 F
请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?

+ O6 R) O4 Y' J0 D" ^查查spi接口配置和时钟使能对不对8 M5 L7 Y9 I* j/ [' E; }, O" B! G
ychf0000 回答时间:2018-6-23 07:42:45
guowei680 发表于 2018-5-30 21:19
+ A$ g1 c) n" n请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?

* b1 S" r) |  l3 E% {8 P' U先在你的应用中验证你的spiflash读写正常,再移植过来
123下一页

所属标签

相似分享

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