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

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

[复制链接]
ychf0000 发布时间:2018-3-2 22:47
本帖最后由 ychf0000 于 2018-3-2 22:58 编辑
3 |0 @! O$ p. E/ L! I6 g7 c! F9 L/ J# J
     在之前的学习中,一直用外部SPI Flash存放字库文件,之前的数据下载方法是用SD卡拷贝到SPIFLASH中,一直觉得在开发板上学习还算方便,如果在项目中应用,不是很方便,偶然机会,发现ST官方工具STM32 ST-LINK Utility可对外部SPIFLASH直接进行读写。于是尝试在原子精英板STM32 ST-LINK U上进行实验,并成功将字库文件下载到外部SPIFLASH,现把实现方法分享出来,方便大家共同学习,不完善之处还请多多指教!
" p2 z/ v9 M( W) y
& Y5 f7 a! u: F; ~平台:原子精英开发板(SPIFLASH芯片型号W25Q128),STM32F103,ST-LINK/V2/ w9 H" H% Z' J$ ?
5 f7 S* G( K  z7 \6 Y
准备工作
/ n& Z8 M4 D3 g2 R5 v1. 官网或社区下载软件STM32 ST-LINK Utility v4.2.0 setup.exe,并安装% b: D8 M: w8 \. y0 E2 z5 T
2. W25Q128_STM32F1_Elite.stldr文件制作
( T7 G( y9 _+ u' S) F* J  源码见附件,该文件需要根据自己的硬件平台做出相应的修改
2 ^% M  Y" a8 ?
3.将制作好的文件放在 安装目录\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ExternalLoader下

2 ]- A/ I5 G$ ]( |9 y+ o4 k* D% @4.添加LOADER文件% `% Q; y& l' a; |6 y
5.在ExternalLoader菜单先对外部SPIFLASH进行读、写、擦除等操作。
2 V/ N# o% q8 N8 M9 ^

/ U" C% l0 u9 Y! n
5 _8 q9 V9 T& U. M* W

# V1 R, V. s) g7 K4 f3 E2 I1 R+ }4 K  B8 E( p+ o; R

5 s- {9 |( `6 g9 _' W' k' c

SPIFLASH程序下载工程源码.zip

下载

1.4 MB, 下载次数: 984

UM0892-User manual.pdf

下载

1021.92 KB, 下载次数: 454

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,很有参考作用,谢谢!!+ p1 n* f2 w6 G  J8 N% d7 X! v
这些代码应该是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 编辑 / c- g) `9 R$ A+ P; N8 r3 i$ F
  d& p1 D/ [( {+ {; l) H: \" R$ V
第一次发帖,折腾的比较费劲,先将就看吧。
; q7 h- F: O8 d0 i1 f正在尝试基于HAL库实现工程编写,进展不是很顺利,实现了再和大家分享吧。。。
( k% ^. b2 V3 B$ X9 y$ p
6 M8 p4 O6 J- q! A$ F1 H( H2018年3月15日 经测试 基于HAL,对外挂SPIflash的下载速度较慢,时间差一倍以上,就不发源码了,推荐用标准库或直接操作寄存器方式。
7 ]8 G. A% X% F3 l) H; l+ x& ^0 x' a* L2 K& a3 [
2018年3月10日最新进展      在规避全局变量的情况下,基于HAL库已实现对外挂SPIflash的读写擦除等操作。
2 w: n$ q$ a8 e+ f5 e6 L- [: D. @- I1 S
2018年3月8日进展$ s, ]1 F# |1 f  o
经过一段时间的排查发现代码中不能有全局变量,不知道什么原因?实在是没头绪了,希望有各位网友给予指点,实在不行就只有规避全局变量了
0 n6 F( j! ^3 D7 Q5 G2 C8 w      为查找原因,编写了测试代码,当在软件ST-LINK Utility开始执行读取外部SPIFLASH时,从Init()函数,为此编写了测试代码,正常情况下,开始读时,开发板先看到红灯闪烁5次,紧接着绿灯闪烁5次,再红绿灯同时闪烁(表示进入read()函数),属正常现象。
3 m% W' S( S( L0 A5 k  I       当加入全局变量赋值语句tempdata_test=1后,先是红灯闪烁,间隔约6秒后(程序运行不正常),再红灯闪烁5次,绿灯闪烁5次,再红绿灯同时闪烁。3 y! d9 v% W$ Q# c6 l: o
(1)测试代码如下:
* y5 i' R! T! \9 B' n) [
  1. static void SetSysClockToHSI64(void);
    7 P! D7 |/ S7 N& @! j- ~3 e
  2. int tempdata_test=0;
    ; ^% C' d! z, W; G% I8 {1 Y8 F( [
  3. ! c6 t2 x8 a. p2 p- G0 ?6 @
  4. //初始化测试代码 , 读SPIFLASH前调用
    + M  [' y9 c3 ^$ Y3 O) h9 q
  5. int Init (void)
    - _' S% k" \7 {! q/ K5 y
  6. {     , M- E- \4 V: J
  7.     SystemInit();3 ^  }- C" E" p- P8 V3 s: w
  8.     SetSysClockToHSI64();   //操作寄存器实现时钟配置
    5 e8 @* t/ L' O

  9. 1 @: O; m0 D0 H0 l+ c8 x
  10.     //测试代码=========================================
    " c8 G9 \7 r5 ?6 r& l
  11.     GPIO_DS0_DS1_Init();    //初始化LED显示IO口
    ; U  q/ h! H* g8 F
  12.     //MX_SPI2_Init();        * E  s- h. \) J2 z: @
  13.     LED_TOGGLE0(2);         //红灯闪烁5次        8 k3 x& D: k  L* O6 M0 ]; f8 n2 [  P
  14.     tempdata_test=1;                //
    ; w  g& A1 t0 N: N. o! j  b& {
  15.     LED_TOGGLE1(2);         //绿灯闪烁5次# g! G4 ]7 R; `2 T
  16.     //=================================================
    . t0 j5 K& Z, U' I
  17.         return 1;
    % Q* h2 O# [- E8 s" d- Y/ |5 U
  18. }
复制代码
(2)Target.lin文件代码
. p7 X: H( d* c
  1. FLASH_LOADER 0x20000004 PI   ; FlashLoader Functions6 @9 ], Y9 ~' y3 {" N% y4 J2 h
  2. {
    8 B. I$ i7 ^/ m0 e5 ^: Q4 S
  3.   PrgCode +0           ; Code: V: G1 H! q; x" [
  4.   {
    ( q; A* @& R2 Z
  5.     * (+RO)$ O+ M  R, E* B7 j6 E7 N
  6.   }
    - E5 O9 _1 O0 t( Z# S+ w
  7.   PrgData +0           ; Data
    4 M  d% I% K+ n+ n$ m9 a# o* I
  8.   {
    3 P0 Y1 p$ j2 ]5 N  A7 f8 n
  9.     * (+RW,+ZI)
    5 _4 Z+ ^9 P! r! v0 k, W6 F  N
  10.   }
    - q& }* c+ [8 h) h1 k: P: q* Z
  11. }
    1 j+ K% ~1 {9 S6 y2 r' Y( s
  12. * c! ?" y3 P/ g; N8 l  F
  13. DEVICE_INFO +0               ; Device Info
    9 d: I7 o/ B) d; u/ \& t' X! ~1 c
  14. {1 a8 M& `4 Q8 ]
  15.   DevInfo +0           ; Info structure1 \% V+ H6 l8 L) v4 ?
  16.   {
    $ o  E+ Y& z2 U1 J: O' Y/ H
  17.     dev_inf.o
    5 ]" [. O2 K8 Z
  18.   }
    9 Z( l% P/ u! W+ C, G5 ]7 k5 J
  19. }
复制代码

, r6 z# h- W  w7 `" t; D9 I   
, Y! B8 N1 m# }& f5 W# }
3 U4 P- S& o! `' R# q7 }
- e% U0 A* W3 K4 p* f' L
七哥 回答时间:2018-3-2 23:38:04
不错,解决了问题,来发贴分享,为你点赞
ychf0000 回答时间:2018-3-3 06:30:50
toofree 发表于 2018-3-2 23:38" f1 `' [( j" L4 ~. n0 d: M
不错,解决了问题,来发贴分享,为你点赞

& K+ n- }1 o5 {7 @谢谢大师的热心帮助和鼓励
davidcdw 回答时间:2018-3-4 14:45:56
可以
carlxzl 回答时间:2018-3-4 15:44:17
正在学习
zero99 回答时间:2018-3-9 14:40:42
感谢分享,已汇总到3月技术原创:
+ N, }' L% A8 A  A" S9 T0 g5 xhttps://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: V! X0 e8 i# h
下载1m数据大于时间是??

$ X. t) [  e0 \- F4 n1分钟差不多
ychf0000 回答时间:2018-6-23 07:40:17
guowei680 发表于 2018-5-30 21:19- ~5 g& [3 {( x4 e' x$ R3 E
请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?

9 H, L7 |/ B4 M: f3 t/ l查查spi接口配置和时钟使能对不对: N* z7 k' H" s' l8 a
ychf0000 回答时间:2018-6-23 07:42:45
guowei680 发表于 2018-5-30 21:19
5 b1 i, R* g* b9 }请问知道F4下要怎么修改,我改了库文件那些。可是不能下载和擦除?

# v/ c- j$ R0 I1 y* F2 r先在你的应用中验证你的spiflash读写正常,再移植过来
123下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版