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

[折腾STLINK] windows下成功编译stlink库(https://github.com/xor...

[复制链接]
Mandelbrot_Set 发布时间:2017-2-8 14:17

( l8 l0 U  y  U  H/ E
" ]) D! U& z) B- _; P( L# M% R- \+ X. R6 p6 d
写在前面:
1 b. P/ u# a: a/ V8 L0.好久不发帖子,排版略渣
# J$ s8 P" Q0 P2 Z8 z1.编译是可以成功的,但不保证不同环境及设置所造成差异
( V* |' n) r5 \/ D' [2.只是编译通过,库本身是否有bug属于未知问题.
: U8 T- m3 G/ ]. i
) b; ~* w. ], G0 H/ F

( w. G* ?, x$ ^2 M/ D& L# ~8 H仓库简介:3 Y: I# z9 a! C7 w, U4 I# K) w
STMicroelectronics STlinkv2 programmer library and tools+ e& Y) l& R4 t" u
(具体可到web页面上自己看 http://github.com/xor-gate/stlink2)' K. c; K6 J5 R: }+ A  T
这个就不多说的,代码不是我写的.
3 a3 n. }4 b5 j  A/ t" ~5 f( Y7 C$ R! Y) s

6 a- K# L9 ?* G- L( {/ y
windows环境编译心得及步骤:! H0 s' L; ^7 j0 T) t7 R1 b9 A
1.搭建msys2环境。* `  w) Q4 M6 K" ]8 X2 [) R' l
[仅mingw可能就够用了,不过考虑到源码用到cmake,有个shell命令行开发环境,是相当有必要的]
0 O9 j' N1 v( @/ n下载 msys2安装包(我用的是msys2-x86_64-20161025.exe) 3 J* @& P8 n5 r( F1 C
ref:
% X; Y% r/ n8 j5 F+ xhttp://sourceforge.net/projects/msys2/files/Base/i686/ % ], f0 H$ a" f( z
http://www.msys2.org/$ y& _0 J7 i" \$ N/ g* ?
印象中这个是要windows 64位操作系统才支持的。
* L$ i- J# L1 Q& S+ u- b% Z! \3 W安装步骤略...,就是一路点下去,设个安装路径.; e: r: U. [! B2 ^5 H
启动过后用pacman安装必要的工具,这个不是本贴重点,暂略...
) j/ n9 |- C' t  m8 _4 ?具体可以百度google,网络不行pacman的源也可以修改,baidu吧.6 v1 E9 p- K. E1 {

: x/ g! o5 w! O% f% M2.编译libusb
: f6 R( g6 L, o+ }) P) ?下载libusb-1.0源码8 y$ v* F2 T# k4 X5 F
[参:http://sourceforge.net/projects/libusb/files/libusb-1.0/]1 k: G4 E& J3 e$ t6 G
子版本号应该不是重点
7 M! O1 l8 n- R- G  g这个编译很简单,编译步骤:
9 }9 A+ X" p  j' \  R# _0 N
  • 解压
  • msys2进入相应目录下
  • ./configure
  • make6 ^  X1 p: L$ U" k% b# C& H) N. x

' ^$ |: W+ K2 ~: K3 E) }" X如果成功,在libusb/.libs目录下生成libusb的静态库和动态库.这是我们需要的。
) e7 J. O1 t/ v4 {libusb/下的头文件也用的到.
% s( n3 m1 I/ I0 `4 y9 n# ]2 r/ r% Z5 ^
- a5 ?" d) j# y0 R+ K几点说明:
( ?$ o) @& t( j$ {[注1:可以make install,但并非必要]9 z7 V! C) ~- v
[注2:可以指定安装路径,也非必要 ./configure --help 查看帮助]# D( v6 ^. P( M. Z

' I; u, o" Y  ^8 I3 k, z3.编译stlink2
# E$ ~7 |4 i- S, A下载源码:" [9 u! y* A& n6 A7 [- ^
git clone http://github.com/xor-gate/stlink2/ x% ]6 y. ^  Z6 O8 \4 X/ N
如果msys2不想安装git,web页面下载压缩包,然后解压过去,效果是一样的。
. {$ q- d2 S6 y8 |9 X3 X进入stlink目录,打开README.md...先看一看...
& X; u  b$ u: M9 P这是个好习惯1 n/ ^! K1 b: I, ~& K9 ?/ s
所有设置都正确,执行make debug即可开始编译。
$ c, r) R* g/ l  p) I. F由于现在什么也没做,不出意外,是编不过的。9 z0 P' ^3 D# D9 F
make release应该差不多,先不考虑。1 U2 Y- g! n" Y4 Y
根据出错提示进行修改,修改过后,执行:
% I( H6 I8 P& O! B, zmake clean
5 C$ Z  B! I( a1 Z8 Omake debug
% y( D! C& n0 v* [9 t修改方法:1 x/ c9 \6 k$ p
1.提示缺少工具
2 \. h: T; y, Z  E比如没装gcc,没装cmake,没装make。。。那么安装一个..,反正少啥就装啥...3 V: [" x  B. `" y& r# ~* s- s

, [" n7 [1 i! p! \& F2 B2.提示:
! m; T6 z2 f9 FSystem is unknown to cmake, create:0 z5 F9 a0 D# I8 w$ g
Platform/MINGW32_NT-6.1 to use this system, please send your config file to cmake@www.cmake.org so
9 e5 h) C  i- Q: ^. z* S5 |3 M5 z& q! l修改顶层MakeFile[line 49 - 51] (贴出来tab键咋没了)
9 m, C/ `. v# a* F: ]5 f
  1. build/Debug:. A; A7 u1 I0 _* i+ n7 a; q
  2.         @mkdir -p $@
    ! X: o- u. H# }/ o$ g2 f$ z
  3.         @cd $@ && cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_SYSTEM_NAME=Generic ../../
复制代码
release先不考虑...3 l) }0 V4 N6 p+ o. `3 I

; P6 x. G2 A# D9 I% }9 M7 U3.提示LIBUSB_INCLUDE_DIR LIBUSB_LIBRARY 出错, v- z' ?* f$ b; C
这是因为cmake找不到libusb库,可以手动设置下:
  G8 U- M6 a2 i: i1 p修改cmake/Find7Zip.cmake
4 x7 q5 y2 a; H$ j1 _set (LIBUSB_INCLUDE_DIR [这儿填路径,中括号删掉])! ^! L( ]: i; M8 J" ?$ |+ R8 F
set (LIBUSB_LIBRARY [这儿填路径,中括号删掉])
+ q7 ?$ o3 Q" u2 R! bLIBUSB_LIBRARY 指向 你的libusb-1.0.a的路径8 j6 V- N0 P3 F7 _& t2 w
LIBUSB_INCLUDE_DIR 应该也可以随便设,自己把libusb的.h copy过来
+ C9 \; {8 f/ c- G$ h4 ^7 a0 T2 ?0 C5 _" k3 K. Z, u
4.缺少头文件
: {6 ]3 J/ o) r; s3 V8 A反正都能找的到...注意下 include <>与“”的差别
/ t9 E$ @! |* L# C. L) R) T
9 K% J* w; @! b& x附上编译成功的输出信息:' F+ M7 B& E9 V1 E) ]9 C- K
  1. admin@admin-PC MINGW32 ~/workspace/STLINKALL/stlink2* p: ]% Z4 ]: d$ ]
  2. $ make debug
    0 ]7 z3 F( {! u) ]3 w- v# G3 O2 z
  3. -- The C compiler identification is GNU 5.3.0
    6 B4 y0 B' o: F% E
  4. -- Check for working C compiler: /usr/bin/cc.exe
    ; y  b0 C6 f1 r
  5. -- Check for working C compiler: /usr/bin/cc.exe -- works
    ) Y1 C# E8 K9 F0 H$ t0 F  e8 h2 P
  6. -- Detecting C compiler ABI info" v# h9 m, x- P6 ^1 U, K" H
  7. -- Detecting C compiler ABI info - done4 ]8 v2 T0 S6 Y" G, a1 [
  8. -- Detecting C compile features" L) u2 q" F- a6 I4 i
  9. -- Detecting C compile features - done
    % _' H8 K8 e; v1 V6 x- k
  10. -- stlink2 version: 0.1.0-dev/ A( c# a4 m& Q1 G5 q  O; d
  11. --            Major 0 Minor 1 Patch 0$ m( A0 e/ x9 ?. m7 z2 s
  12. -- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE)
    ; F0 f7 Y- E; m" y+ ]
  13. CMake Warning (dev) at cmake/Doxygen.txt:27 (message):
    ; M% h* W& W6 R  R- I! p& L$ @
  14.   Doxygen is needed to build the documentation.) n% Q+ K& k  P. |3 d% m* E/ R6 t
  15. Call Stack (most recent call first):7 U6 Z3 `$ `) R3 V  u2 i
  16.   CMakeLists.txt:19 (include)5 w4 |" @( l0 M; U, e
  17. This warning is for project developers.  Use -Wno-dev to suppress it.
    . I- p+ t9 t9 ~3 Y1 O" s
  18. - y/ }2 z3 \9 z( A( \
  19. -- Performing Test C_SUPPORTS_STD_C99
    5 v* M, R' f5 t5 N5 z
  20. -- Performing Test C_SUPPORTS_STD_C99 - Success! a4 q& S# v; o/ o* E; K0 |
  21. -- Performing Test C_SUPPORTS_WEXTRA
    3 R8 J% {, h! E7 j7 @, M8 ^
  22. -- Performing Test C_SUPPORTS_WEXTRA - Success" d) f  n) `. Y# L  c  p, i. K
  23. -- Performing Test C_SUPPORTS_WSHADOW# u& Z% F) f+ v8 F+ m2 @& i
  24. -- Performing Test C_SUPPORTS_WSHADOW - Success$ P+ |- k' O. f6 _* X5 e
  25. -- Performing Test C_SUPPORTS_D_FORTIFY_SOURCE_2
    6 ~, d4 T/ I9 g' J; p; X
  26. -- Performing Test C_SUPPORTS_D_FORTIFY_SOURCE_2 - Success' {' k& a" }. L+ ]$ H" n& M
  27. -- Performing Test C_SUPPORTS_FSTRICT_ALIASING
    4 @+ ^5 j0 c! n9 ?9 r
  28. -- Performing Test C_SUPPORTS_FSTRICT_ALIASING - Success" ?$ {9 Q# A4 [3 w' K8 I, E
  29. -- Performing Test C_SUPPORTS_WFORMAT( A2 K9 D- q, m3 t8 _) M. y
  30. -- Performing Test C_SUPPORTS_WFORMAT - Success
    6 b1 [+ L; ^: ]" Y
  31. -- Performing Test C_SUPPORTS_WFORMAT_SECURITY3 R# ?, H' {- z8 ?' N# D, [) a% N
  32. -- Performing Test C_SUPPORTS_WFORMAT_SECURITY - Success
    / E. W5 @+ \: A( t% o
  33. -- Performing Test C_SUPPORTS_WMAYBE_UNINITIALIZED) G6 P$ B) l7 R( h5 r( _
  34. -- Performing Test C_SUPPORTS_WMAYBE_UNINITIALIZED - Success
    / u; T: g6 k) R1 |8 R% |. g4 r
  35. -- Performing Test C_SUPPORTS_WMISSING_VARIABLE_DECLARATIONS1 R3 B4 Q% f, g$ ~* ], V; @) o
  36. -- Performing Test C_SUPPORTS_WMISSING_VARIABLE_DECLARATIONS - Failed) ?  y9 o. Q, G0 ~
  37. -- Performing Test C_SUPPORTS_WSHORTEN_64_TO_32
    ; B5 W3 ?, [/ n6 c
  38. -- Performing Test C_SUPPORTS_WSHORTEN_64_TO_32 - Failed! W! A1 u3 V, L- M" @" ^
  39. -- Performing Test C_SUPPORTS_WIMPLICIT_FUNCTION_DECLARATION
    4 g8 i7 z- U5 c
  40. -- Performing Test C_SUPPORTS_WIMPLICIT_FUNCTION_DECLARATION - Success
    $ @  Q% E6 O9 m! V$ e) l& I# U5 j
  41. -- Performing Test C_SUPPORTS_WREDUNDANT_DECLS
    ) Z& g: H2 C  Q% ?2 E+ H
  42. -- Performing Test C_SUPPORTS_WREDUNDANT_DECLS - Success
    5 Y1 w5 b5 u5 n* J
  43. -- Performing Test C_SUPPORTS_WUNDEF
    " `& O6 o# m# X" ^+ @: C9 f
  44. -- Performing Test C_SUPPORTS_WUNDEF - Success1 |8 o( l* T1 D: f
  45. -- Performing Test C_SUPPORTS_WSWITCH; z' b5 [9 G& I- A
  46. -- Performing Test C_SUPPORTS_WSWITCH - Success
    0 M8 ~8 O, U; m. R& V
  47. -- Performing Test C_SUPPORTS_WFLOAT_EQUAL
    & h! v8 w" X' Q; B( y
  48. -- Performing Test C_SUPPORTS_WFLOAT_EQUAL - Success
    % f' O; z% r3 K
  49. -- Check if the system is big endian3 j' P) ^3 O* P3 p9 ~0 Q
  50. -- Searching 16 bit integer
    6 A9 D; d% V6 E8 ]  T
  51. -- Looking for sys/types.h
    & f( X! k: \1 w) J$ q) q) \
  52. -- Looking for sys/types.h - found
    7 q6 h; l* ]# u8 X1 y* h
  53. -- Looking for stdint.h7 V7 q0 _2 t3 s; D/ h" {' l0 `. t
  54. -- Looking for stdint.h - found
    * J6 p. b4 }) |9 s; ?) P
  55. -- Looking for stddef.h5 `2 s, H5 i2 s2 M" W
  56. -- Looking for stddef.h - found
    1 p4 H( c" y+ g6 o$ V' X
  57. -- Check size of unsigned short
    5 n$ b2 v0 {# g/ h& s' ~9 m! m
  58. -- Check size of unsigned short - done# [* V& S! Z5 v: Y: Z4 {
  59. -- Using unsigned short% A+ `' W, P- l! v
  60. -- Check if the system is big endian - little endian  ?, G6 r5 y) k
  61. -- LITTLE_ENDIAN
    : M' ~0 {2 u, [7 N9 v( W) a2 e
  62. -- Looking for nanosleep
    : a. ]& V6 W1 \6 v/ I; v
  63. -- Looking for nanosleep - found
    ) U* l/ M% h- G$ V/ I' y
  64. -- Performing Test C_SUPPORTS_WALL5 X4 t+ V  E/ w$ J* d
  65. -- Performing Test C_SUPPORTS_WALL - Success# z$ k8 L& w# s0 S9 z% I. M
  66. -- Performing Test C_SUPPORTS_O0: L- R* ~/ @" a# u" T, [3 u
  67. -- Performing Test C_SUPPORTS_O0 - Success9 v) T. Z: C# ?' u8 e" Z9 k% q
  68. -- Performing Test C_SUPPORTS_GGDB
    3 f3 l  ]: w. J8 g  Z! k/ I0 }1 K) N
  69. -- Performing Test C_SUPPORTS_GGDB - Success
    9 r+ `# b1 Q  E' S
  70. -- Performing Test C_SUPPORTS_FPROFILE_ARCS" Y2 E" T! _# X# o2 V. v
  71. -- Performing Test C_SUPPORTS_FPROFILE_ARCS - Failed
    2 @! [% a7 N! m" h
  72. -- Performing Test C_SUPPORTS_FTEST_COVERAGE# U' E2 o8 @- U! L$ `' [3 z
  73. -- Performing Test C_SUPPORTS_FTEST_COVERAGE - Success
    , R* w6 e& L: g0 j* k- w3 f
  74. -- Performing Test C_SUPPORTS_FNO_OMIT_FRAME_POINTER- J. x4 A  n4 T3 n
  75. -- Performing Test C_SUPPORTS_FNO_OMIT_FRAME_POINTER - Success
    / Y: @/ U/ @! H3 k
  76. -- LIBUSB_INCLUDE_DIR: ~/workspace/STLINKALL/stlink2/3thparty/libusb-1.0.21/libusb-1.0.21/libusb/3thparty/libusb-1.0.21/libusb-1.0.21/libusb/
    9 O' K1 \2 }# J
  77. -- Found Libusb: ~/workspace/STLINKALL/stlink2/3thparty/libusb-1.0.21/libusb-1.0.21/libusb/.libs/libusb-1.0.a% a  Y8 Z% T. |$ Q+ S
  78. CMake Warning (dev) at src/CMakeLists.txt:39 (add_library):! q9 g, H: i0 W, ^
  79.   ADD_LIBRARY called with SHARED option but the target platform does not
    " r  U0 Q7 [9 R6 ?
  80.   support dynamic linking.  Building a STATIC library instead.  This may lead
    : N) {$ J4 [. V  ^
  81.   to problems.. r4 L  q- N5 |
  82. This warning is for project developers.  Use -Wno-dev to suppress it.
    ; o  w+ a" S( l7 i) p% h# T

  83. - Q7 q( r- |8 A" o( ~  }3 z7 E
  84. -- Found Perl: /usr/bin/perl.exe (found version "5.22.1")0 r' f1 v: c7 R: X
  85. -- tests enabled7 u$ e" l# _% R- g& ?5 `4 \+ A
  86. -- Configuring done; a4 k( c. S2 b& t. O9 d6 e
  87. -- Generating done. R; i  g4 i4 {/ S' ?
  88. -- Build files have been written to: /aaaa/workspace/STLINKALL/stlink2/build/Debug
    3 ]; h8 f' k, A* ^* Z+ @$ y
  89. [DEBUG]
      y6 d# l3 k* d+ Y! L7 A7 r. @
  90. Scanning dependencies of target stlink2-shared  K3 e# s* I$ W0 m8 O
  91. [  2%] Building C object src/CMakeFiles/stlink2-shared.dir/stlink2.c.obj
    / @2 b7 T5 I  t3 l. C
  92. [  5%] Building C object src/CMakeFiles/stlink2-shared.dir/cortexm.c.obj
    3 `" h" ~+ a5 z2 S1 c& j) Y
  93. [  8%] Building C object src/CMakeFiles/stlink2-shared.dir/flash.c.obj( X6 M1 q& V! Z" e) |! `
  94. [ 11%] Building C object src/CMakeFiles/stlink2-shared.dir/log.c.obj& a9 r; Q- K- g; Q
  95. [ 14%] Building C object src/CMakeFiles/stlink2-shared.dir/usb.c.obj: k' E9 o9 D& S- I4 N! M4 H
  96. [ 17%] Building C object src/CMakeFiles/stlink2-shared.dir/stm32.c.obj
    5 m% a* U0 x5 z1 V4 k' O0 m" q2 C" v
  97. [ 20%] Building C object src/CMakeFiles/stlink2-shared.dir/semihosting.c.obj
    # ]: ?4 s0 ?; A: P0 ]+ I  j  v
  98. [ 23%] Building C object src/CMakeFiles/stlink2-shared.dir/utils/hexstr.c.obj
    3 D3 q8 a$ f0 o
  99. [ 26%] Building C object src/CMakeFiles/stlink2-shared.dir/utils/msleep.c.obj+ K; ^# U5 x3 e! a  ~3 T
  100. [ 29%] Building C object src/CMakeFiles/stlink2-shared.dir/utils/ihex.c.obj
    ! X6 y; U- @- u# [+ Z7 U
  101. [ 32%] Building C object src/CMakeFiles/stlink2-shared.dir/utils/flag.c.obj
    . Y5 g; F! N; H2 P6 ?& p8 r  P
  102. [ 35%] Linking C static library stlink2.a3 b" h  w# W/ {1 H0 @6 V; `: n4 u8 v
  103. [ 35%] Built target stlink2-shared
    % W( e( {6 G$ p$ g1 x/ A
  104. Scanning dependencies of target stlink2-static1 B5 X8 g; [% b6 {4 q
  105. [ 38%] Building C object src/CMakeFiles/stlink2-static.dir/stlink2.c.obj
    ! w( W9 i8 F2 z# ~5 c
  106. [ 41%] Building C object src/CMakeFiles/stlink2-static.dir/cortexm.c.obj; J/ x7 d$ [! q. a( d( i$ G
  107. [ 44%] Building C object src/CMakeFiles/stlink2-static.dir/flash.c.obj
    2 G; a) m# Q5 _1 C! L$ z' o2 _
  108. [ 47%] Building C object src/CMakeFiles/stlink2-static.dir/log.c.obj
    3 i; I/ q: V( N" K2 @7 d6 H
  109. [ 50%] Building C object src/CMakeFiles/stlink2-static.dir/usb.c.obj  P( Y0 E" f+ P
  110. [ 52%] Building C object src/CMakeFiles/stlink2-static.dir/stm32.c.obj
    . r* {( E2 F0 E3 s2 ?2 [4 R; E
  111. [ 55%] Building C object src/CMakeFiles/stlink2-static.dir/semihosting.c.obj
    / ~& W: C& N1 C9 @' L: v1 t% ^
  112. [ 58%] Building C object src/CMakeFiles/stlink2-static.dir/utils/hexstr.c.obj
    / B! T6 Q# j4 T$ T; F
  113. [ 61%] Building C object src/CMakeFiles/stlink2-static.dir/utils/msleep.c.obj: N" Y9 m/ M+ Q/ U  @- j
  114. [ 64%] Building C object src/CMakeFiles/stlink2-static.dir/utils/ihex.c.obj3 Y1 E! N. K; ]+ Q8 j
  115. [ 67%] Building C object src/CMakeFiles/stlink2-static.dir/utils/flag.c.obj
    / t) R6 u$ s4 d* p8 S0 H: _. {
  116. [ 70%] Linking C static library stlink2.a
    " V- _/ c+ c& G% O
  117. [ 70%] Built target stlink2-static
    9 x' d; Q8 S( q2 V+ W! `
  118. Scanning dependencies of target stlink2
      c4 \- C) S& J& K1 M
  119. [ 73%] Building C object src/cmd/stlink2/CMakeFiles/stlink2.dir/main.c.obj
    8 S1 n" E9 z4 p; b' B
  120. [ 76%] Linking C executable stlink2
    / C, i0 l- C4 d
  121. [ 76%] Built target stlink2
    - p% n0 G& u( C$ C# _
  122. Scanning dependencies of target probe0 |2 x6 G, k% J; O' r3 ^( j; C
  123. [ 79%] Building C object tests/CMakeFiles/probe.dir/probe.c.obj3 c, }% g- h9 E& \/ N
  124. [ 82%] Linking C executable probe
    5 b( \# U2 Y. r# E# a
  125. [ 82%] Built target probe
    5 Q* H. T+ ^9 N: x: V- d2 h
  126. Scanning dependencies of target open_close" z: L+ a. B3 k! Y# k. ~
  127. [ 85%] Building C object tests/CMakeFiles/open_close.dir/open_close.c.obj
    $ [' |/ [) b1 c0 L% Z! `
  128. [ 88%] Linking C executable open_close
    9 m$ M; d- N; r. A/ ]! R" |* X) p
  129. [ 88%] Built target open_close
    ) j" {) o' ]4 T7 U
  130. Scanning dependencies of target ihex' R# `9 V( F* E$ q* h& s% z
  131. [ 91%] Building C object tests/CMakeFiles/ihex.dir/ihex.c.obj3 S( }0 x6 G! N# p6 l0 C& o
  132. [ 94%] Linking C executable ihex7 t9 D" i; C+ W. N3 T- U. D; l
  133. [ 94%] Built target ihex9 w! B, p9 l# D0 y6 z$ r
  134. Scanning dependencies of target log
    ; e) x& T' t( N( C" ?1 t
  135. [ 97%] Building C object tests/CMakeFiles/log.dir/log.c.obj" F7 m0 ^' G" @
  136. [100%] Linking C executable log
    5 A* d! \# d/ x1 o$ x+ O# |
  137. [100%] Built target log
    : f$ s. b0 `, {4 d0 B- n
  138. 6 y  C$ c3 F- L1 d
  139. admin@admin-PC MINGW32 ~/workspace/STLINKALL/stlink2$ q7 a8 e3 o! k
复制代码
测试工具在 build\Debug\tests6 |7 b) R( \% o% i
编好的静态库 build\Debug\src\stlink2.a
. s- p. G8 d/ e
/ m0 q2 m: _3 g4 }. ~- C& i8 Q' L: }0 n/ d6 t

1 @2 I8 B, n9 [- \. g$ F- ~) L
: j- n0 |. |; b  c' ]2 e
msys2命令行下可直接运行.& Z0 ?9 i: m# z- v" Z; P
window cmd下运行可能会提示缺少msys-2.0.dll,msys2\usr\bin下可以找的9 n0 M0 e+ k! C9 V. B3 `

$ W" q" A7 |( B7 B! D$ g测试一下:
% O; k% j/ ^* _8 ]& U  l4 e& c6 W, T2 v3 R5 D; J& W

open_close

open_close

: f5 |# d. R; I. p) P- M3 D% r% p' I$ G% q' T# d$ }; N

: O* H) i) r" Z9 ~4 ZENJOY YOURSELF
- ~" v  v0 m- g6 |
6 B1 A$ F' n1 v; y' O: p3 U7 o5 }8 Z. r

% l( v3 ?. R% l) S, U% R& ^3 c

" @2 Q* J( A: O; t0 e" }% M
' E9 I6 l# A: @8 l  S
; j: a# ^0 [' R. g# L

评分

参与人数 1 ST金币 +20 收起 理由
zero99 + 20

查看全部评分

赞 1 收藏 2 评论15 发布时间:2017-2-8 14:17

举报

15个回答
Mandelbrot_Set 回答时间:2017-2-8 14:46:17
读下flash 看上去OK( f1 p+ ^; ?+ |3 }
7 J- i( ?& C1 Q/ x
修改下open_close.c:
$ F# q9 k7 ^9 F' A6 M3 p- ?2 J
#include <stdio.h>  U5 y1 v2 M1 d$ h: E$ y) y! P8 K
#include "stlink2.h"
7 I' u8 ]0 g) L* h: \6 Q- S% S8 G! g  B# a6 f5 d# |. @+ ^  a
void dump_hex(const void * data, size_t size)6 ]: P4 W4 {7 u' w. R% V
{; t1 s8 l: e2 K/ W4 p: t2 s
        char ascii[17];1 [* f& ]1 Y0 J6 k
        size_t i, j;
( H: M4 G& z. Q6 y- K$ P# x        ascii[16] = '\0';& P% z9 K; M# A# r3 b
        for (i = 0; i < size; ++i) {
5 H! e& o$ P5 R! W' a                printf("%02X ", ((unsigned char*)data));
. m6 X. h( d1 `8 F. T                if (((unsigned char*)data) >= ' ' && ((unsigned char*)data) <= '~') {
1 k6 S9 Z/ q: p3 Q" `* k                        ascii[i % 16] = ((unsigned char*)data);
& b4 q, J: t7 A. i                } else {6 L! m( ]; Z, j
                        ascii[i % 16] = '.';6 x: G! ~) z7 I: T9 h
                }/ V$ G8 z6 N! @/ T* C9 I
                if ((i+1) % 8 == 0 || i+1 == size) {* g$ w2 S1 |& l, o0 \, ~
                        printf(" ");$ @, u3 Z. m6 O! f" z% c: O
                        if ((i+1) % 16 == 0) {
( d$ T" |1 K6 |: D$ G! k                                printf("|  %s \n", ascii);  S" R2 w6 _, |. E8 O# B
                        } else if (i+1 == size) {, d$ k) X: p- V7 @/ m. B
                                ascii[(i+1) % 16] = '\0';* c: L  h0 [" F- H0 M
                                if ((i+1) % 16 <= 8) {
) y( U4 G7 I3 Q) ]* h9 a                                        printf(" ");
% E. O' [  A+ y$ S  L$ {                                }9 A/ L$ I2 x- E' c6 x. t
                                for (j = (i+1) % 16; j < 16; ++j) {
5 Y$ H/ q5 I. K) M: e! G( k' a                                        printf("   ");" L+ T4 ~- m! V7 L+ q
                                }
$ P+ P% s9 v- m                                printf("|  %s \n", ascii);" Z6 J' K% x6 R9 E3 {) ~
                        }
& u( G' {! Z' i* V8 @, m                }& l0 X7 p, l/ k. T* s
        }& ~, L* I: ?- R
}
0 z) t5 M$ S; |2 y5 c+ F9 k. N! K% N0 K/ N7 K
static void test_open_close(stlink2_context_t ctx, const char *serial)
! J  S' I8 G  Y6 Z, K3 e* t{% P2 V- B6 N5 Q* C( P" f
        stlink2_t dev;: m6 s1 G1 F: Z% r6 i  Q4 @) W

) _" Q) t* B9 g: N        dev = stlink2_open(ctx, serial);5 q/ k7 }' W% b
        if (!dev)
2 B6 S0 @' ?2 O1 Z8 f5 R! p. Q' c                return;) |/ x) O3 \- N. v

& X- d! x. B+ w! U, V, o: t        uint32_t cpuid;
0 e+ e: d7 a3 L        uint16_t devid;+ s* t$ G5 ^3 {0 @% `% Q1 b3 G1 {
2 y$ ]: O# s" F& L5 H
        stlink2_log_set_level(dev, STLINK2_LOGLEVEL_INFO);. c" t) s8 t; f4 J6 F

: X" G- b$ `* ]. i  b$ ?        //printf("  serial: %s\n",    stlink2_get_serial(dev));; `& V# Q! y7 i4 F* g
        //printf("    name: %s\n",    stlink2_get_name(dev));7 R7 j) a  s, s2 r! \
        //printf(" version: %s\n",    stlink2_get_version(dev));3 ]/ q5 ?4 y. P& d
$ \, E, Y/ |" g$ L5 e  P" o" \7 N
        stlink2_get_mode(dev);
5 F! j& t3 Z8 t2 V& y4 k2 Q        stlink2_set_mode_swd(dev);
8 u4 h$ s: e6 w; S        //stlink2_mcu_halt(dev);9 k( ~. z; u5 H8 S" n9 N4 `  z$ E
! V9 r6 q) X0 f* v
        /*% k3 l. S) W' C. i3 ]
    uint32_t pc;- ?! C0 a$ W- J) Q: m

- e0 z* S1 y% @3 Z        stlink2_read_reg(dev, STLINK2_CORTEXM_REG_PC, &pc);. A7 p; `1 T' _! ^. y* k: j! k0 [: T
        printf(" PC: 0x%08x\n", pc);
8 B# I/ ?7 {4 ?        stlink2_read_all_regs(dev);
- W; J2 }( K+ R" d( @0 g  s3 j& f3 b0 @  ]1 @; j
        stlink2_mcu_init(dev);! C7 b9 Z$ {5 V1 V
        stlink2_read_reg(dev, STLINK2_CORTEXM_REG_PC, &pc);
& x# R7 h8 p/ q! a, Q. Z        printf(" PC: 0x%08x\n", pc);( {9 \) Z: v/ m# u( m0 x% w

5 I: r" b, P0 F1 D3 j: M        uint32_t xpsr;3 U- g& {6 y3 J5 \; Y; |: l
        stlink2_read_reg(dev, STLINK2_CORTEXM_REG_XPSR, &xpsr);/ t' m5 }% N% e7 E6 v/ w- x
        printf(" xPSR: 0x%08x\n", xpsr);
- F; Q# e, S1 p' c4 J( A
5 Z5 C1 M' I# Z; G; G8 b  N        uint32_t control;
( ~  q9 j* M2 ]* @        stlink2_read_reg(dev, STLINK2_CORTEXM_REG_CONTROL, &control);
" S% S/ a( f( K        printf(" CONTROL: 0x%08x\n", control);
4 F- E7 z' L. J4 v# {
8 D& C- [& G8 B: l: I( K        cpuid = stlink2_get_cpuid(dev);
+ U% \4 H# \+ m8 Y        devid = stlink2_get_devid(dev);. c# ~2 l6 W0 X1 D
*/3 E8 ?! t) e. H2 F- ~8 Z& s
/*7 M, d8 ]. \/ T
        printf(" voltage: %f\n",    stlink2_get_target_voltage(dev));- O. p. |# k! C2 D- z/ L$ e# |
        printf("   cpuid: %08x\n",  cpuid);
( Q' r/ |+ V. o/ v! s; }' ]7 N. X        printf("     partno: %03x (%s)\n", stlink2_cortexm_cpuid_get_partno(cpuid), stlink2_cortexm_cpuid_partno_str(cpuid));
* R# s0 D( Z! J1 u6 U- }" X* N        printf("  coreid: %08x\n",  stlink2_get_coreid(dev));
- a" k) x% @0 y! {        printf("  chipid: %08x\n",  stlink2_get_chipid(dev));
  T+ T# R0 j" T3 C7 _$ ~+ D8 Q        printf("   devid: %s (0x%03x)\n", stlink2_stm32_devid_str(devid), devid);  A6 Q! f8 h8 q" z2 t/ o( m" e4 X0 y
        printf("  flash size: %dKiB\n", stlink2_get_flash_size(dev));
  h3 W( i$ X7 ]1 l# _) ]3 }        printf("  unique id: %s\n", stlink2_get_unique_id(dev, 0x1ff800d0)); 1 `# l6 m/ \  @' Z2 u% }
*/3 |% h0 Z; A: a6 A4 j( U

' a3 X2 f% e. N% \5 J9 r) Z: N7 h//#ifdef BLA6 ?# P) I: k& H
        uint8_t *flash = malloc(1024);$ F# V3 H) v7 }. _4 I' f
        stlink2_read_mem(dev, 0x08000000, flash, 1024);4 ?( ]( z5 _6 w3 K; ^- X$ D
        dump_hex(flash, 1024);
; N+ ]# j% ]9 |; C//#endif& K7 o) K* q+ }
#ifdef SEMIHOSTING6 b( P7 _" |! \" d1 a8 d
        while (true) {
. M: B1 g5 Z: A0 R1 ^# f0 U                if (stlink2_get_status(dev) == STLINK2_STATUS_CORE_HALTED)
/ Z' [+ B8 v. A, l$ r                        stlink2_mcu_run(dev);
) _" j, `$ P3 {) u6 K6 r                stlink2_semihosting(dev);* Q1 k+ e/ D4 y2 J1 m
                stlink2_msleep(1);
( {7 k! H4 O0 `% `        }
9 c' Z* W' x) c# L  g#endif
& y7 y) K3 }! D) ?+ T( B. ~) q+ ?& J/ s. E3 P! ?
        //stlink2_mcu_run(dev);* q& o' }' k" q: `2 T/ Y
        stlink2_close(&dev);) |$ h/ I) G! v. @# ^* L
}
( H) |  x2 [8 t3 X
& P) R# w8 Y. Gint main(void)% ]& u0 T1 ^# `2 i6 m" \% J+ w
{! ?- ^. ^; \& I0 L7 h2 ?: Q. a% }
        stlink2_context_t ctx = stlink2_init();6 i. Q, k; J7 _, a" D2 o/ A" G4 z
& i( X% L$ [7 A. o* `: j0 S" _
        test_open_close(ctx, NULL);" Z5 K$ r* u( W) B( I4 P
        stlink2_exit(&ctx);
7 j  A, g; W! s) E}
+ H# k1 i& E) f) ]$ G9 y
readram.PNG
moyanming2013 回答时间:2017-2-8 17:37:02
不同于ST-LINK/V2吧?ST-LINK/V2还未开源吧?
七哥 回答时间:2017-2-8 23:11:38
楼主强大,楼主威武,此处有掌声
7 D0 O- Q) @9 d标记备用
Mandelbrot_Set 回答时间:2017-2-9 09:55:48
moyanming2013 发表于 2017-2-8 17:37
3 N3 P1 ^9 l$ d# O不同于ST-LINK/V2吧?ST-LINK/V2还未开源吧?
5 }, b" u9 s! V  Y- M
我截图用的NUCLEO-F303RE..' P7 ^* v0 ]# ]
xiongmao5k 回答时间:2017-3-29 14:26:20

最近也在搞这个。

本帖最后由 xiongmao5k 于 2017-3-29 16:25 编辑
( E+ E, F! k* v( y* C! s( c# M8 v1 V) x3 V
我用的是TDM-GCC,cmake已经构建成功,make有问题,先赞一下楼主,再回过头看。
: i( p, o- a7 L% L  u8 b现在已经编译成功,生成了三个文件,sg.exe   flash.exe   usb.exe    问一下楼主,接下来应该怎么用啊???# V, F* N' f2 l0 Y7 `
Mandelbrot_Set 回答时间:2017-3-30 09:17:16
xiongmao5k 发表于 2017-3-29 14:26+ ^4 `, z) P# j7 L+ a
我用的是TDM-GCC,cmake已经构建成功,make有问题,先赞一下楼主,再回过头看。" s: r5 {  }  N) M! A) n
现在已经编译成功,生成了 ...

% J. C/ D( Y4 x6 Z" h$ N你用的应该是http://github.com/texane/stlink吧。2 J$ U" E, X; b+ W5 S
和我一楼说的不是一个东西。这个要比我1楼说的功能强很多.. ~$ t/ ?& Y& d/ f2 F5 c8 c
这个github上有编译好的win64版本9 X  T/ z' \% l- Q( [' K
xiongmao5k 回答时间:2017-3-30 16:05:46
我用的也是STlink-v2,现在想做的就是自己修改main文件,实现通过代码实现stlink直接对spi flash下载擦除的功能。楼主有没有好的建议?能否留个联系方式方便交流。?
Mandelbrot_Set 回答时间:2017-3-30 17:59:53
xiongmao5k 发表于 2017-3-30 16:058 m8 E3 D' |- K0 o7 w6 \/ [# r5 `
我用的也是STlink-v2,现在想做的就是自己修改main文件,实现通过代码实现stlink直接对spi flash下载擦除的 ...
! P* g* l. k) d9 p  u0 L# c
官方stlink utility 就有这功能的.(没用过)+ I8 j8 y" x% q5 Z2 n+ p1 z2 h3 {! K7 f
http://www.st.com/content/ccc/re ... s/en.CD00262073.pdf
, j6 I. q# ^# o7 c/ R" V4 h2.2.6节 3.9节 等( W9 v# L. h4 _- v2 d/ b  m
0 `# F! Z  _( N8 p2 q& o- I
xiongmao5k 回答时间:2017-4-5 13:25:51
本帖最后由 xiongmao5k 于 2017-4-6 11:31 编辑
& r! E7 X1 o3 |9 [3 `; T
Mandelbrot_Set 发表于 2017-3-30 17:59# v! T" |$ V8 j  `
官方stlink utility 就有这功能的.(没用过)
, ?* L8 X  o: o; E% khttp://www.st.com/content/ccc/resource/technical/docume ...
$ B9 x! h/ Z% D. I
软件我是用过的,现在是想用STlink通过读写寄存器配置STM32的SPI,将数据写入DR寄存器。然后再外置的SPI FLASH读取DR寄存器。来直接对外置SPI FLASH进行读写操作。
xiongmao5k 回答时间:2017-4-12 17:21:34
感谢楼主写的文章,我后面又在spi_flash芯片上加了个spiffs文件系统,已经跑成功了!
CC4 回答时间:2017-4-12 18:35:29
我怎么编译不出来这些可执行文件呢?执行make debug以后,生成了一堆东东,象是ihex log open_close probe 这怎么使用呀?
Mandelbrot_Set 回答时间:2017-4-13 09:34:00
select326 发表于 2017-4-12 18:35& g1 g8 j  b; h
我怎么编译不出来这些可执行文件呢?执行make debug以后,生成了一堆东东,象是ihex log open_close probe  ...

3 U! H* k4 v& Z! X, ?6 @有一个*.a的库。
& F  d/ v3 O: }& A2 @; tihex log open_close相当于是例子.功能比较少...
CC4 回答时间:2017-4-13 09:56:46
Mandelbrot_Set 发表于 2017-4-13 09:348 ?' p; ~- j$ {
有一个*.a的库。
: g8 H2 H7 Q( F# ^ihex log open_close相当于是例子.功能比较少...
0 E" ~! u4 a2 x3 C) j# h# D
那意思是,这个不是一个完整的工具?而只是一个开发库?
Mandelbrot_Set 回答时间:2017-4-13 10:19:33
select326 发表于 2017-4-13 09:56* d7 Z/ A& J7 m- k
那意思是,这个不是一个完整的工具?而只是一个开发库?

4 K# W8 F+ o5 D- b是啊.
3 v/ U4 K' a1 F, T另外,找了半天只找到memread,没找到memwrite,9 Q* G& w6 [; G% \
功能不是很全,编译一下,纯当练练手了.
0 \: E. j9 X# G1 y+ F
12下一页

所属标签

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