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

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

[复制链接]
ychf0000 发布时间:2018-3-2 22:47
本帖最后由 ychf0000 于 2018-3-2 22:58 编辑 ; u& Z- [$ D4 X7 F& {
3 b" W5 l: J6 K% v
     在之前的学习中,一直用外部SPI Flash存放字库文件,之前的数据下载方法是用SD卡拷贝到SPIFLASH中,一直觉得在开发板上学习还算方便,如果在项目中应用,不是很方便,偶然机会,发现ST官方工具STM32 ST-LINK Utility可对外部SPIFLASH直接进行读写。于是尝试在原子精英板STM32 ST-LINK U上进行实验,并成功将字库文件下载到外部SPIFLASH,现把实现方法分享出来,方便大家共同学习,不完善之处还请多多指教!7 W3 R' D* A6 X: y: n$ [
+ u. m# n( i0 {5 n
平台:原子精英开发板(SPIFLASH芯片型号W25Q128),STM32F103,ST-LINK/V23 V# ~$ w* @; ^* c2 u( w
& x' `+ c# D: v+ ~- a
准备工作. C- h6 t8 Y5 r& a6 p9 Y# V+ D
1. 官网或社区下载软件STM32 ST-LINK Utility v4.2.0 setup.exe,并安装
# U& }7 @' h$ c; z2. W25Q128_STM32F1_Elite.stldr文件制作
5 u6 g; \. `6 L0 @. n% x% H0 y  源码见附件,该文件需要根据自己的硬件平台做出相应的修改* e: a& f. b/ [' H, f: {! A0 F! W
3.将制作好的文件放在 安装目录\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ExternalLoader下
2 I- I( M3 o4 o, \
4.添加LOADER文件! A/ j5 t. {' g1 y4 ]% E' |
5.在ExternalLoader菜单先对外部SPIFLASH进行读、写、擦除等操作。
. P" n; g" J9 U5 S; ]# _9 ~

$ m+ Q7 n  N. t. Y# o
3 D- R& K/ ]8 H8 [
8 s- D7 \, t% @. u& T5 \0 G

0 w2 }* t  V6 b' [( p$ p$ p# L) K4 D& I

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,很有参考作用,谢谢!!
. W% X+ e' a8 x# Y& Y. X这些代码应该是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 t+ ]3 F& z, [4 o8 a

8 E; s! q/ @, l" Q5 V- v' c+ U4 Q第一次发帖,折腾的比较费劲,先将就看吧。
" g& u0 [4 p1 o3 H- |" c正在尝试基于HAL库实现工程编写,进展不是很顺利,实现了再和大家分享吧。。。6 C0 @( D5 s0 j2 S. O

8 |  i* U; k: S3 W2018年3月15日 经测试 基于HAL,对外挂SPIflash的下载速度较慢,时间差一倍以上,就不发源码了,推荐用标准库或直接操作寄存器方式。# g+ X4 t9 ~, P7 }! X
2 o0 L" v# w$ _0 f
2018年3月10日最新进展      在规避全局变量的情况下,基于HAL库已实现对外挂SPIflash的读写擦除等操作。. j4 \0 U' S9 s) d) F

2 r; H! b' o( P' u1 r: g' y! h2018年3月8日进展
0 ~& ~+ X  w9 @1 p, @; T8 a经过一段时间的排查发现代码中不能有全局变量,不知道什么原因?实在是没头绪了,希望有各位网友给予指点,实在不行就只有规避全局变量了
/ e" Z) {) x* R* o. i" k8 F4 e; \      为查找原因,编写了测试代码,当在软件ST-LINK Utility开始执行读取外部SPIFLASH时,从Init()函数,为此编写了测试代码,正常情况下,开始读时,开发板先看到红灯闪烁5次,紧接着绿灯闪烁5次,再红绿灯同时闪烁(表示进入read()函数),属正常现象。6 k8 a% Z2 u9 k* l1 U
       当加入全局变量赋值语句tempdata_test=1后,先是红灯闪烁,间隔约6秒后(程序运行不正常),再红灯闪烁5次,绿灯闪烁5次,再红绿灯同时闪烁。
6 ?! L3 X) Z# C# H% F' C(1)测试代码如下:' w6 Y, L$ x6 I2 m
  1. static void SetSysClockToHSI64(void);0 }$ y  J' V2 u8 z3 f
  2. int tempdata_test=0;- w  I5 v5 n- T9 X4 T8 A! n

  3. * T2 _* j: ?* {! N. a5 D/ }
  4. //初始化测试代码 , 读SPIFLASH前调用
    6 E( I  u8 U" S' _" U  j
  5. int Init (void)
    2 b5 F$ Z3 u, C1 C( K( }% D
  6. {     
    2 U; w! A2 S  U1 X/ O; Z' @
  7.     SystemInit();4 s( q) n. v9 J
  8.     SetSysClockToHSI64();   //操作寄存器实现时钟配置
    ! E. d7 C- D" \7 d3 K1 B6 G0 J

  9. 0 Y+ t  }0 n% b: r2 g$ S
  10.     //测试代码=========================================
    / B8 G5 Q) @6 T; B& E' ~9 x
  11.     GPIO_DS0_DS1_Init();    //初始化LED显示IO口
    , H4 A' w  N$ x, C
  12.     //MX_SPI2_Init();        , b+ e& _" ~) C7 s
  13.     LED_TOGGLE0(2);         //红灯闪烁5次        
    . i' v# Y0 c' ?% T; \8 o9 p8 t
  14.     tempdata_test=1;                //
    9 u5 ]* w2 O; |6 n5 @
  15.     LED_TOGGLE1(2);         //绿灯闪烁5次
    4 X: X$ H+ c, A1 z4 f! N& S+ {' Z
  16.     //=================================================
    : ~) g, G( V# ], E5 k/ ~
  17.         return 1;
    & e" x5 ^( O2 t$ L4 X! p
  18. }
复制代码
(2)Target.lin文件代码" B2 P; S/ ?, W  _4 A
  1. FLASH_LOADER 0x20000004 PI   ; FlashLoader Functions
    , I( N& S8 P* m/ U
  2. {
    % G* ~* \6 n/ I6 Y6 e. Z
  3.   PrgCode +0           ; Code
    * [- _9 N- s0 Z- o! H1 R
  4.   {  y" _6 d0 j, }9 k0 e
  5.     * (+RO)
    . W0 W! d$ z0 n( R
  6.   }
    , Z% Y1 h1 n; g  |7 O
  7.   PrgData +0           ; Data/ E7 Y( k1 V* G7 F% I
  8.   {  C+ E. r  |) J! E
  9.     * (+RW,+ZI), c0 ?$ W/ p  b& k" T3 o
  10.   }/ C# ]" T  p, m/ ^
  11. }* [! {$ Z7 r# J" N6 v# i) f2 G0 F

  12. + A. j" j4 f. v* J
  13. DEVICE_INFO +0               ; Device Info: j& y9 [2 M4 P5 ^4 v+ H9 N9 i
  14. {
    & L; ?( O" h1 ^& o5 M# v. X6 f
  15.   DevInfo +0           ; Info structure2 ?. Q3 `( s+ w" V
  16.   {
    $ l0 _. }2 I* ?- k8 {, n
  17.     dev_inf.o
    ) g3 X) w3 h, m6 @  g, z
  18.   }
      D5 `) X5 L# H9 `
  19. }
复制代码
* z! E! ~  Z' e0 R
   ' W# `- h+ J) ^# I! A2 s
4 @, V/ W/ x4 |
4 z; M, s: N8 l6 K
七哥 回答时间:2018-3-2 23:38:04
不错,解决了问题,来发贴分享,为你点赞
ychf0000 回答时间:2018-3-3 06:30:50
toofree 发表于 2018-3-2 23:38
# f  ~1 n0 ^0 O6 r0 k$ l! h不错,解决了问题,来发贴分享,为你点赞

* b/ G% m4 r8 K8 Y: w谢谢大师的热心帮助和鼓励
davidcdw 回答时间:2018-3-4 14:45:56
可以
carlxzl 回答时间:2018-3-4 15:44:17
正在学习
zero99 回答时间:2018-3-9 14:40:42
感谢分享,已汇总到3月技术原创:+ ^8 H8 ]7 g# S4 _
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:364 Q4 R# z' I# X" }9 i4 z4 e2 j0 d
下载1m数据大于时间是??

5 `; @/ Q7 P2 A' k  D1分钟差不多
ychf0000 回答时间:2018-6-23 07:40:17
guowei680 发表于 2018-5-30 21:19
. G0 s3 W5 q4 L+ d请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?

2 q, k8 q+ j9 i. E# Z2 p- J查查spi接口配置和时钟使能对不对
0 h1 F# [3 L" m5 Z
ychf0000 回答时间:2018-6-23 07:42:45
guowei680 发表于 2018-5-30 21:19# t4 M" V4 V2 e8 \, C. u1 w
请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?
8 A$ w% Q, T8 f$ g/ g
先在你的应用中验证你的spiflash读写正常,再移植过来
123下一页

所属标签

相似分享

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