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

【源代码】STM32F103C8T6最小板搞定CMSIS-DAP和SWO功能  

[复制链接]
radio2radio 发布时间:2018-5-31 15:47
阅读主题, 点击返回1楼
1 收藏 45 评论417 发布时间:2018-5-31 15:47
417个回答
sunonly 回答时间:2018-7-6 19:13:30
感谢分享!下来学习学习
radio2radio 回答时间:2018-7-17 17:20:34
shanji 发表于 2018-7-4 19:16
& |& q& _* D) Q看来要换个mdk版本了

: ]# I, M1 Y" e! v搞定没有?
hi201803 回答时间:2018-7-22 19:23:07
radio2radio 发表于 2018-7-17 17:20
5 z& x) V- s% {2 n  `搞定没有?

: r' w/ T% {! {( [在  MDK 4.xx  里面编译通过了。 4 B8 j3 F: t; y
只需要把 缺少的头文件复制过去就可以,大约3个,再改一下include 设置就可.4 J4 d7 }. p$ I& b

+ V( u: e. M" Y缺少的头文件 在MDK 5.xx 下面目录里.
3 U8 R  a, P  |8 ^8 Y  RC:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Include5 @. ^) Z8 e% Z& H) ]3 E/ S7 V
C:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Driver\Include
! W" v+ l/ r: b- J2 t& [2 N2 i9 U5 w; L9 K7 G7 o! r
缺少 的 usb库文件 也复制过去. 具体在哪里就不清楚了.
wujique 回答时间:2018-7-24 09:35:40
楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。0 c: R' g/ I- p  G) W5 `
还有CDC不敢呢?不知道DAPLINK是否有这个BUG。
radio2radio 回答时间:2018-7-24 21:21:44
huangxuejia-292 发表于 2018-7-24 09:35" S+ ]3 V) j& ^7 T6 J% j- T3 k
楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。/ k: ~+ o' f0 B& L
还有CDC不敢呢?不知道DAPLINK是否有这个BUG。 ...

0 U4 e. m4 i: a; B  P& [% k& O这个简单,在main.c的最后面一段,我拷贝到这里:: i& v- ~' N7 O. ~5 D# C7 ~1 S

  1. 7 b& ^' _9 D" I( z5 v. g9 K
  2. //-----Soft reset + Hard reset-------------------------------------------------
    + w0 P7 V7 ~. i2 w
  3. #define PIN_SWCLK_SET PIN_SWCLK_TCK_SET
    9 r; x2 A9 K2 F/ I5 F
  4. #define PIN_SWCLK_CLR PIN_SWCLK_TCK_CLR$ r8 K3 q# q* u/ c4 [% ~
  5. 6 Y6 d4 E7 J2 j1 W
  6. #define RST_CLOCK_CYCLE()                \
    # c$ j# ]3 @1 S! C3 m; g* s* {
  7.   PIN_SWCLK_CLR();                       \. R! z, }5 h, ^3 b6 S, f
  8.   PIN_DELAY();                           \
    " N: s/ m# F. j4 @: T& h# I
  9.   PIN_SWCLK_SET();                       \# P: P2 P# M1 A0 n. }8 }; S
  10.   PIN_DELAY()
    $ H9 o* I$ U( c, J5 c( }# z4 D
  11. 0 ~$ {2 L# D+ y' P& k
  12. #define RST_WRITE_BIT(bit)               \) _: s- b: e$ G# v* V( R* M$ r* y- B
  13.   PIN_SWDIO_OUT(bit);                    \
    5 _* j6 T; l0 n- d" Z  Y9 \+ h
  14.   PIN_SWCLK_CLR();                       \
    ) a1 z) q. [/ w  F, P) R* u, R
  15.   PIN_DELAY();                           \
    ) ?1 W; k0 B9 ~* t
  16.   PIN_SWCLK_SET();                       \* T9 i' N' f* U  i7 i( k
  17.   PIN_DELAY()
    + ^1 m: x1 k- t* {2 \2 C
  18. 8 j+ U% v5 S0 J/ K4 I+ [; g
  19. #define RST_READ_BIT(bit)                \4 j. I) V) |2 E7 p$ n' \* R5 [: d
  20.   PIN_SWCLK_CLR();                       \% {2 b7 T7 W9 Z! t
  21.   PIN_DELAY();                           \
    + e9 G8 d& ?( {% e0 C& x
  22.   bit = PIN_SWDIO_IN();                  \
    ( e) Y+ a. V  T& O
  23.   PIN_SWCLK_SET();                       \! q$ t; C4 V$ W4 r$ i! o5 h0 j1 N
  24.   PIN_DELAY()5 `$ I7 s8 C5 w" Z% _, c5 o# F: `7 D( b0 c/ t
  25. 5 n& w; k2 l4 m
  26. #define PIN_DELAY() PIN_DELAY_SLOW(DAP_Data.clock_delay): {- K& M% n6 L4 y1 Q
  27.   w# |# }: e# c# r
  28. uint8_t RST_Transfer(uint32_t request, uint32_t data)
    + v5 A  x* I& F  h  o; Q
  29. {( r* g' Q% i( z# M( V
  30.   uint32_t ack;                                                                 \; h0 f+ b( {6 \  {/ l
  31.   uint32_t bit;                                                                 \6 T# {, {# v6 B/ m. B
  32.   uint32_t val;                                                                 \% m6 B7 R+ P) Y! d3 K8 d5 c0 @
  33.   uint32_t parity;                                                              \* V2 N# V3 ]& c' a$ c0 L
  34.   uint32_t n;                                                                   \+ P4 r& u) i" X& P
  35.   \6 e9 o1 H7 _& p+ L& O, U/ t$ M3 m
  36.   /* Packet Request */                                                          \
    * L0 X$ n8 y* ]2 V( l6 B
  37.   parity = 0U;                                                                  \2 i5 m+ V- c& R: t2 ~
  38.   RST_WRITE_BIT(1U);                     /* Start Bit */                        \
    ' H* s! Z) i7 j  ?; d; B8 e3 n
  39.   bit = request >> 0;                                                           \9 b$ T) r  R  a; M0 ?- P( T
  40.   RST_WRITE_BIT(bit);                    /* APnDP Bit */                        \
    ! t6 q  \" J- `2 S9 N3 L
  41.   parity += bit;                                                                \! l; R" F9 [" j6 J- x4 A- [
  42.   bit = request >> 1;                                                           \
    & W9 N% m' D8 D  D6 [
  43.   RST_WRITE_BIT(bit);                    /* RnW Bit */                          \( l6 n+ p7 c# Q1 q) ?( p4 n
  44.   parity += bit;                                                                \
    ; j% ^' y" m! i/ H
  45.   bit = request >> 2;                                                           \
    # P! e; E2 K0 \2 L8 A2 Y) h
  46.   RST_WRITE_BIT(bit);                    /* A2 Bit */                           \3 `. N, Q/ ~, p4 }7 g% _( q
  47.   parity += bit;                                                                \: {$ y3 K$ t* S" Y- Y; u
  48.   bit = request >> 3;                                                           \
    7 h2 l' K' @2 y$ y. V, p0 I/ L
  49.   RST_WRITE_BIT(bit);                    /* A3 Bit */                           \7 {& _7 P' x9 o+ R0 ]+ f3 M# s  i
  50.   parity += bit;                                                                \0 o8 F( N/ O+ Q1 K; _# S
  51.   RST_WRITE_BIT(parity);                 /* Parity Bit */                       \8 v" g$ ~- M* i4 p% R$ O
  52.   RST_WRITE_BIT(0U);                     /* Stop Bit */                         \- A9 q6 e/ C- P$ I
  53.   RST_WRITE_BIT(1U);                     /* Park Bit */                         \
    % h7 {. X  _: m1 G" @6 d/ g* k
  54.   \
    " l% C8 n$ {" ?0 X% Z/ Y$ [" ^
  55.   /* Turnaround */                                                              \
    0 D* c2 Q  m, L8 c7 Z2 F3 O8 t2 \
  56.   PIN_SWDIO_OUT_DISABLE();                                                      \7 U; q- h% E6 f7 m" ]
  57.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \+ W7 u( _" g4 N+ X2 C) p
  58.     RST_CLOCK_CYCLE();                                                          \' H2 J# b+ W2 r1 \1 [- |; ]
  59.   }                                                                             \
    1 A) U) s/ e' D  g" e
  60.   \
    9 r3 Z3 h: B& Y5 J0 e  ^
  61.   /* Acknowledge response */                                                    \1 |# G) k2 C7 {/ U7 P$ r
  62.   RST_READ_BIT(bit);                                                            \, F1 R$ A/ a! g
  63.   ack  = bit << 0;                                                              \
    0 z; u4 u! n6 f9 W  e
  64.   RST_READ_BIT(bit);                                                            \
      J/ n# E: I4 p4 N3 y  i
  65.   ack |= bit << 1;                                                              \
    8 v; z) Z, R. t
  66.   RST_READ_BIT(bit);                                                            \+ p! S, q" e% I  m8 A5 L! y0 r
  67.   ack |= bit << 2;                                                              \
    # I+ V" r3 |& N' O# U
  68.   \
    ! ~. G3 E9 `6 I# \  u, c2 Z0 I
  69.   /* Data transfer */                                                           \5 U8 l2 k! _: q  h! P
  70.   /* Turnaround */                                                              \
    2 {: g6 G( i, H( }/ {* h$ \
  71.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \+ B$ ~4 P! X" I$ {+ x
  72.     RST_CLOCK_CYCLE();                                                          \
    # w2 r6 B. q( h) Z
  73.   }                                                                             \2 {$ J; ]- T1 W1 J7 S) Y0 X+ h
  74.   PIN_SWDIO_OUT_ENABLE();                                                       \( x' d2 a2 j" |: X0 e1 Q9 d
  75.   /* Write data */                                                              \
    2 A3 @5 B1 W; x0 y- K2 I
  76.   val = data;                                                                   \
    ; R& E5 M7 P' v; U! `& b5 R
  77.   parity = 0U;                                                                  \8 T9 @  o! Y/ b2 T' b2 M* Y& L
  78.   for (n = 32U; n; n--) {                                                       \
    # L# ]. w4 T! M, w+ u" c8 s
  79.     RST_WRITE_BIT(val);              /* Write WDATA[0:31] */                    \
    " V' @, G, l4 W; d7 Y
  80.     parity += val;                                                              \
    . [, @0 \3 y' e( a
  81.     val >>= 1;                                                                  \% J3 a5 X: ~0 n
  82.   }                                                                             \7 O! l, K- F7 f; `
  83.   RST_WRITE_BIT(parity);             /* Write Parity Bit */                     \
    0 z1 b9 i- c6 F
  84.   PIN_SWDIO_OUT_ENABLE();                                                       \9 _. k! k' d8 V7 N
  85.   PIN_SWDIO_OUT(1U);                                                            \
    0 C$ m4 V! W0 q: I
  86.   return ((uint8_t)ack);                                                        \4 O  w/ e3 m$ c" l7 X
  87. }; R) \2 O2 z! ?5 X# V; c
  88. ) e( T. M1 a$ k( A
  89. void vResetTarget(uint8_t bit)
    & B% H' ~/ D% |4 J0 F, ]4 i
  90. {
      \7 T) |- X8 Z3 {: c) K
  91.   uint32_t i;, j% w4 W% T) O: [8 N/ B
  92.   //soft-reset for Cortex-M
    ! R6 c# M$ h, J$ }
  93.   RST_Transfer(0x00000CC5, 0xE000ED0C); //set AIRCR address
    $ ^# x* I" H4 W( M& E0 O5 P
  94.   for (i=0; i<100; i++);8 i" y7 `7 r0 }; A( M' z
  95.   RST_Transfer(0x00000CDD, 0x05FA0007); //set RESET data
    ( Q: z4 E% [! u) D5 C
  96.   for (i=0; i<100; i++);
    7 v  H0 O) Y) n1 J8 v
  97.   RST_Transfer(0x00000CC5, 0xE000ED0C); //repeat" Q7 F; W2 _0 t1 G, ]9 Z
  98.   for (i=0; i<100; i++);
    ! R# p  l, I! g6 i  C2 M% k2 U6 G
  99.   RST_Transfer(0x00000CDD, 0x05FA0007);
    6 ~3 Y4 P3 F: Z3 ^0 W: F8 V
  100.   7 m- `, W0 W! O$ P" z4 [% o+ Q
  101.   if (bit & 1)  PIN_nRESET_HIGH();1 [) V4 ~7 N" |$ Q
  102.   else          PIN_nRESET_LOW();2 W$ l4 X7 o/ |2 x* i7 h7 v6 Z1 g
  103. }$ i& U% H2 x- A( B: V; Z

  104. ! R( h- Y. _! J$ S6 }
复制代码
9 z6 ~5 {0 N: j

* p* v' r7 x! o, t1 U) {* D% k您再看看,是哪里调用了vResetTarget(uint8_t bit)函数。
) F6 t+ _" ^/ i/ B/ R5 z' f
) x- q2 a4 X2 _CDC的改进,我是仿造CubeMX的CDC user 样板文件,UART库函数换成ARM RTE的。 解决了原来的版本CDC操作会导致死机问题。$ f- E% @# o7 `3 h
7 s  p8 u: }& I0 P
USB的底层没有动。我曾经尝试将USB库函数更换成CubeMX的,没有成功。+ b- e2 B( \1 _& R0 r& _, g
也还发现,如果换成CubeMX的USB库,编译后代码文件会大了很多,很可能导致64KB不够用(我的F103C8只有64KB)。" D- G5 g. V" V% l) k* V

( i" i9 R9 J* e; L. M5 M+ P
wujique 回答时间:2018-7-25 15:00:55
radio2radio 发表于 2018-7-24 21:21
1 q" o% N; s* D% W这个简单,在main.c的最后面一段,我拷贝到这里:
3 l3 g3 u* {; L% A
改好了,调试能复位。; l6 \) C' z; p
MSD(U盘拖放)无法复位。。。
radio2radio 回答时间:2018-7-25 18:59:43
本帖最后由 radio2radio 于 2018-7-25 19:14 编辑 % ?, J" W/ [0 K! M" ?7 a
huangxuejia-292 发表于 2018-7-25 15:000 v$ U8 U0 `5 [
改好了,调试能复位。
3 {8 ?! V9 f, R# S$ }! j9 `MSD(U盘拖放)无法复位。。。

3 B/ u& J5 F; `; D# S5 w你看看优盘拖放是不是后台运行的,要等优盘拖放完成之后,插入一个时延(100ms),调用一次vResetTarget,一定行。
  Y9 X1 ~7 K$ w* ?3 N
dreamfly239 回答时间:2018-7-26 10:38:40
很受益啊,希望楼主继续分享有价值的资料
shanji 回答时间:2018-7-27 10:01:49
radio2radio 发表于 2018-7-17 17:20
# O+ p) O5 m) ]搞定没有?

2 u$ O3 y3 X8 B$ U  w还没有,不去折腾了
hi201803 回答时间:2018-7-27 17:01:25
radio2radio 发表于 2018-7-24 21:213 U, n: Y4 P# _& g9 E5 C
这个简单,在main.c的最后面一段,我拷贝到这里:

4 A- B, @* t1 i. `0 `) G看到,github 里面有 几个cmsis-DAP使用 st的USB库,至于大小,具体情况没细看.
chowei 回答时间:2018-7-29 18:32:27
好东西
g2004-148848 回答时间:2018-8-7 00:02:08
楼主辛苦谢谢分享
g2004-148848 回答时间:2018-8-7 00:03:15
请问楼主是用哪个版本编译的?
radio2radio 回答时间:2018-8-7 11:53:12
g2004-148848 发表于 2018-8-7 00:03/ k+ ~% x8 l6 f! E$ ~
请问楼主是用哪个版本编译的?

: K# K) R% Y( h4 P% t% OKeil 5.xx,留意第60楼,ARM CMSIS要升级到V5.3.0
radio2radio 回答时间:2018-8-7 14:32:12
本帖最后由 radio2radio 于 2018-10-27 12:29 编辑 : M0 v; M6 E5 U: |6 D
3 b) l' c4 a! A& j+ G$ O
刚刚发现,一楼的原码包,USB文件夹里面,少了一个 “USB_CM3.lib” 的USB库文件。4 `5 H( O+ Z4 K! X
我自己的硬盘上面就有这个文件,但是上传github后,这个文件就是没有上传出去,我后加也不会加。) Z) g$ }! ^% L2 e& n/ T

) U% e" ^' K' Y, L9 ?我不知道为什么,记得第一次上传时,*.hex固件文件就是不给上传,后来我压缩成rar文件才传上去的。7 F5 }& y, l' y  ?0 ?! x9 |
哪位熟悉github的大侠,告诉我如何上传(.lib/.hex)等文件,谢谢。
/ v" C5 n1 u5 V$ |# e* A. y  q6 V( i; l. A5 x
没有了USB_CM3.lib库文件,肯定不行,下面的3个方法都能解决:
" E7 y! h, K; b1 g' [方法1,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。拷贝到.\USB文件夹。/ W2 D& Q9 I2 ]3 m8 b
方法2,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。将此文件添加到工程里面。0 \: L* ~% T' H3 Q  r8 i* n
方法3,在其他地方拷贝一个,加到.\USB文件夹。本楼的附件就有一个,方便有需要的。
; A* I# T, C( _0 R8 _( \: Y. A. y# b; x7 T1 A+ d; p. J
(我的github已经更新,使用方法2)+ R5 \: R# I% F# H8 r; H0 L

2 @: {; x; K( Z9 D0 ]* W这个问题已经解决,是我第一次使用github,还不熟悉,经过网友提醒,需要在github的上传过滤文件里面,修改容许.lib/.hex等文件的上传。: I) h3 w, K" e6 R  \9 {3 p4 z( F

- ^* p+ j8 Y- t( m$ D) T# K) C. d7 k

USB_CM3.rar

下载

63.75 KB, 下载次数: 47

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