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

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

[复制链接]
ychf0000 发布时间:2018-3-2 22:47
本帖最后由 ychf0000 于 2018-3-2 22:58 编辑
$ x3 `2 l7 y4 R3 @6 i( q  U* Q3 b0 D
     在之前的学习中,一直用外部SPI Flash存放字库文件,之前的数据下载方法是用SD卡拷贝到SPIFLASH中,一直觉得在开发板上学习还算方便,如果在项目中应用,不是很方便,偶然机会,发现ST官方工具STM32 ST-LINK Utility可对外部SPIFLASH直接进行读写。于是尝试在原子精英板STM32 ST-LINK U上进行实验,并成功将字库文件下载到外部SPIFLASH,现把实现方法分享出来,方便大家共同学习,不完善之处还请多多指教!
7 v% l' p9 L+ \  g! _* C: q2 d" \9 r, W
平台:原子精英开发板(SPIFLASH芯片型号W25Q128),STM32F103,ST-LINK/V2
! w  u& N0 N2 F5 c' F0 y* b9 h% y( Z; ]9 J6 J: T
准备工作, @$ q0 f, ~5 N. W0 ?+ k, A
1. 官网或社区下载软件STM32 ST-LINK Utility v4.2.0 setup.exe,并安装6 P! `1 c' B/ e3 m9 l3 A) |& ]
2. W25Q128_STM32F1_Elite.stldr文件制作% k8 a, B# v$ S* h! _
  源码见附件,该文件需要根据自己的硬件平台做出相应的修改0 D) k' v8 s4 U1 }8 X  [4 ]4 b
3.将制作好的文件放在 安装目录\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ExternalLoader下
' ]; o4 c0 l" S
4.添加LOADER文件  H% X% w2 T/ a7 P4 A
5.在ExternalLoader菜单先对外部SPIFLASH进行读、写、擦除等操作。
: K  f( S8 L% d+ a2 {6 Z

! O4 ~. U6 Z  n5 I! f* z; X. I% ^" ?5 V9 l. k# S' w
4 x$ k1 K+ w8 l; G% r' k4 L" T
" ]6 H# G6 I( U

1 }: a/ I. \: f6 A% R

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,很有参考作用,谢谢!!3 i* O" \" D- T& [
这些代码应该是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 编辑 ; m  `+ x+ h( |) L4 l# V

7 u8 j  G! x6 n) h+ z第一次发帖,折腾的比较费劲,先将就看吧。  S! z: H$ r7 h" Y# K
正在尝试基于HAL库实现工程编写,进展不是很顺利,实现了再和大家分享吧。。。1 o3 k$ E! M9 n& n' n+ {

) Y* N7 L( w7 o# u/ J. i8 q2018年3月15日 经测试 基于HAL,对外挂SPIflash的下载速度较慢,时间差一倍以上,就不发源码了,推荐用标准库或直接操作寄存器方式。& }3 y' e& X3 F) G1 Q4 q

% p/ ?) e/ `' x+ j. _, e, U, j2018年3月10日最新进展      在规避全局变量的情况下,基于HAL库已实现对外挂SPIflash的读写擦除等操作。6 w/ p8 n! U2 @3 t9 `* B

5 K( j* r2 k- ~  Z5 P' Q2018年3月8日进展$ \( O6 o" A) g& K
经过一段时间的排查发现代码中不能有全局变量,不知道什么原因?实在是没头绪了,希望有各位网友给予指点,实在不行就只有规避全局变量了
  ^0 C7 [1 d9 s' k& z      为查找原因,编写了测试代码,当在软件ST-LINK Utility开始执行读取外部SPIFLASH时,从Init()函数,为此编写了测试代码,正常情况下,开始读时,开发板先看到红灯闪烁5次,紧接着绿灯闪烁5次,再红绿灯同时闪烁(表示进入read()函数),属正常现象。
2 v* W$ T$ J0 S2 \; g5 ?) A) n# K       当加入全局变量赋值语句tempdata_test=1后,先是红灯闪烁,间隔约6秒后(程序运行不正常),再红灯闪烁5次,绿灯闪烁5次,再红绿灯同时闪烁。
+ ], B( S+ t/ t. B' D/ D; l(1)测试代码如下:  @4 g, ?- j( T8 e
  1. static void SetSysClockToHSI64(void);9 q7 @! L" \$ r% B0 N5 }( s
  2. int tempdata_test=0;
    % R; R" x0 ~4 O! J  z. R6 h+ j" E% M+ C

  3. 5 i6 k( t* k& y5 q2 S, L/ ~( _( l" D
  4. //初始化测试代码 , 读SPIFLASH前调用
    + Y, e5 {; j8 \- Z# b" a9 L
  5. int Init (void)0 m& N" G7 a0 b( p
  6. {     
    ( B* ~% d* n8 E6 a2 S; ~
  7.     SystemInit();1 n* ~, p8 W# {% d- N
  8.     SetSysClockToHSI64();   //操作寄存器实现时钟配置
    0 X4 `1 c0 z/ G" e1 M( Y
  9. # R9 Q5 V0 w9 I5 Z( w- q- {  d
  10.     //测试代码=========================================- ^! R6 p. {8 {/ r6 h3 @6 {5 Y
  11.     GPIO_DS0_DS1_Init();    //初始化LED显示IO口
    7 I. o# A% `$ H$ X3 J* N
  12.     //MX_SPI2_Init();        , I7 V1 U8 F. K& U- e
  13.     LED_TOGGLE0(2);         //红灯闪烁5次        $ R: r) A7 S9 v5 z3 B
  14.     tempdata_test=1;                //
    2 A$ ^+ d" Z" F! c
  15.     LED_TOGGLE1(2);         //绿灯闪烁5次
    - g0 X1 d7 D* n# f5 K  V% r1 T6 \: v
  16.     //=================================================# m9 j; L4 Y. x! D+ h* [
  17.         return 1;
    $ l" B( S! q1 Z$ T( s0 C" Q4 o: }
  18. }
复制代码
(2)Target.lin文件代码
; ^0 b2 O$ \' C" J# z
  1. FLASH_LOADER 0x20000004 PI   ; FlashLoader Functions
    ' l% t) {% O; E  u: s
  2. {
    6 ^5 u7 T) x* `" i9 G$ K
  3.   PrgCode +0           ; Code& A  L1 i7 ]% V5 ~" f* ~
  4.   {
    - @" ]! R% Z2 g6 y. f8 N
  5.     * (+RO)$ J# O3 G) d* D. [* H, q
  6.   }
    ( o" i  L3 d, q* P* ]
  7.   PrgData +0           ; Data
    3 @  K' H( X( H0 ~0 ?, c5 z
  8.   {
    ) C* |7 A, U. {" i" _. t. s
  9.     * (+RW,+ZI)
    & ^4 u7 |" H; J: B6 ^3 v9 v4 b
  10.   }
      @( |% v7 l6 `/ F, W1 z
  11. }
    . m0 z  ?* f9 F! q8 h0 Q" X
  12. ' }7 d2 P; O4 w; z( `
  13. DEVICE_INFO +0               ; Device Info
    . S) N& l8 p6 e* ~
  14. {, I  [* ?" K% t4 t$ n
  15.   DevInfo +0           ; Info structure. b8 @& _8 g( A( P
  16.   {, e- U, w6 I5 S# Q. P1 R
  17.     dev_inf.o) y8 F6 Z! X0 s& |! X: M- H' E9 Y
  18.   }5 ?) `( I  E; \, L$ I4 Y* `
  19. }
复制代码

* l4 w) [9 F  h. e5 }4 |   
0 b- u* m( V6 |4 R0 K
$ A; j  }. ^: x8 G
2 R3 r0 s4 u4 `
七哥 回答时间:2018-3-2 23:38:04
不错,解决了问题,来发贴分享,为你点赞
ychf0000 回答时间:2018-3-3 06:30:50
toofree 发表于 2018-3-2 23:38
5 g1 B0 s5 y1 t% W1 w# Y不错,解决了问题,来发贴分享,为你点赞
8 t+ P, _! K7 z" Z# s" u- I
谢谢大师的热心帮助和鼓励
davidcdw 回答时间:2018-3-4 14:45:56
可以
carlxzl 回答时间:2018-3-4 15:44:17
正在学习
zero99 回答时间:2018-3-9 14:40:42
感谢分享,已汇总到3月技术原创:. Q2 Z- C, G7 ~, r8 c' a/ u& y
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
0 p( _$ K3 N; i' W: E下载1m数据大于时间是??

- ^6 N5 @+ F" D5 W" R4 D1分钟差不多
ychf0000 回答时间:2018-6-23 07:40:17
guowei680 发表于 2018-5-30 21:19
: @5 l5 F4 x' S8 G请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?
) f  g( _; i6 K4 G1 D
查查spi接口配置和时钟使能对不对: Y" Q7 {8 L. y8 D
ychf0000 回答时间:2018-6-23 07:42:45
guowei680 发表于 2018-5-30 21:19  p" G# B: V. X) @
请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?

. i' P" s5 I6 k2 l, @8 f! N先在你的应用中验证你的spiflash读写正常,再移植过来
123下一页

所属标签

相似分享

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