请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
ychf0000 发布时间:2018-3-2 22:47
本帖最后由 ychf0000 于 2018-3-2 22:58 编辑 3 Q- z, @- L8 G+ \- n* V" }  B
9 i9 r& D4 `( |& ?% R% g
     在之前的学习中,一直用外部SPI Flash存放字库文件,之前的数据下载方法是用SD卡拷贝到SPIFLASH中,一直觉得在开发板上学习还算方便,如果在项目中应用,不是很方便,偶然机会,发现ST官方工具STM32 ST-LINK Utility可对外部SPIFLASH直接进行读写。于是尝试在原子精英板STM32 ST-LINK U上进行实验,并成功将字库文件下载到外部SPIFLASH,现把实现方法分享出来,方便大家共同学习,不完善之处还请多多指教!$ y$ l& d& x1 T! _; q9 [( z

8 B5 o- |' {  r3 Q5 y平台:原子精英开发板(SPIFLASH芯片型号W25Q128),STM32F103,ST-LINK/V2* M& O- J2 c# D! x$ Q5 E# M' _1 l1 H4 p
( M4 |4 y; k& f( x2 k9 H
准备工作
9 {5 d( H. N* C3 m' u; W1. 官网或社区下载软件STM32 ST-LINK Utility v4.2.0 setup.exe,并安装
' U; S7 D+ b; h$ o2. W25Q128_STM32F1_Elite.stldr文件制作8 t. b# E* X. s! k8 Y) E1 U& S6 L
  源码见附件,该文件需要根据自己的硬件平台做出相应的修改, x/ |2 l0 S" j5 v
3.将制作好的文件放在 安装目录\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ExternalLoader下

' ^, ~  p8 m4 o1 f7 q4 S9 e4.添加LOADER文件( i6 E0 {5 W$ b$ |  s6 X
5.在ExternalLoader菜单先对外部SPIFLASH进行读、写、擦除等操作。, L4 B+ S/ @6 p3 J6 Q/ A
6 y- x9 c' v% j$ t+ m. a+ l
+ W' O, y( p  {9 I# x
& G) ^2 {6 t9 T. j% g+ ]
7 U6 s' {0 l# ]( ?* y- V8 F6 ]

1 D# T/ D( S  |& T

SPIFLASH程序下载工程源码.zip

下载

1.4 MB, 下载次数: 920

UM0892-User manual.pdf

下载

1021.92 KB, 下载次数: 410

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,很有参考作用,谢谢!!
, e. \' v5 `8 ~3 {8 {  f7 v& u这些代码应该是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 编辑
& [' M! K* o. |& H$ g' `1 |+ Z
1 Y2 a: j0 H6 ?- t0 X7 ~& }第一次发帖,折腾的比较费劲,先将就看吧。
/ c, A8 k5 G' V正在尝试基于HAL库实现工程编写,进展不是很顺利,实现了再和大家分享吧。。。
& q, ^% `3 X1 A( ~$ j# v( ~7 \) Q% D! W0 v! H3 s1 V: r
2018年3月15日 经测试 基于HAL,对外挂SPIflash的下载速度较慢,时间差一倍以上,就不发源码了,推荐用标准库或直接操作寄存器方式。6 Q8 ], [" i( n1 W- U

5 y8 n* d" Z1 V9 N8 n2018年3月10日最新进展      在规避全局变量的情况下,基于HAL库已实现对外挂SPIflash的读写擦除等操作。8 e; |0 u6 ^+ J+ q8 B
1 U; t$ a# h7 c  a: ~
2018年3月8日进展' G$ W* G6 p6 S% s/ J
经过一段时间的排查发现代码中不能有全局变量,不知道什么原因?实在是没头绪了,希望有各位网友给予指点,实在不行就只有规避全局变量了; _$ A1 g/ V& t% g0 m& ?2 Y! f
      为查找原因,编写了测试代码,当在软件ST-LINK Utility开始执行读取外部SPIFLASH时,从Init()函数,为此编写了测试代码,正常情况下,开始读时,开发板先看到红灯闪烁5次,紧接着绿灯闪烁5次,再红绿灯同时闪烁(表示进入read()函数),属正常现象。& V  e7 z$ M( U
       当加入全局变量赋值语句tempdata_test=1后,先是红灯闪烁,间隔约6秒后(程序运行不正常),再红灯闪烁5次,绿灯闪烁5次,再红绿灯同时闪烁。- E. L& m9 ], k1 o5 a" A4 d
(1)测试代码如下:
) T* D6 n9 l! y0 z
  1. static void SetSysClockToHSI64(void);
    7 x/ J# W; v3 a" x8 y2 z) }
  2. int tempdata_test=0;$ b! w$ T6 z; e  Z
  3. 0 m/ @3 j3 X8 y+ ~& `4 C3 J
  4. //初始化测试代码 , 读SPIFLASH前调用
    , q, u, j. ]- J8 n% c, ]
  5. int Init (void)3 C: @* s- O, j
  6. {     ! n, \) G2 a# X& [7 ]& F
  7.     SystemInit();' R4 [9 c: a3 O6 G/ ?7 f5 s
  8.     SetSysClockToHSI64();   //操作寄存器实现时钟配置
    : N* R+ F+ m) V5 q9 {' f6 B0 A6 r2 K
  9. : w2 A- l' u4 J7 J: g
  10.     //测试代码=========================================
    - `$ {1 Q2 \9 U; ?$ X( x# l
  11.     GPIO_DS0_DS1_Init();    //初始化LED显示IO口7 g  y& X" m& i9 S8 A. J; v' n. l
  12.     //MX_SPI2_Init();        
    # [' j3 _5 r  E* D# t
  13.     LED_TOGGLE0(2);         //红灯闪烁5次        
    $ g( B; p5 F0 P+ ?% l- o9 r1 N
  14.     tempdata_test=1;                //
    # r3 _: F% t( A3 K1 @; |, f2 f
  15.     LED_TOGGLE1(2);         //绿灯闪烁5次
    8 |$ B4 h& N; U4 R
  16.     //=================================================
    ) Q; A0 ?/ ?. g: y7 `
  17.         return 1;* t# M" O' ]: D/ E: b& W$ u3 b/ k
  18. }
复制代码
(2)Target.lin文件代码
: j: }7 R; X9 A/ V, g  v# R
  1. FLASH_LOADER 0x20000004 PI   ; FlashLoader Functions
    0 h+ C3 _' W! Q0 Z9 z
  2. {
    6 y2 X8 _3 _9 y& R& I
  3.   PrgCode +0           ; Code
    / y$ u+ j* b, t
  4.   {
    - w; O/ `3 @/ d" T+ v5 I. Z0 G& G
  5.     * (+RO)" T6 W# ]2 h) @7 C: h, g
  6.   }, E0 s' p9 a& W% V, w
  7.   PrgData +0           ; Data
    0 Y* E$ s) W" {/ h
  8.   {4 P9 g8 ]8 X8 u: ]; T3 u$ b# }
  9.     * (+RW,+ZI): I# W$ n) i7 w3 A9 I/ i: I
  10.   }/ E& y. S0 N4 A) G& h
  11. }
    8 E* x- p2 W* A1 M# {, b% y# s/ k- g
  12. 9 A% v- C& Y. B3 ]& h
  13. DEVICE_INFO +0               ; Device Info
    3 _% B+ ~. _2 G. t8 o1 Y
  14. {+ J9 a9 K+ K: R
  15.   DevInfo +0           ; Info structure
    " m) e# j3 `5 a8 J: R9 E3 |
  16.   {
    ( S0 h; _; x% o% [7 ^$ u) T; i: ]
  17.     dev_inf.o
    & Q( T( o5 c; U# d  M% X
  18.   }
    % d$ Y- L! g& y0 _# {* A! F0 X6 k5 C
  19. }
复制代码

/ l" _+ E1 o3 x7 s% {5 D! C   ) p  X  P  d5 l7 i. j3 T2 v4 e# U* i

# `1 m' {3 m8 f  A
" I& ]! {2 M( `/ D3 C# z6 ^
七哥 回答时间:2018-3-2 23:38:04
不错,解决了问题,来发贴分享,为你点赞
ychf0000 回答时间:2018-3-3 06:30:50
toofree 发表于 2018-3-2 23:389 a/ A( [  Y% B9 g0 u
不错,解决了问题,来发贴分享,为你点赞
# H3 x: [3 K' S3 K. E
谢谢大师的热心帮助和鼓励
davidcdw 回答时间:2018-3-4 14:45:56
可以
carlxzl 回答时间:2018-3-4 15:44:17
正在学习
zero99 回答时间:2018-3-9 14:40:42
感谢分享,已汇总到3月技术原创:' _4 q7 q3 Y& b0 D
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:36
; v: t1 }$ D# U: L1 X; J4 Y下载1m数据大于时间是??

# D* Z: Q- C, T6 s+ _7 J1分钟差不多
ychf0000 回答时间:2018-6-23 07:40:17
guowei680 发表于 2018-5-30 21:19! z" H1 ]9 ^" D& I+ y
请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?
) ?- Q' M0 t2 {& h$ G% ?$ `
查查spi接口配置和时钟使能对不对
! b( I( R3 }2 Q+ @8 W
ychf0000 回答时间:2018-6-23 07:42:45
guowei680 发表于 2018-5-30 21:19
/ m: \2 {9 t8 K9 z0 J8 g请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?
) R& l: o5 Y* ?
先在你的应用中验证你的spiflash读写正常,再移植过来
123下一页

所属标签

相似分享

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