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

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

[复制链接]
Mandelbrot_Set 发布时间:2017-2-8 14:17
! D+ |# _6 E! r+ Z; O* y' G' k1 y0 l
% o6 e& P: E# o- |) c9 N
/ y6 ]6 i0 e7 V/ ?% B, P
写在前面:
7 ]2 F  ~( |1 ]& G# f7 @0.好久不发帖子,排版略渣
8 M: T+ w7 A+ U1 q+ l1.编译是可以成功的,但不保证不同环境及设置所造成差异; N% @% s/ {: Z0 V1 S
2.只是编译通过,库本身是否有bug属于未知问题.- W9 L8 h9 u! \7 O; [# P0 m
, i) ?; z3 {2 g& {* v4 N: l2 I! B


1 w2 A1 i% B/ Z% ^& ?仓库简介:/ E9 A# V" |" Z8 \1 O3 `
STMicroelectronics STlinkv2 programmer library and tools
/ K3 C) @- z4 ~; S* S(具体可到web页面上自己看 http://github.com/xor-gate/stlink2)
6 n. l0 p; H9 k. @  Z5 y- P这个就不多说的,代码不是我写的.5 \9 X8 _0 i( D9 U# F8 T1 ?
, v5 w# y$ o1 J: A

. M* m) m# Z6 A) b: E8 k! E  m" C
windows环境编译心得及步骤:7 q0 \; M* r6 x% @9 D( k! s
1.搭建msys2环境。
8 [. U' H" q- r4 j5 R5 K[仅mingw可能就够用了,不过考虑到源码用到cmake,有个shell命令行开发环境,是相当有必要的]" R3 R' i- c1 @; n$ e
下载 msys2安装包(我用的是msys2-x86_64-20161025.exe)
% H0 u* t: R: X2 e9 m9 d8 f0 aref:1 y8 h1 p, b0 J, F$ |- S$ a
http://sourceforge.net/projects/msys2/files/Base/i686/ 7 T5 k$ B* r3 @, t0 L
http://www.msys2.org/
* F5 W3 A) {8 X5 L5 T3 k! T" g印象中这个是要windows 64位操作系统才支持的。
0 a# r) Z( X" h: M( ~安装步骤略...,就是一路点下去,设个安装路径.$ ~4 h6 a7 l7 ]% |- d- p# ^
启动过后用pacman安装必要的工具,这个不是本贴重点,暂略...0 g2 E1 W9 a, c- k* a. s% H- k1 y
具体可以百度google,网络不行pacman的源也可以修改,baidu吧.
; z! J! J7 i/ g+ Y/ r6 T; L
6 M- m. k; G6 W5 N$ X2.编译libusb# @/ m0 N" ^' X) y" a
下载libusb-1.0源码
4 c1 s3 u1 f& S* p/ J[参:http://sourceforge.net/projects/libusb/files/libusb-1.0/]
  i2 X# a7 K: [子版本号应该不是重点  ^1 o7 q+ M5 w! h" t3 L  z
这个编译很简单,编译步骤:
* }/ y! I( D* i0 u5 Q
  • 解压
  • msys2进入相应目录下
  • ./configure
  • make
    ( s3 J5 g  ^. x& a7 t4 G$ g* j- D
' B" G2 h& ?& R& J! t( y
如果成功,在libusb/.libs目录下生成libusb的静态库和动态库.这是我们需要的。
) l  L2 s) h6 P8 y% Ulibusb/下的头文件也用的到.& t7 ]# \# q7 L! b
' |6 k+ M  l6 G5 t4 x; R1 M. X; B; F
几点说明:
, }8 v% S. v# ^[注1:可以make install,但并非必要]
3 I5 e% x0 L. c, L' _[注2:可以指定安装路径,也非必要 ./configure --help 查看帮助]
  [9 Z6 S' D; l, n  s3 `( Z6 z; V2 w4 j0 e
3.编译stlink2- e0 v: E5 ]% Z' g( u, {8 D' j6 S/ V
下载源码:( d1 S) X  I, X7 l9 Y: z' |
git clone http://github.com/xor-gate/stlink2
* W, N' w# o, G9 z( c; T如果msys2不想安装git,web页面下载压缩包,然后解压过去,效果是一样的。
& Z  j5 z9 u: f# q$ }  I进入stlink目录,打开README.md...先看一看...
, d) O: y, G1 ?* }, {' ^这是个好习惯
% w5 i4 s' W2 j. F. Q; L# _' u所有设置都正确,执行make debug即可开始编译。0 g# c* [  [2 X! U9 o1 I8 l* W
由于现在什么也没做,不出意外,是编不过的。2 n5 m! i% ~6 Q7 i8 m* a5 B
make release应该差不多,先不考虑。7 _% ]8 f% W; W3 K. k: P7 }7 \
根据出错提示进行修改,修改过后,执行:7 T. H  G& f0 H, w
make clean. |: {3 [3 q# }
make debug) Q6 R  v# Q5 O9 F1 t* [3 B
修改方法:! x. o4 B& E3 j5 M( \/ m' ^
1.提示缺少工具/ t1 _  U9 v' A5 i" V$ Q. M9 C
比如没装gcc,没装cmake,没装make。。。那么安装一个..,反正少啥就装啥...
+ T! N, ^1 K) R) F, n* n* e7 ]$ B
  _3 |# X, V" P2 a( z9 }: O2.提示:
2 Y7 N, O( C: @$ F- Y" \9 k2 m7 aSystem is unknown to cmake, create:
' R2 y; d/ W. `1 N! W$ @4 y. aPlatform/MINGW32_NT-6.1 to use this system, please send your config file to cmake@www.cmake.org so0 U- _, P8 X" e9 a3 H
修改顶层MakeFile[line 49 - 51] (贴出来tab键咋没了)
9 D; r0 ?& }. h
  1. build/Debug:- I5 E$ V& C6 X$ V
  2.         @mkdir -p $@
    4 e4 a/ g& [8 W1 I( A/ O3 `4 J/ K
  3.         @cd $@ && cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_SYSTEM_NAME=Generic ../../
复制代码
release先不考虑...- a" k  g( f6 D. V% k* O

" |" O2 a; {2 j# w3.提示LIBUSB_INCLUDE_DIR LIBUSB_LIBRARY 出错2 y. a! v5 P) L
这是因为cmake找不到libusb库,可以手动设置下:/ ?' t1 F/ i' @: ?/ G9 n$ Z5 c3 U
修改cmake/Find7Zip.cmake
! V) I9 H: Z% L" fset (LIBUSB_INCLUDE_DIR [这儿填路径,中括号删掉])9 V1 g$ }' i6 h% d" m/ y. Q
set (LIBUSB_LIBRARY [这儿填路径,中括号删掉])
6 n8 B6 B' [) u1 k9 V! ]# ^( BLIBUSB_LIBRARY 指向 你的libusb-1.0.a的路径1 W- C5 X, M0 H# R3 w
LIBUSB_INCLUDE_DIR 应该也可以随便设,自己把libusb的.h copy过来/ F5 V# E* V8 G2 ^$ B/ [

' }% N; P6 B) o% R3 |1 S  B3 x4.缺少头文件
( }" y, L0 f; ]0 C/ r/ `# H反正都能找的到...注意下 include <>与“”的差别
# z0 c2 s4 O6 }! x0 e" `7 a
; d+ O0 F0 f$ B6 n# R附上编译成功的输出信息:
, u) J$ w- |( a2 F  k2 B2 z, d& ^
  1. admin@admin-PC MINGW32 ~/workspace/STLINKALL/stlink23 R2 w5 r. P$ [$ j! ]* b  g/ X$ d
  2. $ make debug/ W4 m3 p0 y0 f* a
  3. -- The C compiler identification is GNU 5.3.0
    ( X$ p* Q- N$ w4 f% y/ q
  4. -- Check for working C compiler: /usr/bin/cc.exe. n3 @' S9 W/ R. I# k3 M! j& \
  5. -- Check for working C compiler: /usr/bin/cc.exe -- works
    3 w8 K3 \$ m9 {3 Q9 b
  6. -- Detecting C compiler ABI info
      o+ R  e5 e3 w
  7. -- Detecting C compiler ABI info - done' |! a& p" o1 B7 M6 ?# Q
  8. -- Detecting C compile features
    6 h; d  u! T' `
  9. -- Detecting C compile features - done0 L, u8 O  j) T. t6 X# ]  t
  10. -- stlink2 version: 0.1.0-dev
    ) K( Y$ P- B  G, R! i+ A
  11. --            Major 0 Minor 1 Patch 0
    ( E, [7 b# V/ K0 E7 f
  12. -- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE)
    % i4 ?2 C- J3 E3 F
  13. CMake Warning (dev) at cmake/Doxygen.txt:27 (message):, K, i: E& M2 ?& ^) z  L9 T" ?
  14.   Doxygen is needed to build the documentation.
    % [, {6 Y8 G1 \- }, ?% O3 W
  15. Call Stack (most recent call first):+ B# N" N& b# T/ e: [" I. T
  16.   CMakeLists.txt:19 (include)6 W5 ^7 J  I4 J8 b
  17. This warning is for project developers.  Use -Wno-dev to suppress it.6 Z6 j! |  Z4 \1 x; E; _$ }

  18.   j3 R' }; g" \% R) \! z1 u$ [/ Q
  19. -- Performing Test C_SUPPORTS_STD_C99
    + [" l: c9 f: y$ y* ]' y3 h
  20. -- Performing Test C_SUPPORTS_STD_C99 - Success
    9 A1 V4 X9 e1 R6 q
  21. -- Performing Test C_SUPPORTS_WEXTRA) m8 B5 U& F5 z, b' N4 i
  22. -- Performing Test C_SUPPORTS_WEXTRA - Success  S/ c/ b1 U6 J: T
  23. -- Performing Test C_SUPPORTS_WSHADOW
    ! R; u; O' ^4 j/ w; W3 \
  24. -- Performing Test C_SUPPORTS_WSHADOW - Success( L# S3 s3 w" L2 N7 O9 ~5 y% ^: ]* @% S
  25. -- Performing Test C_SUPPORTS_D_FORTIFY_SOURCE_21 X; O* _4 I1 h2 N. s
  26. -- Performing Test C_SUPPORTS_D_FORTIFY_SOURCE_2 - Success# N" z7 k. a, z
  27. -- Performing Test C_SUPPORTS_FSTRICT_ALIASING
    % K3 g6 [0 W) D8 m
  28. -- Performing Test C_SUPPORTS_FSTRICT_ALIASING - Success
    6 g+ D- v/ n* U( U' V! x4 r6 q$ D
  29. -- Performing Test C_SUPPORTS_WFORMAT
    # {. I& I$ C" j5 {" k. }
  30. -- Performing Test C_SUPPORTS_WFORMAT - Success) w/ R& Z+ H9 P3 ~
  31. -- Performing Test C_SUPPORTS_WFORMAT_SECURITY' Z! j* p  k7 i0 d3 ]
  32. -- Performing Test C_SUPPORTS_WFORMAT_SECURITY - Success
    9 J: @) E! t  J  T+ |
  33. -- Performing Test C_SUPPORTS_WMAYBE_UNINITIALIZED8 F( h  _$ x1 m
  34. -- Performing Test C_SUPPORTS_WMAYBE_UNINITIALIZED - Success, r% O2 [% d& Y" d' M) l
  35. -- Performing Test C_SUPPORTS_WMISSING_VARIABLE_DECLARATIONS
    . ~7 K: M) g7 J3 A
  36. -- Performing Test C_SUPPORTS_WMISSING_VARIABLE_DECLARATIONS - Failed' N3 L/ h5 F1 ^' c8 W# a  q9 |
  37. -- Performing Test C_SUPPORTS_WSHORTEN_64_TO_32* M( r% a" h1 b
  38. -- Performing Test C_SUPPORTS_WSHORTEN_64_TO_32 - Failed2 A' ]  i# n, w
  39. -- Performing Test C_SUPPORTS_WIMPLICIT_FUNCTION_DECLARATION
    % _4 O) u! _+ h5 U7 K. Y
  40. -- Performing Test C_SUPPORTS_WIMPLICIT_FUNCTION_DECLARATION - Success. M2 w% f' ^0 a  Y$ q  K$ d
  41. -- Performing Test C_SUPPORTS_WREDUNDANT_DECLS
    / G2 h0 u5 S  }& j0 v, L/ l9 [
  42. -- Performing Test C_SUPPORTS_WREDUNDANT_DECLS - Success
    0 s0 |- b0 G0 X4 K) k
  43. -- Performing Test C_SUPPORTS_WUNDEF: g- q" z( a+ v' o. Q4 h6 c
  44. -- Performing Test C_SUPPORTS_WUNDEF - Success
    % _/ T/ I3 \3 Q
  45. -- Performing Test C_SUPPORTS_WSWITCH
    3 @$ Y( X/ q5 K/ @3 I1 k
  46. -- Performing Test C_SUPPORTS_WSWITCH - Success
    6 a' n' D) v* L
  47. -- Performing Test C_SUPPORTS_WFLOAT_EQUAL" F7 G' u7 ?( e, T  `6 Y1 l
  48. -- Performing Test C_SUPPORTS_WFLOAT_EQUAL - Success- R8 n: H  }; \  s, W% F4 W3 c4 T
  49. -- Check if the system is big endian
    ) x( r( o0 r" x+ x  j$ f
  50. -- Searching 16 bit integer
    $ i5 _5 u+ c1 z& |, u) ^/ T
  51. -- Looking for sys/types.h% z& U3 Y  ]+ c/ [
  52. -- Looking for sys/types.h - found
    4 ^% e% V: r0 z: o$ e) Y
  53. -- Looking for stdint.h7 i8 g; Z+ c( L3 a8 \
  54. -- Looking for stdint.h - found  Y0 @+ ]& U4 X; P  A5 K
  55. -- Looking for stddef.h
      z% I; W/ S$ E6 I9 r
  56. -- Looking for stddef.h - found5 M3 \+ [# O7 ^3 Q% w
  57. -- Check size of unsigned short5 ^: U. `, V( K  y* w/ Y
  58. -- Check size of unsigned short - done* U) R4 _. J# z1 ?% H
  59. -- Using unsigned short7 f& ^1 Z; ]. {' b8 A; d
  60. -- Check if the system is big endian - little endian. W9 N  M. E$ ?
  61. -- LITTLE_ENDIAN
    " n) V' Q. H6 ]: x+ q
  62. -- Looking for nanosleep
    5 d# X! A) Z2 p+ q: _  N1 M  E& R
  63. -- Looking for nanosleep - found
    5 M; w( h- r) V1 p' z: R; ~
  64. -- Performing Test C_SUPPORTS_WALL- h9 B6 A9 x, e/ i2 V, W* O
  65. -- Performing Test C_SUPPORTS_WALL - Success
    ' N! m3 @  D7 j+ Y' C' C* J( w& }
  66. -- Performing Test C_SUPPORTS_O0  s9 u. F0 e' `$ c1 E6 c
  67. -- Performing Test C_SUPPORTS_O0 - Success! }2 b0 z( E- ~, _, x7 M
  68. -- Performing Test C_SUPPORTS_GGDB
    ( H8 r- [) O0 e- o- t9 U7 r7 x
  69. -- Performing Test C_SUPPORTS_GGDB - Success, z; H5 N: d/ m5 q( X0 B0 E2 X! x' D
  70. -- Performing Test C_SUPPORTS_FPROFILE_ARCS
    + Z* X1 u2 R5 a' S- ?( ]
  71. -- Performing Test C_SUPPORTS_FPROFILE_ARCS - Failed
    9 \( ^6 |+ T8 U3 Z& g3 S  |6 h
  72. -- Performing Test C_SUPPORTS_FTEST_COVERAGE
    : G3 \* F( y! x$ N, K) E# K& T
  73. -- Performing Test C_SUPPORTS_FTEST_COVERAGE - Success7 D7 d5 D! ^8 f) u1 W
  74. -- Performing Test C_SUPPORTS_FNO_OMIT_FRAME_POINTER
    8 \  D' \- Q; k
  75. -- Performing Test C_SUPPORTS_FNO_OMIT_FRAME_POINTER - Success
    8 _9 x- E" \9 O* }- X
  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/* e* J* B4 d$ I; G0 d% M% \. N
  77. -- Found Libusb: ~/workspace/STLINKALL/stlink2/3thparty/libusb-1.0.21/libusb-1.0.21/libusb/.libs/libusb-1.0.a
    . `( Y6 M3 J. W7 E
  78. CMake Warning (dev) at src/CMakeLists.txt:39 (add_library):
    ) k, C2 }& X1 u; x% w" u
  79.   ADD_LIBRARY called with SHARED option but the target platform does not, j) E" e; `5 n' K
  80.   support dynamic linking.  Building a STATIC library instead.  This may lead
    . E) G1 [- [% D
  81.   to problems.
    / c& N% Q! s4 S7 n) L+ r
  82. This warning is for project developers.  Use -Wno-dev to suppress it.% c+ f4 X; q: U! R" G3 z0 Y
  83. + j) e- C/ S9 I( n
  84. -- Found Perl: /usr/bin/perl.exe (found version "5.22.1")
    7 |6 K7 J8 K5 X4 N. b( t
  85. -- tests enabled2 A& P" Q; ]8 z. H0 z" `0 J( R' o
  86. -- Configuring done
    0 W$ ~( y3 I' K
  87. -- Generating done% f: X; C4 z" ]' w
  88. -- Build files have been written to: /aaaa/workspace/STLINKALL/stlink2/build/Debug
    , P* u2 D& }  b- K
  89. [DEBUG]
    $ W0 p& x9 `5 \$ U' E9 i& O2 o, Q
  90. Scanning dependencies of target stlink2-shared
    - Y0 m" Z9 t% y( D6 ]2 h/ ^8 E
  91. [  2%] Building C object src/CMakeFiles/stlink2-shared.dir/stlink2.c.obj
    7 S' T# N9 o! q; x% ^0 R1 ~
  92. [  5%] Building C object src/CMakeFiles/stlink2-shared.dir/cortexm.c.obj; ~$ u& Z% c7 n0 w2 ]
  93. [  8%] Building C object src/CMakeFiles/stlink2-shared.dir/flash.c.obj
    $ I' O6 `& G) p, g& Y- r
  94. [ 11%] Building C object src/CMakeFiles/stlink2-shared.dir/log.c.obj* p: t' ~% m- P7 r7 j2 u
  95. [ 14%] Building C object src/CMakeFiles/stlink2-shared.dir/usb.c.obj
    ; j/ P% B- ^8 l3 R: x/ z. E
  96. [ 17%] Building C object src/CMakeFiles/stlink2-shared.dir/stm32.c.obj
    0 g% i7 A, L8 f/ F+ |7 d
  97. [ 20%] Building C object src/CMakeFiles/stlink2-shared.dir/semihosting.c.obj) d) C$ ^% o( x, i
  98. [ 23%] Building C object src/CMakeFiles/stlink2-shared.dir/utils/hexstr.c.obj9 |% P2 K5 K# W) t; A0 v
  99. [ 26%] Building C object src/CMakeFiles/stlink2-shared.dir/utils/msleep.c.obj& I% Y* P$ |0 X, h; \1 p; p
  100. [ 29%] Building C object src/CMakeFiles/stlink2-shared.dir/utils/ihex.c.obj: C/ w( f0 I) N
  101. [ 32%] Building C object src/CMakeFiles/stlink2-shared.dir/utils/flag.c.obj
    1 D7 W4 q; m* ~' I7 y9 {
  102. [ 35%] Linking C static library stlink2.a
    8 d  c$ x' c; H
  103. [ 35%] Built target stlink2-shared
    1 Y2 q/ ?$ Y% M- U0 v
  104. Scanning dependencies of target stlink2-static
    3 v9 T8 C3 M3 X# ]0 H
  105. [ 38%] Building C object src/CMakeFiles/stlink2-static.dir/stlink2.c.obj$ E( u- E) z' V6 Z, u
  106. [ 41%] Building C object src/CMakeFiles/stlink2-static.dir/cortexm.c.obj
    + T  K( |! c8 t3 f
  107. [ 44%] Building C object src/CMakeFiles/stlink2-static.dir/flash.c.obj
    2 B& B. L( {4 T
  108. [ 47%] Building C object src/CMakeFiles/stlink2-static.dir/log.c.obj# N2 N9 M  i, j3 W
  109. [ 50%] Building C object src/CMakeFiles/stlink2-static.dir/usb.c.obj4 s# F7 J5 L! Q+ h, W' O( p6 C) @
  110. [ 52%] Building C object src/CMakeFiles/stlink2-static.dir/stm32.c.obj
    " R; I8 `5 ?* N8 q
  111. [ 55%] Building C object src/CMakeFiles/stlink2-static.dir/semihosting.c.obj
      E3 S; {4 _4 Y( w# \1 Z
  112. [ 58%] Building C object src/CMakeFiles/stlink2-static.dir/utils/hexstr.c.obj7 r; g4 o4 U9 C  b: ~5 u1 D/ Y
  113. [ 61%] Building C object src/CMakeFiles/stlink2-static.dir/utils/msleep.c.obj
    + U' A4 U+ ]  y$ K; N' |
  114. [ 64%] Building C object src/CMakeFiles/stlink2-static.dir/utils/ihex.c.obj* [7 f% i) O$ N, @. i* a
  115. [ 67%] Building C object src/CMakeFiles/stlink2-static.dir/utils/flag.c.obj
    4 N$ a% O# A" y
  116. [ 70%] Linking C static library stlink2.a
    & z! L' @* g$ P) H
  117. [ 70%] Built target stlink2-static% G9 S& V+ w$ H; S( U
  118. Scanning dependencies of target stlink27 C/ O% i1 D! n
  119. [ 73%] Building C object src/cmd/stlink2/CMakeFiles/stlink2.dir/main.c.obj$ C* o' u; d6 a9 ]  h
  120. [ 76%] Linking C executable stlink2
    ! X0 x  c7 d+ f- r4 |, f+ Q
  121. [ 76%] Built target stlink2, V  \/ j6 Q" ?0 F! ^) w  o) e$ W; L
  122. Scanning dependencies of target probe$ H0 H* H2 c! n# L/ W* @9 Q
  123. [ 79%] Building C object tests/CMakeFiles/probe.dir/probe.c.obj* {; |7 i; g- l4 O
  124. [ 82%] Linking C executable probe
    3 F) i! |8 f' E" Y2 V8 K
  125. [ 82%] Built target probe
    ( [6 ~0 e% H" l  {& V. K& v
  126. Scanning dependencies of target open_close
    " _5 j1 p: q' j4 Y+ P3 `
  127. [ 85%] Building C object tests/CMakeFiles/open_close.dir/open_close.c.obj
    ' ]' M+ w0 T4 E7 _
  128. [ 88%] Linking C executable open_close; @3 [- k: K6 @+ q% x9 t# W
  129. [ 88%] Built target open_close5 r% G! Q: \( Y0 P0 Q  n4 [
  130. Scanning dependencies of target ihex
    $ O  l* y' ]# b+ ?: D" N
  131. [ 91%] Building C object tests/CMakeFiles/ihex.dir/ihex.c.obj3 C0 Y0 v! E. n
  132. [ 94%] Linking C executable ihex
    ; [3 u6 O7 V( j" L+ u
  133. [ 94%] Built target ihex
    6 ]; Q  ~, P: B$ g' T8 z7 Q$ y2 A
  134. Scanning dependencies of target log# b! ~$ i# B0 r$ o1 K
  135. [ 97%] Building C object tests/CMakeFiles/log.dir/log.c.obj. Y3 v" o5 H$ H9 q8 A4 M
  136. [100%] Linking C executable log
    : C! L( Q6 U* m7 S; d& M
  137. [100%] Built target log
    & h2 a4 p9 ?" l

  138. : l# `2 }$ c4 S6 S; g. m$ @/ H/ s  y
  139. admin@admin-PC MINGW32 ~/workspace/STLINKALL/stlink2% G! d: x% U/ }  q% y/ N
复制代码
测试工具在 build\Debug\tests) R4 i  f7 q" d8 D5 g( L4 }
编好的静态库 build\Debug\src\stlink2.a
' d0 ^0 @' r5 J" w; m* [" ~: e1 p. N) T

, E+ ^+ A% `. i8 s$ {3 q# S. M" q9 c. U6 m
: r' X  Q( W  {: s6 d5 h

9 F  S, h+ a5 i) p; `2 zmsys2命令行下可直接运行.
* x& X' a0 B0 Mwindow cmd下运行可能会提示缺少msys-2.0.dll,msys2\usr\bin下可以找的
4 V0 g; J7 y+ }* t) B& F# q
5 T. U7 T& ]8 f2 B$ G/ A) p测试一下:
2 N% }9 Z# G; F, J1 L6 Q1 L! |+ [# h
% o! [% @4 a8 R. \" c9 v

open_close

open_close

9 o0 s& d" _5 _6 e5 W; s  D' y
( J9 l  \0 d1 }5 \; W) ^% m, B! p' L# d4 H2 u& T' Y) S4 A6 i
ENJOY YOURSELF
0 L( Y8 F6 Q0 S+ z3 x0 M
: R2 c$ D# `9 h3 H
5 h3 M5 W1 {' T) d0 K' u) a3 d+ S
: ?7 i0 P$ w! X+ V+ A. D5 Y7 @$ |; a' M0 E& T

4 c# c8 s. h- b, J& H
! _. Z" ?9 G, U
2 Q+ z8 v4 }/ k$ n1 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
" h8 J/ z; M7 t% l! o
! ~" q- R. I6 E' x( }- U/ u修改下open_close.c:1 N" i1 j' ?$ u+ V6 L$ F) E
#include <stdio.h># z1 l* y6 G( {$ w
#include "stlink2.h"0 w' T, W9 J7 X! W; b$ D
, j& i7 |6 I* O5 l" i; J; y
void dump_hex(const void * data, size_t size)
: s) U# a; H% |/ l2 v{5 a! W; N" l9 n4 {9 V+ S
        char ascii[17];) G$ C5 x' A# Q8 U
        size_t i, j;% b* T9 G7 o. m2 y
        ascii[16] = '\0';
4 w- V! v6 Q6 P0 z, s; [        for (i = 0; i < size; ++i) {5 b& Q# k+ Z# j/ C; q8 }
                printf("%02X ", ((unsigned char*)data));! R4 @! m, @# A
                if (((unsigned char*)data) >= ' ' && ((unsigned char*)data) <= '~') {
7 H0 W$ l/ D; b5 g( ^$ ]                        ascii[i % 16] = ((unsigned char*)data);
: N. i& ]. f% F0 Z$ ^                } else {# ?6 K" Z; Z+ T& H3 G$ [. A
                        ascii[i % 16] = '.';1 C; ~9 `( n) U) E+ g. T8 w# v
                }2 M( J. F: Z' M4 W; v  h* W
                if ((i+1) % 8 == 0 || i+1 == size) {# |& t7 @7 b4 A
                        printf(" ");5 {4 Q6 [3 V+ c9 {# s* x4 R- N
                        if ((i+1) % 16 == 0) {9 e# n4 f& Q. \$ r
                                printf("|  %s \n", ascii);
+ Z" ~- A* y# h                        } else if (i+1 == size) {
  I2 {$ d. J$ N* f& R" \                                ascii[(i+1) % 16] = '\0';
3 O! ~' s0 `1 u+ \+ P- z                                if ((i+1) % 16 <= 8) {
3 d% B: ~: Y" B6 N9 \. G                                        printf(" ");& M* P6 d2 u" i) h
                                }% l5 j. l2 V, f$ S8 Q5 V
                                for (j = (i+1) % 16; j < 16; ++j) {
) U4 H( @8 \( D2 S  C7 r                                        printf("   ");
  b5 c; |. Z: h/ `) l- B                                }$ o7 j$ Q* E% ]! |
                                printf("|  %s \n", ascii);
$ C/ E5 c. a' n3 J/ U                        }5 g$ o. r9 ~4 F% E& W' P; \, ~
                }" L, \# N6 S. S
        }
! B, L; A' H/ A  c1 _6 w2 s}* p7 P# J6 [! N

+ u1 i0 V- J1 jstatic void test_open_close(stlink2_context_t ctx, const char *serial)  n2 ?) {" [( |0 {% I; ~. c
{
, X* g1 R1 J1 r- V* ^4 I6 Z+ c        stlink2_t dev;
0 B! k0 m* n- y$ x
8 P  E$ P0 z: h# ^        dev = stlink2_open(ctx, serial);
) W$ M8 p7 ?$ }4 U+ W6 O        if (!dev)' g3 n2 H$ C7 ^) C% C% b
                return;5 t* t0 Y, K! Z! m4 ]; Y
2 b4 ~0 J8 y, `1 J8 M
        uint32_t cpuid;$ E" C( v; q1 w6 b) J) n4 o
        uint16_t devid;0 k- ^# ~2 y- j, f8 t* r$ J$ z

+ Y* h, O; j$ c        stlink2_log_set_level(dev, STLINK2_LOGLEVEL_INFO);
% \* x& b1 x. h4 J2 m6 c. E+ ?" z/ D6 h/ g6 b
        //printf("  serial: %s\n",    stlink2_get_serial(dev));
7 A" D8 l' ]$ B) z! J# D        //printf("    name: %s\n",    stlink2_get_name(dev));
+ [* L2 q/ _; B7 |5 J        //printf(" version: %s\n",    stlink2_get_version(dev));4 u8 ^( v. l+ ^

; K8 T. N" ]8 @/ p4 [+ U: W$ B$ b        stlink2_get_mode(dev);
$ O1 W5 r+ k0 u' g        stlink2_set_mode_swd(dev);
, j: j9 H' f6 x! q" {        //stlink2_mcu_halt(dev);# k0 Z6 I9 N- R0 y! M
& g- x' R2 K5 g0 Q1 m
        /*0 P0 X) w6 y% [+ A5 q, y+ Y
    uint32_t pc;
# n- R, R; U/ U% ?" b4 f3 U0 T: K3 X
8 H7 E! J! t; Y# {& Z4 }        stlink2_read_reg(dev, STLINK2_CORTEXM_REG_PC, &pc);! o% M" m& m0 K9 e1 v! N
        printf(" PC: 0x%08x\n", pc);# `) e; p9 U& G( E" V
        stlink2_read_all_regs(dev);# o3 B, }# i# i4 C
% s" n% E  S  A+ a# y0 e
        stlink2_mcu_init(dev);% n) x  J9 o" z& l3 U4 t% k+ H3 Y
        stlink2_read_reg(dev, STLINK2_CORTEXM_REG_PC, &pc);
: A& s  L( V7 y3 J$ x) v. O0 v        printf(" PC: 0x%08x\n", pc);
" T4 n3 k+ u) K" z0 D& r# {. c( L- J9 f- B- `
        uint32_t xpsr;* F0 U+ s8 `* X) j8 {
        stlink2_read_reg(dev, STLINK2_CORTEXM_REG_XPSR, &xpsr);5 U8 L0 W6 \; O. e- f- s4 H, q
        printf(" xPSR: 0x%08x\n", xpsr);  o2 c4 e' }7 ]- I9 g+ E) ^
4 N3 W3 P2 U7 n6 Q+ T
        uint32_t control;
+ @+ T) n  x9 Y) P: p! U        stlink2_read_reg(dev, STLINK2_CORTEXM_REG_CONTROL, &control);9 G2 d% @+ Y# [2 q2 x9 ~( c5 L
        printf(" CONTROL: 0x%08x\n", control);; f5 M$ ^4 p  S9 h. o( b# A9 H8 H+ j
/ m1 |6 F2 o2 j* E
        cpuid = stlink2_get_cpuid(dev);
8 s& x$ r; f) Y! o        devid = stlink2_get_devid(dev);0 w* l4 z7 }2 Q- p! L
*/7 \% x4 l6 n" B( l
/*4 Q( |4 \5 k* l3 H* K  j
        printf(" voltage: %f\n",    stlink2_get_target_voltage(dev));
3 i; U" \& W4 D8 G        printf("   cpuid: %08x\n",  cpuid);  q( E, z9 k7 @) v
        printf("     partno: %03x (%s)\n", stlink2_cortexm_cpuid_get_partno(cpuid), stlink2_cortexm_cpuid_partno_str(cpuid));' L1 E3 f( q8 C" N
        printf("  coreid: %08x\n",  stlink2_get_coreid(dev));. ]1 W9 U5 a  O* f, g
        printf("  chipid: %08x\n",  stlink2_get_chipid(dev));% T9 K) z4 a2 }9 s
        printf("   devid: %s (0x%03x)\n", stlink2_stm32_devid_str(devid), devid);
* D  D; `8 ]3 y: p7 _        printf("  flash size: %dKiB\n", stlink2_get_flash_size(dev));
8 V/ R: E9 j2 k; \) G0 L        printf("  unique id: %s\n", stlink2_get_unique_id(dev, 0x1ff800d0));
2 }& \0 m# m  C/ ~+ v9 h*/3 |, t, Z7 h+ E6 R

' Y2 }$ w3 o$ w: R//#ifdef BLA; X8 C( v6 E, g, `2 r- L9 P, {
        uint8_t *flash = malloc(1024);
3 V' P$ Y4 a8 W% P        stlink2_read_mem(dev, 0x08000000, flash, 1024);
! _( U( A+ R# A% i        dump_hex(flash, 1024);6 {8 q5 |5 Y) A0 v% Y( @
//#endif
) C& _: B! H1 A  F9 Y3 l4 Y#ifdef SEMIHOSTING! q1 z* h: ^- q
        while (true) {
1 G5 n) n: o4 f6 r+ @5 M                if (stlink2_get_status(dev) == STLINK2_STATUS_CORE_HALTED)( r; X% E. B3 N  P* k
                        stlink2_mcu_run(dev);
) N4 x& V$ j3 P% \' m                stlink2_semihosting(dev);, }0 F! W5 I$ W* `& |
                stlink2_msleep(1);
1 Y; O% t8 `4 E6 f* \8 U6 R        }
; u0 k2 ?# r$ P#endif4 W+ P* T" v, C* m3 c1 O2 W& v
" Z- o1 F4 g! i' f1 v. B4 E3 m
        //stlink2_mcu_run(dev);6 I# n4 U. [8 [) U1 `
        stlink2_close(&dev);
/ B7 V$ [+ u1 Q}+ c7 j1 K9 F* F' |8 A8 M
& [8 z( d2 O  o
int main(void). W+ K' C0 ]( A" O
{# [2 |. A# A  Z- z3 \$ ^3 e
        stlink2_context_t ctx = stlink2_init();- @0 I: s; N" l9 s7 u' O
$ j; z4 I4 }) K$ g  g
        test_open_close(ctx, NULL);
8 }# u' I6 J* t! z        stlink2_exit(&ctx);  Z6 }1 b' \' Z# T# j8 J5 v
}
& f) n% x# t# O( n4 Z# ~8 S
readram.PNG
moyanming2013 回答时间:2017-2-8 17:37:02
不同于ST-LINK/V2吧?ST-LINK/V2还未开源吧?
七哥 回答时间:2017-2-8 23:11:38
楼主强大,楼主威武,此处有掌声2 K/ j  r# s! n! o
标记备用
Mandelbrot_Set 回答时间:2017-2-9 09:55:48
moyanming2013 发表于 2017-2-8 17:371 V9 K- |2 R$ A+ Y9 Q
不同于ST-LINK/V2吧?ST-LINK/V2还未开源吧?
2 X4 U$ `8 T) h+ [. L/ I% [% Q9 A
我截图用的NUCLEO-F303RE../ Y& t; q: Q3 V
xiongmao5k 回答时间:2017-3-29 14:26:20

最近也在搞这个。

本帖最后由 xiongmao5k 于 2017-3-29 16:25 编辑
, ?) v5 O6 K( o. }/ d6 t' _" f4 L/ L( q& J* N( r% Z) ]
我用的是TDM-GCC,cmake已经构建成功,make有问题,先赞一下楼主,再回过头看。$ n+ z0 J1 h( I& Y1 N4 h2 h
现在已经编译成功,生成了三个文件,sg.exe   flash.exe   usb.exe    问一下楼主,接下来应该怎么用啊???
4 n7 K! v6 `, r$ a, }. ]4 _2 s$ j
Mandelbrot_Set 回答时间:2017-3-30 09:17:16
xiongmao5k 发表于 2017-3-29 14:264 x) I  ^' ~6 }$ H5 ~
我用的是TDM-GCC,cmake已经构建成功,make有问题,先赞一下楼主,再回过头看。
% }/ ]! m+ Q: R( F现在已经编译成功,生成了 ...
' k# {+ {) ]6 @! w
你用的应该是http://github.com/texane/stlink吧。& H( E3 _0 c# q1 v
和我一楼说的不是一个东西。这个要比我1楼说的功能强很多.
! O+ I7 Y! h# [这个github上有编译好的win64版本$ F7 t5 \) Z# G4 n
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:057 M4 M4 l8 Z9 k+ |3 j+ n  b
我用的也是STlink-v2,现在想做的就是自己修改main文件,实现通过代码实现stlink直接对spi flash下载擦除的 ...

8 _/ N4 p* D+ P2 [8 X6 M- o官方stlink utility 就有这功能的.(没用过)) }0 O+ v$ U2 `, e; Z% p
http://www.st.com/content/ccc/re ... s/en.CD00262073.pdf
9 i; S0 K8 W( p3 l2.2.6节 3.9节 等6 w* T8 i  P* J$ O8 n* j7 u5 w' [
/ H( a, C9 c  g
xiongmao5k 回答时间:2017-4-5 13:25:51
本帖最后由 xiongmao5k 于 2017-4-6 11:31 编辑
! Z/ T" l  `! B, j4 G, k
Mandelbrot_Set 发表于 2017-3-30 17:59
9 d5 M, @2 }  S- r官方stlink utility 就有这功能的.(没用过)5 l4 J% c  w, T" k: _% L! b& G
http://www.st.com/content/ccc/resource/technical/docume ...
2 K0 J* F% i% m6 W5 E- X
软件我是用过的,现在是想用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
/ J3 [% D3 V* O2 u# y& c/ K我怎么编译不出来这些可执行文件呢?执行make debug以后,生成了一堆东东,象是ihex log open_close probe  ...

- N  ?8 y4 B3 k! G, `7 Z1 u有一个*.a的库。# c" R& M. W: W
ihex log open_close相当于是例子.功能比较少...
CC4 回答时间:2017-4-13 09:56:46
Mandelbrot_Set 发表于 2017-4-13 09:34
3 c6 v. E/ U7 ]0 c1 y0 K6 F7 ?有一个*.a的库。9 H: A7 J; p' E- P0 i
ihex log open_close相当于是例子.功能比较少...

4 ]! N' N1 c7 J: o那意思是,这个不是一个完整的工具?而只是一个开发库?
Mandelbrot_Set 回答时间:2017-4-13 10:19:33
select326 发表于 2017-4-13 09:56
$ }9 d% Z; P  U: u, F4 I) Z那意思是,这个不是一个完整的工具?而只是一个开发库?
8 O3 [' z5 L! V2 l5 R
是啊.& Y" l& J: [, M" q5 @+ ^8 U/ |
另外,找了半天只找到memread,没找到memwrite,
8 B6 p( d- ?' E! e1 }2 o功能不是很全,编译一下,纯当练练手了.! A0 G3 r, Q4 |. h& E
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版