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

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

[复制链接]
ychf0000 发布时间:2018-3-2 22:47
本帖最后由 ychf0000 于 2018-3-2 22:58 编辑
8 M1 ?* R5 j" o4 d# O  ]# a' l% K1 w: f7 c6 N7 O  W% I# m" i. R
     在之前的学习中,一直用外部SPI Flash存放字库文件,之前的数据下载方法是用SD卡拷贝到SPIFLASH中,一直觉得在开发板上学习还算方便,如果在项目中应用,不是很方便,偶然机会,发现ST官方工具STM32 ST-LINK Utility可对外部SPIFLASH直接进行读写。于是尝试在原子精英板STM32 ST-LINK U上进行实验,并成功将字库文件下载到外部SPIFLASH,现把实现方法分享出来,方便大家共同学习,不完善之处还请多多指教!
  {3 ]% z, ~' V! `/ z- y" W" V; u# y7 v
平台:原子精英开发板(SPIFLASH芯片型号W25Q128),STM32F103,ST-LINK/V2
9 ]& P# I; F4 k. y9 G  Y( U  f, j" I& m) U* n4 E" V/ \0 M. H9 y
准备工作
0 D6 v0 j1 |  |4 P, f1. 官网或社区下载软件STM32 ST-LINK Utility v4.2.0 setup.exe,并安装
' X/ L  A  i( d4 {2. W25Q128_STM32F1_Elite.stldr文件制作
& [" u4 n- M+ g8 t7 n- n  源码见附件,该文件需要根据自己的硬件平台做出相应的修改2 s9 l* ?2 Q- t& l
3.将制作好的文件放在 安装目录\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ExternalLoader下
3 l8 W5 f$ d) A) K
4.添加LOADER文件- L% r4 G/ l0 h; l
5.在ExternalLoader菜单先对外部SPIFLASH进行读、写、擦除等操作。8 f) R: ]* H% |' |

1 |5 S( ~# }! x6 e+ u) i2 B- t2 b# w

* s; N0 n( U1 ?, J" Z5 E  y3 U) T  T7 L

5 r8 x4 c9 _$ x, a

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,很有参考作用,谢谢!!
3 i( w# {3 g4 s8 G. ]& H这些代码应该是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 编辑 , l% E8 s2 b) b# u
( u* ?* ?! c6 H. H
第一次发帖,折腾的比较费劲,先将就看吧。# p9 |) }( |5 t$ T
正在尝试基于HAL库实现工程编写,进展不是很顺利,实现了再和大家分享吧。。。
9 V, p1 D- U* a6 F7 a/ J
  i  Z8 k% i3 o2018年3月15日 经测试 基于HAL,对外挂SPIflash的下载速度较慢,时间差一倍以上,就不发源码了,推荐用标准库或直接操作寄存器方式。
0 A$ Y) T) g$ r
( H( f' n, S  K" ~2018年3月10日最新进展      在规避全局变量的情况下,基于HAL库已实现对外挂SPIflash的读写擦除等操作。
  S  Q1 a; X8 [, q, I. j6 E; R( t
2018年3月8日进展6 J$ Z1 j; Z9 r3 T
经过一段时间的排查发现代码中不能有全局变量,不知道什么原因?实在是没头绪了,希望有各位网友给予指点,实在不行就只有规避全局变量了- a" t8 Y- w. f2 j
      为查找原因,编写了测试代码,当在软件ST-LINK Utility开始执行读取外部SPIFLASH时,从Init()函数,为此编写了测试代码,正常情况下,开始读时,开发板先看到红灯闪烁5次,紧接着绿灯闪烁5次,再红绿灯同时闪烁(表示进入read()函数),属正常现象。3 S( D+ j) v5 ~$ `% s
       当加入全局变量赋值语句tempdata_test=1后,先是红灯闪烁,间隔约6秒后(程序运行不正常),再红灯闪烁5次,绿灯闪烁5次,再红绿灯同时闪烁。
% P& j! l9 P4 r6 Y(1)测试代码如下:
6 Y) e: M0 e& e8 p; L
  1. static void SetSysClockToHSI64(void);. h3 K$ h# s) O8 h- @% V, U3 e
  2. int tempdata_test=0;( u8 a; f! B' X  k3 J

  3. ' E9 Q& R% I4 \; x
  4. //初始化测试代码 , 读SPIFLASH前调用3 {6 K% U" T+ L; }9 S
  5. int Init (void)
    . g% C! v$ }! n1 D
  6. {     
    " Y' l! ]7 Z9 j9 c2 I* o
  7.     SystemInit();7 e: i, ^0 `* s9 y% }1 f6 |
  8.     SetSysClockToHSI64();   //操作寄存器实现时钟配置
    0 f! D% ?$ P5 i

  9. ) T1 b1 C# W. x+ w! t' L6 H
  10.     //测试代码=========================================4 f6 Z/ z) K* e% y9 W" f
  11.     GPIO_DS0_DS1_Init();    //初始化LED显示IO口
    : H8 }% u0 o5 I, m+ Y
  12.     //MX_SPI2_Init();        : a8 h6 H7 g" b: F" Y
  13.     LED_TOGGLE0(2);         //红灯闪烁5次        6 B. A* O( G- J; F4 Y
  14.     tempdata_test=1;                //
    0 |/ M* `! x8 @$ w$ a2 U
  15.     LED_TOGGLE1(2);         //绿灯闪烁5次& B5 g5 L3 b( N+ Y& c
  16.     //=================================================( h: K- R( Z. K) A! i
  17.         return 1;* m4 t" J, L5 t5 |6 _8 q
  18. }
复制代码
(2)Target.lin文件代码# p8 w! K# y. K( O. I0 L
  1. FLASH_LOADER 0x20000004 PI   ; FlashLoader Functions+ @* Y% V% O' @& V/ P
  2. {. K7 U! i4 D% h! P! l" D" k3 s& M
  3.   PrgCode +0           ; Code
    . Q/ l% O, L  T% c. s# r5 t1 M4 E3 r, N
  4.   {* H7 W( G9 ]& X6 Y
  5.     * (+RO)2 t# @; ^, ], y( W
  6.   }
    ! \. T  C0 n5 g' q
  7.   PrgData +0           ; Data
    4 L6 ]/ P3 p7 @8 l2 _" O2 j" s
  8.   {7 O6 C- `7 ^$ ^* r  L# v1 I
  9.     * (+RW,+ZI)- u" G- H0 W3 k; ^8 J
  10.   }
    5 @& M1 X3 Q; o; N
  11. }
    ) L( R' M, p: y6 w" f+ ?

  12. $ M1 _6 t& V$ {4 p  z
  13. DEVICE_INFO +0               ; Device Info
    9 n% n4 x9 z* a+ ^6 Z) K4 Q+ ?
  14. {
    + n" w' O! ~0 D3 p+ f, S
  15.   DevInfo +0           ; Info structure
    ' N5 U! T, I; n2 s! C: `
  16.   {
    # {5 N( p0 K$ I$ o& s, D
  17.     dev_inf.o( y+ M3 o/ c7 E) f* ^0 ]
  18.   }
    4 u" ^& _4 t+ e3 v* t" `% v
  19. }
复制代码
# x& O8 _' Z, ?# S1 ~6 f
   
0 N" {8 y1 O. @$ @: p, U. T
3 B. I; ^& T6 P# @: A: I& r4 _% w+ P8 U
七哥 回答时间:2018-3-2 23:38:04
不错,解决了问题,来发贴分享,为你点赞
ychf0000 回答时间:2018-3-3 06:30:50
toofree 发表于 2018-3-2 23:381 ^/ [5 V6 k9 R" H) q  W+ i" M" s" X
不错,解决了问题,来发贴分享,为你点赞
' p. i; M' I$ U# z
谢谢大师的热心帮助和鼓励
davidcdw 回答时间:2018-3-4 14:45:56
可以
carlxzl 回答时间:2018-3-4 15:44:17
正在学习
zero99 回答时间:2018-3-9 14:40:42
感谢分享,已汇总到3月技术原创:0 r- C0 N4 Q& |% \$ g
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
' x/ V+ O! d% s( n$ U5 q下载1m数据大于时间是??

" `0 l+ C* }2 [; m1分钟差不多
ychf0000 回答时间:2018-6-23 07:40:17
guowei680 发表于 2018-5-30 21:19! q; f& ]: p( R3 S  e
请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?

1 A# Q9 W5 {; M1 f3 ?查查spi接口配置和时钟使能对不对: e! }% @" o9 y6 s  c9 z
ychf0000 回答时间:2018-6-23 07:42:45
guowei680 发表于 2018-5-30 21:199 z' C8 C& ^/ i4 J
请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?
! T# Y- l& A" z) |% p
先在你的应用中验证你的spiflash读写正常,再移植过来
123下一页

所属标签

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