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

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

[复制链接]
ychf0000 发布时间:2018-3-2 22:47
本帖最后由 ychf0000 于 2018-3-2 22:58 编辑 . Q6 z/ N  b# Z8 O& n
- d* H! Q( ^& G2 j' F: E
     在之前的学习中,一直用外部SPI Flash存放字库文件,之前的数据下载方法是用SD卡拷贝到SPIFLASH中,一直觉得在开发板上学习还算方便,如果在项目中应用,不是很方便,偶然机会,发现ST官方工具STM32 ST-LINK Utility可对外部SPIFLASH直接进行读写。于是尝试在原子精英板STM32 ST-LINK U上进行实验,并成功将字库文件下载到外部SPIFLASH,现把实现方法分享出来,方便大家共同学习,不完善之处还请多多指教!: l0 F! v  Q4 n3 q0 M  S0 F
, s( V$ b! b7 |4 _! m; g' U9 c( g
平台:原子精英开发板(SPIFLASH芯片型号W25Q128),STM32F103,ST-LINK/V2
3 b) z9 |1 L  O# L/ x# D; D1 h0 V
, E" M8 \9 p5 z准备工作9 I, |! x; ~1 K  T5 q1 ~
1. 官网或社区下载软件STM32 ST-LINK Utility v4.2.0 setup.exe,并安装  D* `/ Q" ~/ Y! m
2. W25Q128_STM32F1_Elite.stldr文件制作4 f- S: [9 w$ a9 g  G  E3 Y
  源码见附件,该文件需要根据自己的硬件平台做出相应的修改
+ \$ Q+ Q  W1 O$ E+ T
3.将制作好的文件放在 安装目录\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ExternalLoader下

) X: n3 s& |' J7 d2 t6 i4.添加LOADER文件" V! T9 d8 B" p
5.在ExternalLoader菜单先对外部SPIFLASH进行读、写、擦除等操作。
( e! B& d- r9 x% p" g

& _+ N! ~4 j* n/ F+ j4 X# r' s( O# s7 t% r

# {$ Y3 r4 W* Y  M" J
- r7 m) W0 r. `7 l+ b- {1 g
# M" c& m5 W& J( t( G% f

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,很有参考作用,谢谢!!
0 ^0 m! f3 k. W% V9 C这些代码应该是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 编辑 7 c) r9 t- A% @7 W) V
8 q6 h" |% `' X" R; O' l; l3 M) A
第一次发帖,折腾的比较费劲,先将就看吧。9 w  O5 P$ C: l7 g
正在尝试基于HAL库实现工程编写,进展不是很顺利,实现了再和大家分享吧。。。
# d& z0 |3 q/ Y3 h/ `( P0 s, f' F1 ~" c, u- _. E
2018年3月15日 经测试 基于HAL,对外挂SPIflash的下载速度较慢,时间差一倍以上,就不发源码了,推荐用标准库或直接操作寄存器方式。2 D& H7 }* y% [* f& {* P
$ m: f9 X: u1 s3 B8 i* i
2018年3月10日最新进展      在规避全局变量的情况下,基于HAL库已实现对外挂SPIflash的读写擦除等操作。: j( [+ {, ?. C6 t; n+ c: @* ?
& `- `5 b' H3 V; T8 x- }$ C8 a
2018年3月8日进展
' b( n% X5 g/ u+ g( D2 c# h$ t经过一段时间的排查发现代码中不能有全局变量,不知道什么原因?实在是没头绪了,希望有各位网友给予指点,实在不行就只有规避全局变量了! S4 @$ `( J9 d1 c* M! e
      为查找原因,编写了测试代码,当在软件ST-LINK Utility开始执行读取外部SPIFLASH时,从Init()函数,为此编写了测试代码,正常情况下,开始读时,开发板先看到红灯闪烁5次,紧接着绿灯闪烁5次,再红绿灯同时闪烁(表示进入read()函数),属正常现象。
9 s4 y) p7 q  ]5 `$ W3 m' T       当加入全局变量赋值语句tempdata_test=1后,先是红灯闪烁,间隔约6秒后(程序运行不正常),再红灯闪烁5次,绿灯闪烁5次,再红绿灯同时闪烁。+ D7 h9 t3 E" l) F: e* k0 s
(1)测试代码如下:% B6 j3 j3 Q1 e4 M& v. D/ d
  1. static void SetSysClockToHSI64(void);
    + P+ R1 i! t, K* G8 O3 a) r
  2. int tempdata_test=0;8 I1 }4 j) b; ^! W$ S& V" P

  3. ; q  J, L+ f8 U$ y. f
  4. //初始化测试代码 , 读SPIFLASH前调用
    2 `  T$ \7 c1 J/ a/ B1 R
  5. int Init (void)2 u0 `# D* v, l
  6. {     
    7 |# X: Z. z2 C
  7.     SystemInit();
    & B- `/ e9 `1 q8 C% C$ q, V. ~
  8.     SetSysClockToHSI64();   //操作寄存器实现时钟配置 9 u" a1 d" F' u" g& Z8 a* a3 V2 ^
  9. ! `9 R0 F3 ^3 Z# I
  10.     //测试代码=========================================
    / O3 E2 R2 ~' _8 q5 E% c
  11.     GPIO_DS0_DS1_Init();    //初始化LED显示IO口9 k6 ]1 Y, `8 x2 @8 q/ G
  12.     //MX_SPI2_Init();        * u  E) _) i6 c. }
  13.     LED_TOGGLE0(2);         //红灯闪烁5次        ; v+ Z' |' L0 k% Q) ^/ B
  14.     tempdata_test=1;                //) m* q: U2 v, @
  15.     LED_TOGGLE1(2);         //绿灯闪烁5次
    2 a1 k8 f. y: h
  16.     //=================================================# n! r  Q( R! m: B+ F
  17.         return 1;
    1 H6 ~% M3 t. f) y
  18. }
复制代码
(2)Target.lin文件代码/ b+ `: j, o) q
  1. FLASH_LOADER 0x20000004 PI   ; FlashLoader Functions
    5 O  d0 Y5 S! h0 |$ y- P
  2. {% t6 O6 z- k, v* ?
  3.   PrgCode +0           ; Code
    5 Q+ c8 z7 [0 ~0 j- H/ n
  4.   {: G5 o5 y) v$ X. b$ h- B1 `( k! ^
  5.     * (+RO)
    ' \3 u! x' g7 E) U& {/ V5 x
  6.   }# M& Q  m0 n" n. M( Z# \
  7.   PrgData +0           ; Data2 |. ~$ i/ R% |4 L( o% l" f
  8.   {7 I5 H2 N5 P9 r! z6 ~0 Z
  9.     * (+RW,+ZI)" I# `+ F, u' \% E+ O) W
  10.   }8 i) I& D* Z; A- U
  11. }( C0 x3 F6 R; y$ Q9 Z( |! J) [. b

  12. 7 A9 g2 I- L6 }
  13. DEVICE_INFO +0               ; Device Info
      K$ C' X6 E' `0 O4 m+ g
  14. {
    , H; Q" E0 v) g4 s
  15.   DevInfo +0           ; Info structure
    7 R8 ]- ^8 Q. b8 W+ t$ K8 u) h
  16.   {/ D- P+ T" y  M
  17.     dev_inf.o
    7 k, k, z5 d: U+ {' V
  18.   }5 F5 |* u& m$ G$ N
  19. }
复制代码
% O: |4 x6 G+ \7 P. k( I
   # e; e6 k  |, p' L1 n( ?
' W& c% e( C8 v/ B) A: H, g  w
; c, V9 l* X3 ]: ]% ~
七哥 回答时间:2018-3-2 23:38:04
不错,解决了问题,来发贴分享,为你点赞
ychf0000 回答时间:2018-3-3 06:30:50
toofree 发表于 2018-3-2 23:38
" H- @+ C/ N- f$ h" [不错,解决了问题,来发贴分享,为你点赞

9 B# ^8 U! J  M, X谢谢大师的热心帮助和鼓励
davidcdw 回答时间:2018-3-4 14:45:56
可以
carlxzl 回答时间:2018-3-4 15:44:17
正在学习
zero99 回答时间:2018-3-9 14:40:42
感谢分享,已汇总到3月技术原创:
# n! \- \4 N$ g+ Mhttps://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
1 w  G, `/ E9 Y6 C: Y, _) o0 e下载1m数据大于时间是??
1 f+ ^2 \/ l: y, t' h4 y
1分钟差不多
ychf0000 回答时间:2018-6-23 07:40:17
guowei680 发表于 2018-5-30 21:19
- ^* D" F' G: m+ i# D请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?

' x: l! |% a2 ~3 c$ d& M查查spi接口配置和时钟使能对不对
( U9 ]) L: N) x8 @; z& P* [
ychf0000 回答时间:2018-6-23 07:42:45
guowei680 发表于 2018-5-30 21:197 \- \$ D$ H2 v) x& b
请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?

: u! p  z* T7 e* T先在你的应用中验证你的spiflash读写正常,再移植过来
123下一页

所属标签

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