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

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

[复制链接]
ychf0000 发布时间:2018-3-2 22:47
本帖最后由 ychf0000 于 2018-3-2 22:58 编辑
6 Q; a2 Q' p/ ^8 q& O+ b2 H8 ~! R6 d  E' Y9 ]4 Q5 l; x
     在之前的学习中,一直用外部SPI Flash存放字库文件,之前的数据下载方法是用SD卡拷贝到SPIFLASH中,一直觉得在开发板上学习还算方便,如果在项目中应用,不是很方便,偶然机会,发现ST官方工具STM32 ST-LINK Utility可对外部SPIFLASH直接进行读写。于是尝试在原子精英板STM32 ST-LINK U上进行实验,并成功将字库文件下载到外部SPIFLASH,现把实现方法分享出来,方便大家共同学习,不完善之处还请多多指教!  T) j  ?( h+ i% w

5 L. K, E8 w, h2 k平台:原子精英开发板(SPIFLASH芯片型号W25Q128),STM32F103,ST-LINK/V2
4 s6 }" C( b7 p" S) K* J$ V1 E7 o' h5 e
准备工作: u4 U3 ^0 ?3 i
1. 官网或社区下载软件STM32 ST-LINK Utility v4.2.0 setup.exe,并安装
, ^  Q  s; T, Y9 b8 s' L2. W25Q128_STM32F1_Elite.stldr文件制作
8 G" d$ t) S0 x( [; j1 V) E4 M9 n  源码见附件,该文件需要根据自己的硬件平台做出相应的修改/ c% Q7 M- G" z7 ^& Z" T8 d# _* G% b
3.将制作好的文件放在 安装目录\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ExternalLoader下

' _' `5 G9 d: M; y1 \' R4.添加LOADER文件
% \: c& x: b  X% |  Q' h0 S- W
5.在ExternalLoader菜单先对外部SPIFLASH进行读、写、擦除等操作。2 }! Q" Z4 G7 m
+ ~; C; v9 O# D& f2 ~" v

2 M9 M& ~# p# V0 h/ b2 I

9 O6 a: y; ~* j2 Q/ l
. J& I- z5 a  K5 D
$ Y7 u' j( l" ?9 l& d% a0 }

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,很有参考作用,谢谢!!
8 |" L$ p0 D/ ~: S) b! Z4 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 编辑
2 a6 I7 L. \- h/ x
. c8 x/ E5 M6 i$ i2 w) T第一次发帖,折腾的比较费劲,先将就看吧。3 N' e2 |( s1 C' k2 v' \1 C1 j) f
正在尝试基于HAL库实现工程编写,进展不是很顺利,实现了再和大家分享吧。。。. P( Q8 v9 ~- [2 y$ }. T& {
4 D3 v7 `6 Z  n$ W5 \2 S* l, N7 W4 |& ?
2018年3月15日 经测试 基于HAL,对外挂SPIflash的下载速度较慢,时间差一倍以上,就不发源码了,推荐用标准库或直接操作寄存器方式。5 Q- y0 A: n, {" n# ]
2 P+ V- j+ b6 k& x# g
2018年3月10日最新进展      在规避全局变量的情况下,基于HAL库已实现对外挂SPIflash的读写擦除等操作。
1 ?9 L; Z1 Q# E- F( W5 a8 J" Z6 ~  s+ s/ L8 v. w
2018年3月8日进展
% P# B* L! @9 {6 S经过一段时间的排查发现代码中不能有全局变量,不知道什么原因?实在是没头绪了,希望有各位网友给予指点,实在不行就只有规避全局变量了
4 L0 D: u$ g7 Y+ Q) ?2 q      为查找原因,编写了测试代码,当在软件ST-LINK Utility开始执行读取外部SPIFLASH时,从Init()函数,为此编写了测试代码,正常情况下,开始读时,开发板先看到红灯闪烁5次,紧接着绿灯闪烁5次,再红绿灯同时闪烁(表示进入read()函数),属正常现象。
/ S% \7 U/ g! M4 r! b& j  r+ y       当加入全局变量赋值语句tempdata_test=1后,先是红灯闪烁,间隔约6秒后(程序运行不正常),再红灯闪烁5次,绿灯闪烁5次,再红绿灯同时闪烁。
% [0 O3 y$ Q  p7 n(1)测试代码如下:
# K3 ^3 y- Y) H+ z  V$ Y
  1. static void SetSysClockToHSI64(void);
    6 _( X1 u6 ]* m- I: Q. c
  2. int tempdata_test=0;
    . L1 e. Z/ t4 ~' Z" F7 Q
  3. 9 X  f6 i9 W. [& h' C
  4. //初始化测试代码 , 读SPIFLASH前调用
    $ f/ B/ k: H" I: n9 H
  5. int Init (void)
    ; o7 J3 R7 r7 A! I% V
  6. {     % |. a# c9 D8 l6 _7 i
  7.     SystemInit();
    5 O5 Q$ l$ ]+ C. k+ l
  8.     SetSysClockToHSI64();   //操作寄存器实现时钟配置 4 \% T0 K, i5 Y2 [6 D& Q4 @, {

  9. - }& S7 B6 X3 V
  10.     //测试代码=========================================
    6 w, @2 [9 x4 p
  11.     GPIO_DS0_DS1_Init();    //初始化LED显示IO口) {/ V/ ?+ Q7 y$ {8 K: v' H) J
  12.     //MX_SPI2_Init();        ) |6 s6 Z  v! y* }3 ?- |8 G
  13.     LED_TOGGLE0(2);         //红灯闪烁5次        ( l. K* `/ v9 f' i7 N9 |
  14.     tempdata_test=1;                //& D0 V( \9 [  ]& T
  15.     LED_TOGGLE1(2);         //绿灯闪烁5次  s9 E% [. }' f% V
  16.     //=================================================5 t" Y+ L4 f( T' Y9 ~% Q- \
  17.         return 1;0 c9 x- b" O8 O! M; w- J3 i" {
  18. }
复制代码
(2)Target.lin文件代码  a0 h1 Q6 H8 d8 [+ _  }
  1. FLASH_LOADER 0x20000004 PI   ; FlashLoader Functions" \" d+ W' R+ u" T1 N% |% n- c
  2. {" f2 ^3 H  W3 m8 {
  3.   PrgCode +0           ; Code, W& P+ N, a% _+ q9 V
  4.   {* M5 O: |! ?6 U$ @( |' q) k' K  ^
  5.     * (+RO)$ q7 u  {* {. e5 l2 N
  6.   }% {5 S* ?4 c5 h& _* t( x# T
  7.   PrgData +0           ; Data  C7 H. }' a; t  A! @/ R* ~. e
  8.   {
    6 P1 Y- ~' H1 X* U
  9.     * (+RW,+ZI)
    9 B2 E. |+ o5 {, p" G& q- u  Q
  10.   }) g5 T- I7 `0 s: @
  11. }
      C1 ^  z5 I) G. C+ c/ J1 Q

  12. % A5 U! d: `2 o& Q  k
  13. DEVICE_INFO +0               ; Device Info
    & O( l7 q. |) U+ j/ Z. r' |
  14. {$ m5 b# Q5 O6 S* ]6 S
  15.   DevInfo +0           ; Info structure8 @  H, P( e3 v
  16.   {# F& o1 {* f/ z! d# K6 o5 P
  17.     dev_inf.o
    1 B% U4 [# n* y" G
  18.   }/ I6 D2 u! N$ X5 [/ O
  19. }
复制代码

1 m# W- E. e: O  F9 Y   
  J+ A7 L" e- l1 g3 d) u# E5 {5 J

, s# \' Y- O* k! \
七哥 回答时间:2018-3-2 23:38:04
不错,解决了问题,来发贴分享,为你点赞
ychf0000 回答时间:2018-3-3 06:30:50
toofree 发表于 2018-3-2 23:38# ]3 {: W: s/ L, w
不错,解决了问题,来发贴分享,为你点赞

$ d; A( R. Z7 P  a2 Y9 c3 t谢谢大师的热心帮助和鼓励
davidcdw 回答时间:2018-3-4 14:45:56
可以
carlxzl 回答时间:2018-3-4 15:44:17
正在学习
zero99 回答时间:2018-3-9 14:40:42
感谢分享,已汇总到3月技术原创:* g1 M1 C3 {8 A" f5 m: f1 x
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
. b& D5 a8 A2 N( ?/ [下载1m数据大于时间是??
3 s$ V3 @4 d/ d' l. {
1分钟差不多
ychf0000 回答时间:2018-6-23 07:40:17
guowei680 发表于 2018-5-30 21:19
  a4 M  E9 N8 }' r9 H请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?

7 {: |8 l/ m5 W$ H. ?6 r查查spi接口配置和时钟使能对不对' p5 I0 }! i6 C) b. j
ychf0000 回答时间:2018-6-23 07:42:45
guowei680 发表于 2018-5-30 21:19
7 ?! i0 M' o9 f- s2 P请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?
+ F5 b* v* P% j: ^  W
先在你的应用中验证你的spiflash读写正常,再移植过来
123下一页

所属标签

相似分享

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