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

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

[复制链接]
ychf0000 发布时间:2018-3-2 22:47
本帖最后由 ychf0000 于 2018-3-2 22:58 编辑
- J. o+ s5 L( M; d% C! M  u2 }( J; C# b$ Y
     在之前的学习中,一直用外部SPI Flash存放字库文件,之前的数据下载方法是用SD卡拷贝到SPIFLASH中,一直觉得在开发板上学习还算方便,如果在项目中应用,不是很方便,偶然机会,发现ST官方工具STM32 ST-LINK Utility可对外部SPIFLASH直接进行读写。于是尝试在原子精英板STM32 ST-LINK U上进行实验,并成功将字库文件下载到外部SPIFLASH,现把实现方法分享出来,方便大家共同学习,不完善之处还请多多指教!
" O# o5 @- _, s: n. B' [) O
( j  Z/ o7 M( k; t平台:原子精英开发板(SPIFLASH芯片型号W25Q128),STM32F103,ST-LINK/V2
% n( s% O4 V6 X
' Y9 @, `* U2 z: T准备工作
; s3 ~. [, K- R1. 官网或社区下载软件STM32 ST-LINK Utility v4.2.0 setup.exe,并安装+ |" e7 v4 m8 z2 U/ D1 t. d8 v# c
2. W25Q128_STM32F1_Elite.stldr文件制作
; Y& ^% ~" k& m% R0 F9 h6 Y) s2 F  源码见附件,该文件需要根据自己的硬件平台做出相应的修改
. ?* ?1 T2 S6 O. I/ d  E
3.将制作好的文件放在 安装目录\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ExternalLoader下

9 A" ]0 Q0 s) t( A4.添加LOADER文件
$ _4 q& F1 s4 H, ^; i: P
5.在ExternalLoader菜单先对外部SPIFLASH进行读、写、擦除等操作。/ T6 T+ |3 r$ L: K: i& ]  R

( R4 y/ q, g4 |( P2 ^$ @" Q* k6 L  E* F& `. }4 L( Z/ |! q9 u2 Q3 N
1 A: b! t; |! K/ K" k3 Y

' e. j3 e: y, v+ a8 \0 s
$ E1 x! ]/ q" L' o1 K* C! h; a

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,很有参考作用,谢谢!!9 Z0 e* q7 T+ R" r8 |, _: h  m
这些代码应该是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 编辑
# G( ^) U, E) [4 K+ d' \3 X6 P9 \6 P% |9 d* }$ w
第一次发帖,折腾的比较费劲,先将就看吧。7 G8 Z; s" c2 E* ]
正在尝试基于HAL库实现工程编写,进展不是很顺利,实现了再和大家分享吧。。。
8 e  k  o9 p6 |$ L/ H  s* o( x% |! }' m  V% B: X
2018年3月15日 经测试 基于HAL,对外挂SPIflash的下载速度较慢,时间差一倍以上,就不发源码了,推荐用标准库或直接操作寄存器方式。
; B7 E4 f* M. S7 @
- y7 x9 ~& J# a; l" Q1 ^+ D% K2018年3月10日最新进展      在规避全局变量的情况下,基于HAL库已实现对外挂SPIflash的读写擦除等操作。( A( j0 p- D! p& z

4 M4 \$ T" e0 e. c( W* P2018年3月8日进展3 k9 S& i7 D( }1 ~  O  Y# h
经过一段时间的排查发现代码中不能有全局变量,不知道什么原因?实在是没头绪了,希望有各位网友给予指点,实在不行就只有规避全局变量了
5 P8 _& Z' w/ p. a' _* ]& ?4 ]      为查找原因,编写了测试代码,当在软件ST-LINK Utility开始执行读取外部SPIFLASH时,从Init()函数,为此编写了测试代码,正常情况下,开始读时,开发板先看到红灯闪烁5次,紧接着绿灯闪烁5次,再红绿灯同时闪烁(表示进入read()函数),属正常现象。1 ^: ]0 H) R( Z( ^! U7 H& G9 s
       当加入全局变量赋值语句tempdata_test=1后,先是红灯闪烁,间隔约6秒后(程序运行不正常),再红灯闪烁5次,绿灯闪烁5次,再红绿灯同时闪烁。" j" E6 K9 Z( s: ~2 l7 s
(1)测试代码如下:
! n& {; M! T* a0 Q5 |) J
  1. static void SetSysClockToHSI64(void);
    2 V5 ~7 {: ?$ J5 L
  2. int tempdata_test=0;
    8 T4 Q5 S- \( u4 u% E& E8 d" L8 Z
  3. 0 _5 A. Q: q7 J* G
  4. //初始化测试代码 , 读SPIFLASH前调用$ V  o: n% D" T
  5. int Init (void)
    2 ~2 A- N* f6 b9 z1 n5 u% J1 f
  6. {     
    # z) n" c+ L/ w$ Q+ [
  7.     SystemInit();
    3 c3 m7 ?; G- U3 j
  8.     SetSysClockToHSI64();   //操作寄存器实现时钟配置 8 W, t/ R1 p3 C% Y' x) @

  9. ) f: E4 |7 f# ?4 F# u2 y
  10.     //测试代码=========================================; ^3 ^2 T* P- W6 e! e$ _# a
  11.     GPIO_DS0_DS1_Init();    //初始化LED显示IO口8 T, C8 v2 ]% x+ Y
  12.     //MX_SPI2_Init();        
    ! ]3 P) U; a2 x. g+ r, j' H
  13.     LED_TOGGLE0(2);         //红灯闪烁5次        
    2 I) W& Q7 T  P
  14.     tempdata_test=1;                //+ {: M5 e9 _2 r
  15.     LED_TOGGLE1(2);         //绿灯闪烁5次$ I6 c. L$ O4 p. a, l6 C
  16.     //=================================================
    / h% h5 c( ~8 I
  17.         return 1;4 |/ s% l; G) Q& Q
  18. }
复制代码
(2)Target.lin文件代码0 g8 X* a' |) Q* Z
  1. FLASH_LOADER 0x20000004 PI   ; FlashLoader Functions
    ) t( e0 s, R& r0 G8 I
  2. {
    / W5 }) c1 S& l
  3.   PrgCode +0           ; Code, j4 w& i! H% P4 G
  4.   {  Y! D) j' }: a: N
  5.     * (+RO). G0 |- @5 D; l; s% h4 l6 j
  6.   }
    ( j/ _! C+ V" J7 L- i, k4 U
  7.   PrgData +0           ; Data, R7 T4 D! [# z/ ~* l
  8.   {3 `1 i6 T* P$ H
  9.     * (+RW,+ZI)( O- O5 n6 z  }; J% x' y. i
  10.   }% a. K7 S3 l9 A9 _4 [, I
  11. }
    2 h& T. b9 N$ K1 r

  12. ; J& c0 b8 O, X6 V: U" j3 `
  13. DEVICE_INFO +0               ; Device Info2 E% Z8 \9 D+ m& c9 V
  14. {$ K/ H( O( g" J% J
  15.   DevInfo +0           ; Info structure
    ! w6 ^& ]; Q5 l' x/ Z- r
  16.   {) C" B3 m% R9 n  A2 G5 i9 L9 k/ Q
  17.     dev_inf.o
    . y% g" }# }* Q! h+ U/ {
  18.   }
    / U+ H2 `* n/ C! \- C
  19. }
复制代码

! Q- n3 r1 R: I* A   * N* H, M( i5 Z$ p
0 a5 H! `9 B$ y1 r

/ x5 G7 b/ S  Z
七哥 回答时间:2018-3-2 23:38:04
不错,解决了问题,来发贴分享,为你点赞
ychf0000 回答时间:2018-3-3 06:30:50
toofree 发表于 2018-3-2 23:38  g: B6 s/ c/ r0 \
不错,解决了问题,来发贴分享,为你点赞

4 E! i/ |2 D9 E5 V. O谢谢大师的热心帮助和鼓励
davidcdw 回答时间:2018-3-4 14:45:56
可以
carlxzl 回答时间:2018-3-4 15:44:17
正在学习
zero99 回答时间:2018-3-9 14:40:42
感谢分享,已汇总到3月技术原创:& t! X' p: s/ s
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:366 S3 F# V9 ~/ Z# @4 S8 s  e
下载1m数据大于时间是??

- G6 p, x; P4 F( W1分钟差不多
ychf0000 回答时间:2018-6-23 07:40:17
guowei680 发表于 2018-5-30 21:19
6 i. y* t. j; Q# W请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?

! N8 B& c" L5 l0 ]+ Z+ w查查spi接口配置和时钟使能对不对
! N3 ]9 {2 ]. u9 p3 j
ychf0000 回答时间:2018-6-23 07:42:45
guowei680 发表于 2018-5-30 21:199 _4 i& O6 e6 J3 K
请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?
# Q: g: d: B7 o6 _8 X
先在你的应用中验证你的spiflash读写正常,再移植过来
123下一页

所属标签

相似分享

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