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

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

[复制链接]
ychf0000 发布时间:2018-3-2 22:47
本帖最后由 ychf0000 于 2018-3-2 22:58 编辑 8 r, o! o; d4 u8 v1 N3 j/ `
; A8 v. C* g4 b
     在之前的学习中,一直用外部SPI Flash存放字库文件,之前的数据下载方法是用SD卡拷贝到SPIFLASH中,一直觉得在开发板上学习还算方便,如果在项目中应用,不是很方便,偶然机会,发现ST官方工具STM32 ST-LINK Utility可对外部SPIFLASH直接进行读写。于是尝试在原子精英板STM32 ST-LINK U上进行实验,并成功将字库文件下载到外部SPIFLASH,现把实现方法分享出来,方便大家共同学习,不完善之处还请多多指教!
6 a' T: A; j9 R0 Z" ]! N6 s
" t0 P, Z  m8 A; m) Q平台:原子精英开发板(SPIFLASH芯片型号W25Q128),STM32F103,ST-LINK/V2* M& }! E* E$ f
" z! C4 J0 a1 @& m: k/ H
准备工作: b4 S, q' [) y1 ^2 v/ l
1. 官网或社区下载软件STM32 ST-LINK Utility v4.2.0 setup.exe,并安装7 H0 b$ u/ }2 D
2. W25Q128_STM32F1_Elite.stldr文件制作
( h" m3 \- X& I# ^2 F  源码见附件,该文件需要根据自己的硬件平台做出相应的修改9 c( m# I& P# L/ G: K( y
3.将制作好的文件放在 安装目录\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ExternalLoader下

! D' k3 P+ f7 b: p4.添加LOADER文件2 U$ l1 w# }3 K4 v8 U$ r: h
5.在ExternalLoader菜单先对外部SPIFLASH进行读、写、擦除等操作。
# G) ~. z- {: `" i5 b

+ ^! \* y4 j" g  O5 s% C
+ z) ~0 t& e! g" F. c
8 @% b$ Q+ c! z! r

4 A2 K( v# V' x, Z" g$ R1 _+ V) P/ l: O! {* z% F

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,很有参考作用,谢谢!!6 M/ M) ]! i9 u/ q
这些代码应该是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 o- t2 o2 C) y. Q$ `6 T3 c
, I8 _; p, ^$ h
第一次发帖,折腾的比较费劲,先将就看吧。
; R- U6 K  E7 u) h正在尝试基于HAL库实现工程编写,进展不是很顺利,实现了再和大家分享吧。。。
1 c& E6 v2 ^" [. A: M( B. O5 r6 M/ Z
2018年3月15日 经测试 基于HAL,对外挂SPIflash的下载速度较慢,时间差一倍以上,就不发源码了,推荐用标准库或直接操作寄存器方式。# L7 y% e+ L& |  C9 D
( h4 P: q/ y' c3 h' K! v
2018年3月10日最新进展      在规避全局变量的情况下,基于HAL库已实现对外挂SPIflash的读写擦除等操作。
6 x' S. C! z# j/ W9 K8 z: E' E( h0 y- j3 H+ f) D3 ^1 R
2018年3月8日进展
, z4 ^* K# n  q% i5 o1 w) E经过一段时间的排查发现代码中不能有全局变量,不知道什么原因?实在是没头绪了,希望有各位网友给予指点,实在不行就只有规避全局变量了' h3 l; L# x* O, a  D4 h3 e
      为查找原因,编写了测试代码,当在软件ST-LINK Utility开始执行读取外部SPIFLASH时,从Init()函数,为此编写了测试代码,正常情况下,开始读时,开发板先看到红灯闪烁5次,紧接着绿灯闪烁5次,再红绿灯同时闪烁(表示进入read()函数),属正常现象。% i+ y+ S4 L9 Y. A5 [( E9 g* j1 P
       当加入全局变量赋值语句tempdata_test=1后,先是红灯闪烁,间隔约6秒后(程序运行不正常),再红灯闪烁5次,绿灯闪烁5次,再红绿灯同时闪烁。
& R" v" K# I- o(1)测试代码如下:
9 ^2 y$ e1 [0 D4 r' {  q7 ?
  1. static void SetSysClockToHSI64(void);: n* u$ \3 `8 @9 c
  2. int tempdata_test=0;  d; {# t- C9 ~9 i# E! H
  3. $ _- |/ Q9 x+ x; u' ?5 x, K4 D# V
  4. //初始化测试代码 , 读SPIFLASH前调用# j0 G4 `) N# v4 {- e
  5. int Init (void)
    $ i3 m$ w* G) S
  6. {     
    ) I. n1 t' |: Y4 H/ D
  7.     SystemInit();
    ) Z7 ^) d, P7 ~, `
  8.     SetSysClockToHSI64();   //操作寄存器实现时钟配置
    - a. s/ q. ?+ }8 w2 ~1 w

  9. $ b7 g# A% [7 l1 H: G+ j. F
  10.     //测试代码=========================================
    . M: f9 z4 l4 d7 H: c6 ^- m
  11.     GPIO_DS0_DS1_Init();    //初始化LED显示IO口
    3 z5 e+ o/ m2 `+ Y6 H8 D* m2 O, v+ f
  12.     //MX_SPI2_Init();        
    ( g3 ^% M  ?6 }. \9 }+ }
  13.     LED_TOGGLE0(2);         //红灯闪烁5次        # ~3 o' s  ^% F1 _' L- @8 V
  14.     tempdata_test=1;                //: ?& u1 Z( L' b9 E' ~% R
  15.     LED_TOGGLE1(2);         //绿灯闪烁5次
    3 q- T7 h* S* I" p2 _
  16.     //=================================================
    ) h. h3 F" J( o. _1 S) N0 I: J
  17.         return 1;. }9 d# U2 F) u- Q
  18. }
复制代码
(2)Target.lin文件代码3 b6 P( K# R( d% z5 S2 O' J
  1. FLASH_LOADER 0x20000004 PI   ; FlashLoader Functions! m/ W. [9 [" k- i, _& a. S
  2. {
    / |9 l" v# m5 s- u4 p8 v
  3.   PrgCode +0           ; Code
    + r/ M* d( C3 u, N; ~7 S2 C
  4.   {4 n1 |" J; g2 Q, K- F/ I, D
  5.     * (+RO)
    ; c" @; e5 Z8 J4 n3 x: U$ g1 o2 k* f
  6.   }
    4 i; d2 ~) o* c" y" j
  7.   PrgData +0           ; Data& v: Y9 a/ `- Y4 {
  8.   {7 w* K/ d" u6 S3 W3 D" ?
  9.     * (+RW,+ZI)8 {6 i! Y) [2 V( H8 R
  10.   }
    ; p" M1 _+ \4 N; J, z
  11. }
    ) Z* C* O: L6 L8 i

  12. 6 J2 i5 V4 q7 b3 ^" H6 g; r
  13. DEVICE_INFO +0               ; Device Info
    ) d, a! J. l) g7 @/ s# ^: G
  14. {$ T: ?( _* ], z; \! a; E4 X
  15.   DevInfo +0           ; Info structure
    2 |% Z) G2 I: |# r& u  K
  16.   {
    + F3 ^, o: n( s" q: X; E# X
  17.     dev_inf.o
    1 i. I) J% b7 x, X  C" q
  18.   }
    " L* z3 H8 a3 X6 v! w0 a
  19. }
复制代码

6 K% C) H3 R7 v5 B   , U; u' g( o9 L+ Y! T5 b/ Z  I
8 [( L8 ^4 V7 G: q+ ?% y

( b& Y) c" x& f& S6 b& q+ l
七哥 回答时间:2018-3-2 23:38:04
不错,解决了问题,来发贴分享,为你点赞
ychf0000 回答时间:2018-3-3 06:30:50
toofree 发表于 2018-3-2 23:384 I; Q9 r. h/ B: N6 f
不错,解决了问题,来发贴分享,为你点赞
5 \% c$ N, X2 ?# T
谢谢大师的热心帮助和鼓励
davidcdw 回答时间:2018-3-4 14:45:56
可以
carlxzl 回答时间:2018-3-4 15:44:17
正在学习
zero99 回答时间:2018-3-9 14:40:42
感谢分享,已汇总到3月技术原创:
; X/ f5 g/ F% `2 }! ihttps://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' e, D5 X, D9 z8 S' g$ A% R
下载1m数据大于时间是??

% g# U, q3 ?! L1 n$ \, r1分钟差不多
ychf0000 回答时间:2018-6-23 07:40:17
guowei680 发表于 2018-5-30 21:194 F7 C" u& R. Z0 k; p7 g
请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?

# s2 ~. B1 a5 C: b+ c5 p" |查查spi接口配置和时钟使能对不对
. D7 W" G. B6 B
ychf0000 回答时间:2018-6-23 07:42:45
guowei680 发表于 2018-5-30 21:19: y( W9 `% p" ?3 _
请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?

$ U# U, j# D- [- e$ b先在你的应用中验证你的spiflash读写正常,再移植过来
123下一页

所属标签

相似分享

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