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

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

[复制链接]
Mandelbrot_Set 发布时间:2017-2-8 14:17
: P6 y4 }3 L, i5 V/ }6 i. ^/ g0 L$ b$ j
' k# l! m7 ~8 ], K6 L
0 @- r8 e0 b8 ^+ R- ]6 X
写在前面:0 W; d5 x6 V2 P4 l* T
0.好久不发帖子,排版略渣
$ B+ g! C9 G% B( [# A) }' G, b1.编译是可以成功的,但不保证不同环境及设置所造成差异
% N6 u; x- l* t3 j6 B6 F$ i1 c2.只是编译通过,库本身是否有bug属于未知问题.
/ ^6 s( [. W# q$ [4 D, J. [8 _1 G. Y$ C  E- ]# B  G


& f4 M% r9 Q4 c) v1 x仓库简介:
3 ^% L( \% H0 s; u  t! dSTMicroelectronics STlinkv2 programmer library and tools
0 N% A% Y2 @, q, I(具体可到web页面上自己看 http://github.com/xor-gate/stlink2)+ J' O4 h6 b2 l" ]/ j, @5 L" F
这个就不多说的,代码不是我写的.
3 ^( ]( I, {( |( n  t
8 y& U* `) A, T/ I

9 r  E1 n+ N$ `" m1 |/ L) hwindows环境编译心得及步骤:
- h! w3 l/ @7 s: [) E' K1.搭建msys2环境。
& ]( Y6 v% U7 X# y# |[仅mingw可能就够用了,不过考虑到源码用到cmake,有个shell命令行开发环境,是相当有必要的]/ r6 b2 Z% b' z. F' J
下载 msys2安装包(我用的是msys2-x86_64-20161025.exe) ! b. ~$ Q% m* A" y5 |
ref:
3 W+ n9 k( n" c, `8 v! _http://sourceforge.net/projects/msys2/files/Base/i686/ ) i2 }  ^" j' P
http://www.msys2.org/
" e( A& C% h. v# G. n- x1 F印象中这个是要windows 64位操作系统才支持的。% x7 R, ^$ d) r2 c
安装步骤略...,就是一路点下去,设个安装路径.
: A5 S8 }: I& x* n9 `, @启动过后用pacman安装必要的工具,这个不是本贴重点,暂略...
* z/ X; [' D+ U7 M, A0 v7 T具体可以百度google,网络不行pacman的源也可以修改,baidu吧.
) }. m  A# ]8 m5 _" U8 Z# H+ q) a9 B' t9 g! i
2.编译libusb8 Q2 q9 W2 a8 \) E3 V, s: B
下载libusb-1.0源码
8 Q8 B: p" ?$ l8 h, J[参:http://sourceforge.net/projects/libusb/files/libusb-1.0/]
2 \! [# f% w0 N3 K% E. G' x% U子版本号应该不是重点2 j- l! F! B+ ?1 g. A
这个编译很简单,编译步骤:
, _  v  X' a/ O* |4 O" r8 n5 z
  • 解压
  • msys2进入相应目录下
  • ./configure
  • make
    6 g) j' b$ r# n

1 q) c  i9 m; q如果成功,在libusb/.libs目录下生成libusb的静态库和动态库.这是我们需要的。
1 D2 J' G7 }7 k: g- r! V8 ?- zlibusb/下的头文件也用的到.
4 N2 U5 i/ ?; v( {' x) _/ o% ?; [4 ?. ]6 j0 z
几点说明:
, `! r/ a% _; Q* \8 _[注1:可以make install,但并非必要]
* h0 P' Z) }# S, R[注2:可以指定安装路径,也非必要 ./configure --help 查看帮助]4 z/ S9 T7 T! y
% H. c5 P2 ?- H: M
3.编译stlink2
' ?0 T: O: V0 E* w, \( R下载源码:
& ?( N8 I  |1 Y  ]git clone http://github.com/xor-gate/stlink2
3 i5 V/ `& n$ F! ^) F如果msys2不想安装git,web页面下载压缩包,然后解压过去,效果是一样的。
% p; D3 \( _/ n进入stlink目录,打开README.md...先看一看...+ z+ ]( F% R$ N; Y2 v  V
这是个好习惯
, q0 t+ T! J( R: `/ w5 M2 f所有设置都正确,执行make debug即可开始编译。
: k) s* }1 O( [% S6 B8 o( l由于现在什么也没做,不出意外,是编不过的。9 n2 B) W5 r( c4 f# E: ?
make release应该差不多,先不考虑。0 c4 F1 F0 E7 ^, A% p' s2 D8 d% Y
根据出错提示进行修改,修改过后,执行:) \5 W  d5 U6 F3 r1 ~1 m
make clean
/ s/ O! m3 _- m6 c. I/ u& y( e& \make debug, R' n9 T/ _& m  w5 E' A
修改方法:
+ x5 f( \1 Y5 B6 G0 @* \/ v* D1.提示缺少工具
- d, L4 r% k  ]* V比如没装gcc,没装cmake,没装make。。。那么安装一个..,反正少啥就装啥...
* }9 w. G# _! h; U5 N! t
+ y. c9 s3 P- y0 @! u8 y2.提示:& k/ ~) v7 x3 W- \6 t- O" w3 f9 o3 U1 c) k
System is unknown to cmake, create:, N: y/ L  L( j8 T- d% ?  A* P
Platform/MINGW32_NT-6.1 to use this system, please send your config file to cmake@www.cmake.org so
* t/ k: S, j5 z+ f" W修改顶层MakeFile[line 49 - 51] (贴出来tab键咋没了)& j" m/ ?7 g. S4 K/ E+ j. s5 j, ]
  1. build/Debug:/ a: Z( A, S* d7 h$ y
  2.         @mkdir -p $@
    ) P0 \. ^( u# Y! ]- r
  3.         @cd $@ && cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_SYSTEM_NAME=Generic ../../
复制代码
release先不考虑...2 {+ C2 h$ x, g. a; R6 b; @6 t

7 Q: z' G' Q+ [# i0 B: c3.提示LIBUSB_INCLUDE_DIR LIBUSB_LIBRARY 出错
, u4 A3 o0 C5 [! o! f& a这是因为cmake找不到libusb库,可以手动设置下:
4 J7 Y5 U6 m1 ?6 }8 L4 h/ Y) S修改cmake/Find7Zip.cmake7 E& u% v; E3 O0 y. v9 ]& b8 J4 y! J( h
set (LIBUSB_INCLUDE_DIR [这儿填路径,中括号删掉])% z8 x0 @* _8 G" m5 q" I
set (LIBUSB_LIBRARY [这儿填路径,中括号删掉])& D0 M# ]+ e  @& r4 W* ^
LIBUSB_LIBRARY 指向 你的libusb-1.0.a的路径
3 U" ^* n* h' ]) dLIBUSB_INCLUDE_DIR 应该也可以随便设,自己把libusb的.h copy过来$ r- v& a& G3 J1 `

# v0 i4 X  T8 N4.缺少头文件
# \* Y3 r' n, Z+ k' A反正都能找的到...注意下 include <>与“”的差别+ v( w$ u4 v9 u/ J" R
% @( e7 j% S1 l1 |( |6 Q
附上编译成功的输出信息:
) |! g  G4 s; ~0 d  ~) q* `' s
  1. admin@admin-PC MINGW32 ~/workspace/STLINKALL/stlink2
    # l% w# t: X4 F3 C( \
  2. $ make debug, n( d9 s$ X$ y* e, a& E* B1 L
  3. -- The C compiler identification is GNU 5.3.06 j! Q9 r! T9 K9 I* B4 N/ n
  4. -- Check for working C compiler: /usr/bin/cc.exe
    8 t* C1 H9 Z; b- E! C  @9 v
  5. -- Check for working C compiler: /usr/bin/cc.exe -- works
    0 m2 [4 u) m. N* [
  6. -- Detecting C compiler ABI info# i: H" h; o: s* ]' c
  7. -- Detecting C compiler ABI info - done
    3 [, y) v2 |/ Y" E6 z( [- F) E
  8. -- Detecting C compile features, ^1 R8 \: W) U
  9. -- Detecting C compile features - done& p( E, Q3 R3 `" `* Z7 x
  10. -- stlink2 version: 0.1.0-dev
    % r+ e( T( g$ ?6 X
  11. --            Major 0 Minor 1 Patch 0$ p% d3 w) ]5 h. _
  12. -- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE)$ u& M3 k5 N$ m, d; L6 f. j0 o
  13. CMake Warning (dev) at cmake/Doxygen.txt:27 (message):  U7 M' r) F9 E1 |: k) l
  14.   Doxygen is needed to build the documentation.
    $ A0 Z' c% H, L
  15. Call Stack (most recent call first):
    7 \$ ?$ w" H/ @6 w0 m- i! b* }$ T
  16.   CMakeLists.txt:19 (include)1 D3 V6 X! z+ B2 k# g5 J5 E" S
  17. This warning is for project developers.  Use -Wno-dev to suppress it.6 u2 M4 n! G. C/ z4 y3 `" D

  18. 4 R3 x! S; @' \% Z. C* N
  19. -- Performing Test C_SUPPORTS_STD_C99
    ; \7 O' u9 G6 [: o
  20. -- Performing Test C_SUPPORTS_STD_C99 - Success
    0 ]: H& _5 z3 \) @. |2 [3 {
  21. -- Performing Test C_SUPPORTS_WEXTRA
    0 ~/ ~: P8 m2 D
  22. -- Performing Test C_SUPPORTS_WEXTRA - Success
    % x: q- ^3 o. ]' P- b
  23. -- Performing Test C_SUPPORTS_WSHADOW7 R5 A' S! [  ~3 ~2 W8 C7 `
  24. -- Performing Test C_SUPPORTS_WSHADOW - Success! t& m3 I: I3 {2 H9 C
  25. -- Performing Test C_SUPPORTS_D_FORTIFY_SOURCE_2
    & N& O3 J- j( w& L- S$ M. N0 M
  26. -- Performing Test C_SUPPORTS_D_FORTIFY_SOURCE_2 - Success. V: x' {" b" ~, b# d  B7 h; o
  27. -- Performing Test C_SUPPORTS_FSTRICT_ALIASING
    1 g% d9 X5 Z! r* `0 h
  28. -- Performing Test C_SUPPORTS_FSTRICT_ALIASING - Success
    ; q; j5 j; x+ E" b1 O8 [
  29. -- Performing Test C_SUPPORTS_WFORMAT
    / K6 F7 E( M* C$ P8 ~9 M" a! x8 a
  30. -- Performing Test C_SUPPORTS_WFORMAT - Success
    4 y4 S4 q* r* f' ^; c
  31. -- Performing Test C_SUPPORTS_WFORMAT_SECURITY9 ]. U/ b$ v0 A- E. R  P8 \) l. j
  32. -- Performing Test C_SUPPORTS_WFORMAT_SECURITY - Success
    & O9 s. P* @  \% w, W
  33. -- Performing Test C_SUPPORTS_WMAYBE_UNINITIALIZED
    / P% Q% x0 S* m$ P# j) N
  34. -- Performing Test C_SUPPORTS_WMAYBE_UNINITIALIZED - Success
    ! P" {: T  i( A$ j2 \7 [
  35. -- Performing Test C_SUPPORTS_WMISSING_VARIABLE_DECLARATIONS6 k# Q' X! P! s* G3 ?
  36. -- Performing Test C_SUPPORTS_WMISSING_VARIABLE_DECLARATIONS - Failed0 T1 A& j# d, f2 d6 g; o9 y
  37. -- Performing Test C_SUPPORTS_WSHORTEN_64_TO_32
    8 Q- g$ k, O$ o
  38. -- Performing Test C_SUPPORTS_WSHORTEN_64_TO_32 - Failed+ X1 J- h8 K! s, D( \% [
  39. -- Performing Test C_SUPPORTS_WIMPLICIT_FUNCTION_DECLARATION0 E+ [4 e/ L# u) v
  40. -- Performing Test C_SUPPORTS_WIMPLICIT_FUNCTION_DECLARATION - Success) N& z* ?3 A% z/ o, n$ L
  41. -- Performing Test C_SUPPORTS_WREDUNDANT_DECLS
    9 Y7 d4 e" l4 k  w  m1 P- N
  42. -- Performing Test C_SUPPORTS_WREDUNDANT_DECLS - Success
    - T' ]/ S: r, e1 k0 L: r+ ~
  43. -- Performing Test C_SUPPORTS_WUNDEF; _' j2 A8 r2 V  ]/ E$ A6 _
  44. -- Performing Test C_SUPPORTS_WUNDEF - Success
    4 W; v, S* Y# H5 T$ e- V6 |$ ?
  45. -- Performing Test C_SUPPORTS_WSWITCH
    - X  E( T7 Q3 J4 [( t% S% j$ ]( M0 E
  46. -- Performing Test C_SUPPORTS_WSWITCH - Success: @' I7 R, A) `
  47. -- Performing Test C_SUPPORTS_WFLOAT_EQUAL; t, {4 M* }( z. E! s2 X7 u
  48. -- Performing Test C_SUPPORTS_WFLOAT_EQUAL - Success
    + r% J! P( W' R- v
  49. -- Check if the system is big endian: q  n/ v. Y' C& A! a/ y2 [
  50. -- Searching 16 bit integer$ r8 P1 H- t2 I& q$ T6 j+ T
  51. -- Looking for sys/types.h
    8 \6 V8 t% |4 i$ ^& L
  52. -- Looking for sys/types.h - found
    . K5 n2 m5 K# u, N
  53. -- Looking for stdint.h) h( S9 y8 Z& n( i) b+ U  m/ o& S! x
  54. -- Looking for stdint.h - found
    " d" d" C( q6 U2 j" E7 [/ e# e& W
  55. -- Looking for stddef.h
    $ k+ ?! k7 N* {4 I8 d! l" n
  56. -- Looking for stddef.h - found
    * ~& m, l* L4 i
  57. -- Check size of unsigned short
    * n* @0 }$ D  F
  58. -- Check size of unsigned short - done
    0 F  L4 V( j0 X
  59. -- Using unsigned short
    - F7 u4 s+ V* b) Y% L& F) p
  60. -- Check if the system is big endian - little endian; U3 ?4 d# @3 h2 L8 F& M( l
  61. -- LITTLE_ENDIAN  x. C# e9 v  `3 W; u
  62. -- Looking for nanosleep
    ( g2 x1 u! h6 N! S8 E
  63. -- Looking for nanosleep - found6 \1 P0 N! w4 s
  64. -- Performing Test C_SUPPORTS_WALL- R' F! F5 ?0 H  r7 x! Y) A
  65. -- Performing Test C_SUPPORTS_WALL - Success
    & {( N+ b" f% ^; m4 b2 _
  66. -- Performing Test C_SUPPORTS_O0
    / |( k+ {  X9 p
  67. -- Performing Test C_SUPPORTS_O0 - Success% ~# w5 ?2 s, s3 T: q
  68. -- Performing Test C_SUPPORTS_GGDB4 ^6 q4 e% f& R; s% w# z$ B
  69. -- Performing Test C_SUPPORTS_GGDB - Success8 N' D2 }9 S* _" N$ d* m3 f
  70. -- Performing Test C_SUPPORTS_FPROFILE_ARCS; A8 B7 v- p6 y) l4 P- ^
  71. -- Performing Test C_SUPPORTS_FPROFILE_ARCS - Failed& f1 E9 T' l* s8 U
  72. -- Performing Test C_SUPPORTS_FTEST_COVERAGE
    ) t) B$ u  `* M7 K
  73. -- Performing Test C_SUPPORTS_FTEST_COVERAGE - Success( o. c, o# ?) w" C3 L/ |* @
  74. -- Performing Test C_SUPPORTS_FNO_OMIT_FRAME_POINTER
    ! e- i4 |; t1 f0 H$ s3 E& \
  75. -- Performing Test C_SUPPORTS_FNO_OMIT_FRAME_POINTER - Success1 @0 y& z. I9 H4 e2 ~$ @1 l
  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/
    ; L( l* G9 g. y
  77. -- Found Libusb: ~/workspace/STLINKALL/stlink2/3thparty/libusb-1.0.21/libusb-1.0.21/libusb/.libs/libusb-1.0.a! P, G4 H; x6 z/ P+ X
  78. CMake Warning (dev) at src/CMakeLists.txt:39 (add_library):
    0 V: W0 z* T- u. i
  79.   ADD_LIBRARY called with SHARED option but the target platform does not0 l4 L8 y  L& Z/ S, C* u* a8 m/ v
  80.   support dynamic linking.  Building a STATIC library instead.  This may lead7 h$ g: ~& v6 |7 c" W6 ^4 S
  81.   to problems.
    2 ^$ A4 t, u: i2 I" \
  82. This warning is for project developers.  Use -Wno-dev to suppress it.
    ! P$ ^$ g' T" a, m- B; g

  83. 3 g- t4 u: [( Q3 @" I. R
  84. -- Found Perl: /usr/bin/perl.exe (found version "5.22.1")+ C1 a  @. [, x7 ^
  85. -- tests enabled/ \$ P+ U9 |9 u- Q
  86. -- Configuring done1 i% t- y. A' b, a7 H1 d
  87. -- Generating done# y" @4 h. z# c4 X' e
  88. -- Build files have been written to: /aaaa/workspace/STLINKALL/stlink2/build/Debug8 z* t% \8 X0 n) ]; A" @
  89. [DEBUG]
    / I) x: e2 M4 X% d2 H$ y( {" V
  90. Scanning dependencies of target stlink2-shared/ s3 r! I+ M( r" E7 _+ w
  91. [  2%] Building C object src/CMakeFiles/stlink2-shared.dir/stlink2.c.obj
    1 k, z: ?4 g' ]7 z' u
  92. [  5%] Building C object src/CMakeFiles/stlink2-shared.dir/cortexm.c.obj
    : n3 {/ S' r- U; J+ o
  93. [  8%] Building C object src/CMakeFiles/stlink2-shared.dir/flash.c.obj
    0 l9 \) q2 l+ f4 N
  94. [ 11%] Building C object src/CMakeFiles/stlink2-shared.dir/log.c.obj* s. O- s  \$ a# `
  95. [ 14%] Building C object src/CMakeFiles/stlink2-shared.dir/usb.c.obj2 I: T0 l' X8 I  `/ @) ?" }
  96. [ 17%] Building C object src/CMakeFiles/stlink2-shared.dir/stm32.c.obj
    . Y3 B# _) U2 D* |* e
  97. [ 20%] Building C object src/CMakeFiles/stlink2-shared.dir/semihosting.c.obj
    7 d- |8 ]. r# P# H. F- q; }
  98. [ 23%] Building C object src/CMakeFiles/stlink2-shared.dir/utils/hexstr.c.obj0 a' r8 ]' G# {) S% h" c
  99. [ 26%] Building C object src/CMakeFiles/stlink2-shared.dir/utils/msleep.c.obj1 P4 w* e9 U6 v9 B9 `9 a5 C
  100. [ 29%] Building C object src/CMakeFiles/stlink2-shared.dir/utils/ihex.c.obj2 c# H8 [6 c9 [& c3 U
  101. [ 32%] Building C object src/CMakeFiles/stlink2-shared.dir/utils/flag.c.obj
    8 ^0 l  T5 z/ V. T5 G
  102. [ 35%] Linking C static library stlink2.a8 q- ], g& l2 H
  103. [ 35%] Built target stlink2-shared/ r# j) @# f$ S. U
  104. Scanning dependencies of target stlink2-static3 E" y! W7 p' @: c. h
  105. [ 38%] Building C object src/CMakeFiles/stlink2-static.dir/stlink2.c.obj
    # f' j) H7 V1 p" Y4 i1 S
  106. [ 41%] Building C object src/CMakeFiles/stlink2-static.dir/cortexm.c.obj
    0 Q& W. S0 z; w" T9 a$ a" g
  107. [ 44%] Building C object src/CMakeFiles/stlink2-static.dir/flash.c.obj
    / C, H' B+ o1 H# C
  108. [ 47%] Building C object src/CMakeFiles/stlink2-static.dir/log.c.obj
    ( g" y* j: {1 B) L* ?
  109. [ 50%] Building C object src/CMakeFiles/stlink2-static.dir/usb.c.obj
    ) q: ]* y$ U, Q$ o- S
  110. [ 52%] Building C object src/CMakeFiles/stlink2-static.dir/stm32.c.obj/ c- u+ e; O3 d$ @5 x
  111. [ 55%] Building C object src/CMakeFiles/stlink2-static.dir/semihosting.c.obj
    8 T5 T# Z; [% \" D3 a; i  A* n& Q
  112. [ 58%] Building C object src/CMakeFiles/stlink2-static.dir/utils/hexstr.c.obj
    $ x0 b+ @2 X$ _
  113. [ 61%] Building C object src/CMakeFiles/stlink2-static.dir/utils/msleep.c.obj5 `; l, Y$ `/ I& w9 M
  114. [ 64%] Building C object src/CMakeFiles/stlink2-static.dir/utils/ihex.c.obj
    + l1 d! f: k1 A; a+ Q5 Z0 c& x* W
  115. [ 67%] Building C object src/CMakeFiles/stlink2-static.dir/utils/flag.c.obj0 j( B% ]/ T6 M: M2 p0 i
  116. [ 70%] Linking C static library stlink2.a
    # J7 a6 z" X: m8 U
  117. [ 70%] Built target stlink2-static$ ]# h# ?/ g  v" m2 L
  118. Scanning dependencies of target stlink2( f! Z- F3 ]$ Y5 ]  I' E! `$ {, h
  119. [ 73%] Building C object src/cmd/stlink2/CMakeFiles/stlink2.dir/main.c.obj
    ; s! V0 |/ O+ y. A6 n8 T: N! k# {4 u
  120. [ 76%] Linking C executable stlink2* h7 M3 N0 R5 Q3 ]$ `  o2 {
  121. [ 76%] Built target stlink2
    0 k7 y0 ~# M3 g! S
  122. Scanning dependencies of target probe4 O- h, C5 a# A7 I. p* w/ }
  123. [ 79%] Building C object tests/CMakeFiles/probe.dir/probe.c.obj
    # M" Y9 n! l  @8 @2 ^7 {
  124. [ 82%] Linking C executable probe/ D% p5 ^7 }1 y5 O; H
  125. [ 82%] Built target probe# i9 ^/ f/ a1 U) O3 z5 r' K
  126. Scanning dependencies of target open_close
    0 }7 A7 k9 d2 j- M) w) p9 u
  127. [ 85%] Building C object tests/CMakeFiles/open_close.dir/open_close.c.obj4 {4 J# I* |+ p( L7 Q
  128. [ 88%] Linking C executable open_close, d9 S3 M9 z" g$ e
  129. [ 88%] Built target open_close
    " i+ K. e- m& D$ K
  130. Scanning dependencies of target ihex2 @6 B# E3 g$ L; z
  131. [ 91%] Building C object tests/CMakeFiles/ihex.dir/ihex.c.obj$ V% K8 m; P9 ~6 S# y
  132. [ 94%] Linking C executable ihex
    2 V. G( {7 r. z, b7 A
  133. [ 94%] Built target ihex, a; g1 O- N  K+ F7 j& m3 o
  134. Scanning dependencies of target log, r; N4 _1 o! D  r  u; W$ `
  135. [ 97%] Building C object tests/CMakeFiles/log.dir/log.c.obj6 U; @8 e! B  P* b. N2 |5 k7 t
  136. [100%] Linking C executable log1 C4 U8 X1 [! j+ V& Z
  137. [100%] Built target log
    # V% f% o" t- q) H! ]" ~

  138. " a4 W( m' J$ o( r, n0 V
  139. admin@admin-PC MINGW32 ~/workspace/STLINKALL/stlink2) a! A; L8 S8 e. F
复制代码
测试工具在 build\Debug\tests
: g/ c& l1 |! ~6 e+ q% \编好的静态库 build\Debug\src\stlink2.a2 w% Y% n; e' \
3 b& d& Y  G- w/ v$ Z

; f4 _; A+ ]2 [% j+ Y) x5 T$ C+ ?! o( {. d" v
, f: E' j2 R. A5 m* O, l

2 _7 f- N* C0 [  C+ k6 |, s) i. dmsys2命令行下可直接运行.8 N$ U8 B5 E: r" L
window cmd下运行可能会提示缺少msys-2.0.dll,msys2\usr\bin下可以找的
9 C% G5 E) j) K* n' s% W1 e
9 B; y, \2 i3 }测试一下:" Z$ h3 M' c3 G" ~4 o
: D, _: Z5 L6 l- \3 h5 R1 t

open_close

open_close

4 Y$ K  r  v3 O) @7 [/ |4 c3 D, ]1 F& |% F# P% X! I
# D& M; d6 Q1 h; ^% P7 d5 P
ENJOY YOURSELF2 c! N$ [$ v+ m/ Y0 m2 ^

: U; @. P+ h- M: y
* d- K$ b8 R4 F6 a
6 S! Y! ~$ ]: U4 H; Y7 g
( e* I( v0 e" w( g* G3 [. e$ ?3 }: g( s* u; w
# f. ^* T6 j; ~$ c. B7 D7 }- ~! g

* u. Z. I3 C, v' s' R) [* s

评分

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

查看全部评分

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

举报

15个回答
Mandelbrot_Set 回答时间:2017-2-8 14:46:17
读下flash 看上去OK% l) L$ W4 }4 n) l

( M  J7 f% i6 z5 [5 s修改下open_close.c:
: |) H# T: M  Y2 ~+ k- c1 j3 k/ s
#include <stdio.h>
3 b8 v' D4 l7 g# z#include "stlink2.h"$ r! l7 W( a+ x" _0 o

& v2 _# O5 S6 w: b* }void dump_hex(const void * data, size_t size)' w1 k) Q3 L8 q  |& ~* ?
{2 q1 M' X' w, x
        char ascii[17];! `4 E- i+ a( j3 o2 S& B
        size_t i, j;( X) e2 b! D. |5 A8 |8 z* b
        ascii[16] = '\0';
, E, k* P% B, K: y+ l; y        for (i = 0; i < size; ++i) {
' o. s; g7 `9 K. w1 n                printf("%02X ", ((unsigned char*)data));! D! Q  K1 m" F( u' U; D; K5 B7 T4 c
                if (((unsigned char*)data) >= ' ' && ((unsigned char*)data) <= '~') {
- T/ [/ o6 p; O7 C- X' @                        ascii[i % 16] = ((unsigned char*)data);
% \& V. `; E* L: n                } else {- N8 V. X) I, J; }7 @: Y7 _
                        ascii[i % 16] = '.';
' F( P3 t( j' e# z  @1 p                }
( e3 h) z% a7 N; i3 ]9 k& }$ ?                if ((i+1) % 8 == 0 || i+1 == size) {* M  w4 ?4 w2 Y9 L) w8 u5 I2 O
                        printf(" ");
1 ]2 L. [4 s/ ~2 Y, Z                        if ((i+1) % 16 == 0) {$ P; p5 }6 [. S. Q0 _- f
                                printf("|  %s \n", ascii);
$ R7 z+ @0 }2 [2 p                        } else if (i+1 == size) {
8 c9 d' J! ~+ R                                ascii[(i+1) % 16] = '\0';- c9 _" B4 x! A1 G6 P* M
                                if ((i+1) % 16 <= 8) {
2 q/ h$ i3 c9 J0 T2 m, V                                        printf(" ");5 E5 Y1 x, _" S6 o7 P# ~" t
                                }
( i- S5 X! h$ P8 h- E6 M                                for (j = (i+1) % 16; j < 16; ++j) {
* G: ^/ t8 s# u* ^& ^! n8 {+ S7 p                                        printf("   ");
' F# q5 b% c* U* d# b+ y: c% w                                }+ [' [' B- Y' J
                                printf("|  %s \n", ascii);: s; x4 W1 [% F! ?
                        }" E" u+ f  Y/ i6 a; o# r
                }# i9 o. V5 h: o7 k% }9 O
        }& Q7 ?5 Z) r. N5 h
}( d. h. W! q' V3 D
; D, B! n0 n& U" S! p/ z% F
static void test_open_close(stlink2_context_t ctx, const char *serial)" ]. r) I3 X% y  L
{& i/ Y5 ?) D* [
        stlink2_t dev;
( x1 e% k1 v" ?  m% d! }
/ E. r7 m2 P  ]3 l8 ^" X2 T) h        dev = stlink2_open(ctx, serial);7 z% ]6 C; e; i2 B
        if (!dev)
0 a0 O; m* g4 g" P7 n  T                return;; V0 k& d/ r5 I+ I: @6 t  {" [, k

6 X8 y7 ]. Y: q0 ?* C9 e9 [9 s        uint32_t cpuid;
! S/ V' R$ T) s5 k- q4 p, q, g        uint16_t devid;) q( X' a  r  \$ v

8 p( G$ g0 V% x1 h* _% s! y        stlink2_log_set_level(dev, STLINK2_LOGLEVEL_INFO);/ k" R$ @! ?  I3 ?. `, s
- I# h$ u2 ~4 u8 c3 F5 C7 i$ {
        //printf("  serial: %s\n",    stlink2_get_serial(dev));! E) I+ c! X3 G2 L. A! x
        //printf("    name: %s\n",    stlink2_get_name(dev));
8 A) k  Z2 _  r        //printf(" version: %s\n",    stlink2_get_version(dev));8 A/ H) z: Q4 N  w

% {, p6 F  l7 E' V        stlink2_get_mode(dev);
5 U& j8 A( t* K1 t$ _2 a        stlink2_set_mode_swd(dev);
' }) I( N0 b) {8 u% P        //stlink2_mcu_halt(dev);
' q( O8 V* _; W6 Q7 |
. h4 x' J& D) l0 n/ t# C        /*
! a5 ?+ J6 B8 [! N5 Z+ I/ `* i' h    uint32_t pc;) P4 @  J! J! B  p" |2 t6 o

. `% l& u- B% l6 C5 e        stlink2_read_reg(dev, STLINK2_CORTEXM_REG_PC, &pc);% w& k8 C  a' J4 {$ R
        printf(" PC: 0x%08x\n", pc);
1 h" {7 ]( I7 k( |( {        stlink2_read_all_regs(dev);  ^3 H4 ^4 X; b; ]6 K3 y& y- n3 E

( m' J  S: q* q' G        stlink2_mcu_init(dev);
. X8 m8 e# p3 I, T. w) i: D        stlink2_read_reg(dev, STLINK2_CORTEXM_REG_PC, &pc);
' P( K: L) X5 k$ `  R& ^        printf(" PC: 0x%08x\n", pc);
$ N( T# Z0 N2 C8 D* O
5 E) p6 q- j1 q. [: [9 H        uint32_t xpsr;! C1 R! A0 u2 c" P  ~9 c
        stlink2_read_reg(dev, STLINK2_CORTEXM_REG_XPSR, &xpsr);% [# f& ?7 b& J9 }0 P
        printf(" xPSR: 0x%08x\n", xpsr);
- H3 }. S+ V$ |9 [. w: m. k( d6 p. m3 |) u
        uint32_t control;5 y) O  G- |) V6 d. Z* v% r4 l
        stlink2_read_reg(dev, STLINK2_CORTEXM_REG_CONTROL, &control);. [1 b" n0 b3 F. ]) y5 }3 T
        printf(" CONTROL: 0x%08x\n", control);/ i( E7 N" [  D; }  ?
/ c3 [* `8 U1 ?1 ^4 v
        cpuid = stlink2_get_cpuid(dev);
! d; W9 I  `3 m' D" i$ v        devid = stlink2_get_devid(dev);) D/ n" J6 Y/ _! p: S
*/" c6 A& H% D! \6 V4 i3 ^. M( y
/*
8 g& B* p) h/ A+ {4 {: B        printf(" voltage: %f\n",    stlink2_get_target_voltage(dev));, z" @# B, B& R/ f+ j
        printf("   cpuid: %08x\n",  cpuid);
/ p" L7 m, ^& v- D. ~) M        printf("     partno: %03x (%s)\n", stlink2_cortexm_cpuid_get_partno(cpuid), stlink2_cortexm_cpuid_partno_str(cpuid));
9 P" H$ O% R+ ?* K3 c3 r; A        printf("  coreid: %08x\n",  stlink2_get_coreid(dev));1 |4 v, ^8 W& l. [: g+ W) U
        printf("  chipid: %08x\n",  stlink2_get_chipid(dev));
+ x0 F6 E7 |7 ^0 r* z& y2 B$ m: `4 s        printf("   devid: %s (0x%03x)\n", stlink2_stm32_devid_str(devid), devid);5 s% D  B- x7 ?, i( e
        printf("  flash size: %dKiB\n", stlink2_get_flash_size(dev));
; B& ~* z. X6 [" s/ Y        printf("  unique id: %s\n", stlink2_get_unique_id(dev, 0x1ff800d0));
, w6 T  B. v- B% e1 k*/8 ]2 F+ v4 |  J% B
& W$ Y' A9 O  w: ]5 \+ z. `7 k
//#ifdef BLA
, h9 G+ y, l% x5 j  z3 l6 A        uint8_t *flash = malloc(1024);& j  L' M4 h; H0 @& ^) e) A$ T8 H
        stlink2_read_mem(dev, 0x08000000, flash, 1024);
1 \& a3 f+ K3 }& w( L        dump_hex(flash, 1024);
/ c9 i$ ]" v$ s( b1 a//#endif+ _) Y( e8 n5 j' B  b
#ifdef SEMIHOSTING) k0 F+ ]8 Y6 O* j/ }5 a
        while (true) {
+ j7 l3 e& P' x, C7 |% c                if (stlink2_get_status(dev) == STLINK2_STATUS_CORE_HALTED)
; h" `6 x& Z0 d9 N+ J5 Z4 c3 ~, |                        stlink2_mcu_run(dev);
% R: U) g7 O) p4 ~  Q7 c9 k                stlink2_semihosting(dev);: v0 z5 A! @1 I& B( d
                stlink2_msleep(1);+ y, T) e, ]/ D$ J1 S
        }' C- ~7 {- v$ S' s7 j3 ?! G% A
#endif
9 g2 ?: r. N+ ]/ b; v* N6 k
. c( u# _. z# m/ l5 O        //stlink2_mcu_run(dev);. F5 Q$ t) x: y( ~5 m8 X
        stlink2_close(&dev);
# W& X3 y1 D; L6 p. y$ U: P}( v) ?) j; |9 x) i* `
; f9 q- o% m- `: j5 x
int main(void)
6 o$ X1 u4 y4 M  a{
, C& E) @, {+ x( y1 b        stlink2_context_t ctx = stlink2_init();
& |% M3 H9 A! u9 E6 R- S/ d+ N, o1 }) `! C, X* t
        test_open_close(ctx, NULL);
# x/ y# b; w& m1 }& V6 m  q- `/ @        stlink2_exit(&ctx);
2 ~, {5 x7 N$ p! G4 {+ r}
, i8 R8 v% f$ E+ D, w# \' b0 P
readram.PNG
moyanming2013 回答时间:2017-2-8 17:37:02
不同于ST-LINK/V2吧?ST-LINK/V2还未开源吧?
七哥 回答时间:2017-2-8 23:11:38
楼主强大,楼主威武,此处有掌声8 p7 a# a) ]! x$ h: u6 h
标记备用
Mandelbrot_Set 回答时间:2017-2-9 09:55:48
moyanming2013 发表于 2017-2-8 17:37
: Y8 Y; R6 c$ ~  ]2 Y3 v不同于ST-LINK/V2吧?ST-LINK/V2还未开源吧?

: c& d) Q# }( _* k8 C7 u. L0 @我截图用的NUCLEO-F303RE..
( ]& w$ X. h/ p" l
xiongmao5k 回答时间:2017-3-29 14:26:20

最近也在搞这个。

本帖最后由 xiongmao5k 于 2017-3-29 16:25 编辑 # v+ B9 n5 B; V- A2 @; m

1 i5 z* ?1 y# }6 \0 W7 y' |我用的是TDM-GCC,cmake已经构建成功,make有问题,先赞一下楼主,再回过头看。& Q- c3 O4 F( O- o
现在已经编译成功,生成了三个文件,sg.exe   flash.exe   usb.exe    问一下楼主,接下来应该怎么用啊???. |- R9 y- N. _: ]2 f: _
Mandelbrot_Set 回答时间:2017-3-30 09:17:16
xiongmao5k 发表于 2017-3-29 14:26; l, U* {) y+ b" ]  H, E
我用的是TDM-GCC,cmake已经构建成功,make有问题,先赞一下楼主,再回过头看。
! C/ f# e) ]. T" ?+ M3 ]现在已经编译成功,生成了 ...

- B  Q( ~. @6 z! Y+ p% A4 a# M你用的应该是http://github.com/texane/stlink吧。
$ s9 E) ^5 N$ e和我一楼说的不是一个东西。这个要比我1楼说的功能强很多.
% s5 ~0 |* \& _% z6 X  v8 }( Q: Q6 p这个github上有编译好的win64版本) j" s$ r8 [7 w' s6 w
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:05
5 q2 ]6 \( K2 e3 T3 Q( h我用的也是STlink-v2,现在想做的就是自己修改main文件,实现通过代码实现stlink直接对spi flash下载擦除的 ...
! ^* s# [6 T9 Q- S8 R, u
官方stlink utility 就有这功能的.(没用过)* e: q6 Y. K/ c* K0 C$ H; M
http://www.st.com/content/ccc/re ... s/en.CD00262073.pdf
1 ]2 y3 O$ M7 W, L4 C# i2.2.6节 3.9节 等
5 n( H, g2 `6 L3 H: S
) m0 ?' r  Z5 D: K) b
xiongmao5k 回答时间:2017-4-5 13:25:51
本帖最后由 xiongmao5k 于 2017-4-6 11:31 编辑
2 k: i! V: k, x" [, d8 c# M
Mandelbrot_Set 发表于 2017-3-30 17:59
* E- E4 X1 g6 L官方stlink utility 就有这功能的.(没用过)
0 }6 Z9 V) ?, {/ ~% ?7 b9 r7 Shttp://www.st.com/content/ccc/resource/technical/docume ...
: @! k0 E' M7 s% l/ O2 x9 Z/ k
软件我是用过的,现在是想用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
4 P. {; Y6 ]/ U5 u2 C我怎么编译不出来这些可执行文件呢?执行make debug以后,生成了一堆东东,象是ihex log open_close probe  ...

% m; P4 r+ C3 e有一个*.a的库。% [: d! K  V, E0 W. M2 J, K- C
ihex log open_close相当于是例子.功能比较少...
CC4 回答时间:2017-4-13 09:56:46
Mandelbrot_Set 发表于 2017-4-13 09:34
; S' `5 q9 |) \, J1 n$ o有一个*.a的库。
" T% {& N) \6 O. n( Sihex log open_close相当于是例子.功能比较少...

( Q) a& a- c% d4 ^5 O- W那意思是,这个不是一个完整的工具?而只是一个开发库?
Mandelbrot_Set 回答时间:2017-4-13 10:19:33
select326 发表于 2017-4-13 09:566 c: n+ h% W9 `: h; t; O7 Q
那意思是,这个不是一个完整的工具?而只是一个开发库?
* o3 b5 L( ?/ M3 C. G
是啊./ I$ l4 x* g# T& W( h; K( |
另外,找了半天只找到memread,没找到memwrite,
5 T: y  X- `" n3 E7 K功能不是很全,编译一下,纯当练练手了.9 ^8 ]  O& v3 A: Y% K
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版